机器学习课堂笔记

本文记录在本学期《机器学习及其应用课》上一些印象比较深刻的知识点;大部分在课堂PPT或者相关书籍(周志华《机器学习》,李航《统计学习方法》)上很容易理解的点就不在此赘述了;

笔者水平有限,如果有错误清多多指正;

模型的评估与选择

泛化误差的分解

泛化误差是模型对位置数据预测的误差: $$ Rexp(f^)=EP[L(Y,f^(X))]=X×YL(y,f^(x))P(x,y)dxdy

$$

首先要明确的一点是,泛化误差某个测试集误差,后者只是前者的一次估计,前者是后者所在分布的期望,测试集的选择、推理过程的随机性都会得到不同的结果。应当使用统计学中的假设检验方法比较两个模型的好坏。

但是笔者目前看到几乎所有的论文都是,在测试集甚至验证集上,有更好的性能,就SOTA了?

泛化误差是一个理论上的误差,如果能描述清楚其上下界,则对实验有一定的指导意义:泛化误差的下界决定了在一个任务上最理想能刷到多少点,是收到数据集的限制的;泛化误差的上界反映了模型本身是否容易学习,一般认为,泛化误差上界越小的模型越好,然而对于简单的线性模型,我们也许可以给出上界,但是对于现在的各种复杂的非线性的、深层的模型,给出泛化误差上界仍然是很难的问题。

下面是对泛化误差的分解:

记测试样本为xyDy分别为样本在数据集中的标记和样本真实标记,f(x;D)为训练集D上学习的模型对于x的预测标签(以下简记为f),定义对于测试样本中预测的方差var(x)=ED[(f(x;D)f(x))2](以下简记为E[(fEf)2]),定义噪声为ϵ2=ED[(yDy)2],定义偏差为bias2(x)=(f^(x)y)2;

yDy的区别,是数据标注时引入的误差,由标注员本身认知的偏置和偶然的错误组成;fEf的区别,即由于训练集变动等原因,导致模型对同一个样本的预测不总是相同;

下面的L直接使用均方误差:

E(f;D)=E[(f(x;D)yD)2]=E[(fEf+EfyD)2]=E[(fEf)2]+E[(EfyD)2]+2E[fEf+yDEfyDfEf2]=E[(fEf)2]+E[(Efy+yyD)2]=E[(fEf)2]+E[(Efy)2]+E[(yyD)2+E[(Efy)(yyD)]=var(x)+bias2(x)+ϵ2

上述推导用到的知识有:

  • E(aX+bY)=aEX+bEY,其中a,b是常数,X,Y是随机变量;特殊地E(a)=a

  • E(XY)=E(X)E(Y),当且仅当X,Y是相互独立的随机变量;

需要的假设有:

  • 噪声期望为0,即E(yDy)=0,这是假设了数据集的标注没有系统误差而都是随机误差,比较合理;则可以推出Var[(yDy)]=E[(yDy)]2=ϵ2

  • 偏差与噪声无关;

VC维

以下定义来自机器之心 - VC维度

VC维是衡量可以通过统计分类算法学习的函数空间的容量的度量。定义为算法可以破碎(shatter)的最大点集的基数。shatter的含义为,对于一个假设空间H(函数的集合),如果存在m个数据样本能够被假设空间中的函数按照所有可能的2n种方式分开(每个样本有两种类别可能),则称H能够把m个数据样本破碎开。

e.g. 线性模型的VC维为3,因为3个点线性可分而4个点的xor情况线性不可分。

泛化误差上界

在推导特定问题的泛化误差上界之前,我们定性地描述泛化误差上界:

  • 样本容量越大,泛化误差上界趋于0;
  • 假设空间容量越大,泛化误差上界越大;

考虑二分类问题,样本容量为N,训练数据集T是从联合概率分布P(X,Y)独立同分布产生的,假设空间是函数的有限集合F={f1,,fd},损失函数为0-1损失,则期望风险(L(Y,F(X))期望值)和经验风险(L(Y,F(X))样本均值)分别为: R(f)=E[L(Y,f(X))]

R^(f)=1Ni=1NL(yi,f(xi))

经验风险最小化函数为 fN=argminfFR^(f) 我们关心fN的泛化能力: R(fN)=E[L(Y,fN(X))] 对于任意一个f,至少以概率1δ, 0<δ<1,以下不等式成立: R(f)R^(f)+12N(logd+log1δ)

具体证明见: 李航《统计学习方法》。

向量、矩阵、张量的导数

理解矢量导数,最朴素的方式,就是把矢量计算拆成多个并行的标量计算;

以下内容来自cs231n的参考资料,用粗体字母表示向量,用大写字母表示矩阵,一般的小写字母表示标量;

向量对向量求导

y是长度为C列向量,WC×D矩阵,x是长度为D列向量,有y=Wx,简单的排列组合知识告诉我们,yxC×D项(二维矩阵);不妨以y的第3个元素对x的第7个元素为例: y3x7=x7(W3,1x1++W3,7x7++W3,DxD)=W3,7 推广到其他位置,不难得出结论,yx恰好就是W

如果yx都是行向量且y=xW,同样有yx=W

向量对矩阵求导

与上一小节条件相同,直观地看,yW应该是一个C×C×D的张量,设W=[w1,,wD]y=Wx也可以理解为yW各列以x中对应元素为权重的加权和,即 y=x1w1++xDwD 特殊的,我们可以得到 y3W3,7=W3,7(x1W3,1++x7W3,7++xDW3,D)=x7

y3W2,7=W2,7(x1W3,1++x7W3,7++xDW3,D)=0

推广后,我们发现,对于yiWj,k,仅仅在i=j时不为零,且yiWi,k=xk,这样,我们可以将结果的3D张量表示成一个更紧凑的2D矩阵,形状为C×D,(Cx拼接): yW=x1T

当然,结果还可以继续“紧凑”成向量x,这里我们有意让W的形状与W相同,是利于理解反向传播过程中参数的更新,当然,利用numpy/pytorch的广播机制,只需要保存一个向量即可;

矩阵对矩阵求导

将先前定义的yx分别扩展成矩阵YRC×NXRD×NY=WX;这种扩展,可以理解为使用了N个数据,对于i=1,,N,有yi=Wxi

使用先前的结论,有 Y.,iX.,i=yixi=xiWxi=W

Y.,iX.,j=yixj=xjWxi=0

将矩阵乘法展开成标量乘积之和形式,还可以得到Ya,bXc,dac时也为0,因此紧凑地表示YX,可以将4D张量缩减为2D矩阵,也就是W

类似的,YW=X

这个结果,在形式上,又与标量求导相同,只不过我们需要清楚,这些都是“紧凑”后的形式;

线性模型

线性判别分析

核心思想:将高维空间的样本投影到一条直线上,使得同类样本尽可能近,异类样本尽可能远;

如何表示投影

如何表示投影?在线性代数要点总结的“正交投影”一节,给出了将Rn中的向量y投影到子空间W后的数学表示,设U=[u1,,up]为该子空间的单位正交基,则 projWy=UUTy 在西瓜书上的图解是一个最简单的情况,原空间是R2,投影子空间是其中的一条直线(1维子空间),其单位正交基应该只有一个向量,即该直线的单位向量ω,按照上述公式,投影后的点坐标应该是ωωTx,为什么后续却适用了ωTx这一表示呢?

直观地看,在上图中,ωωTx仍然保持了与x相同的形状,而ωTx是一个标量;向量空间Rn的子空间Wp个线性无关的基,即子空间是p维的,但每个基的元素个数为n,即子空间的域仍然是p,即在线代中介绍的投影运算,在投影前后不改变域,而在这里介绍的“投影”,希望得到的是与该子空间同构的Rp上的结果,而线性判别分析的限制更强,即p=1

回想投影公式的推导过程,UTyp个正交的单位向量与y的点积结果,表示y投影到子空间各个方向上的长度是多少,之后再左乘U是为了得到投影点在Rn中的坐标;

现在我们只需要知道在1维子空间的唯一基方向的长度y=ωTx,用于分类,更准确的说,我们只要得到不同的x,投影后向相对长度,因此ω不必要是一个方向向量,不同的ω只会使得所有投影结果乘上不同的比例因子罢了;

如何设计目标函数

首先定义一些接下来会用到的符号,总样本集合X包含Nd维样本x,即Xd×N的矩阵,记类别数为K=2,第i类样本的集合为Xi,基数为Ni,均值为mi,协方差为Σi;投影后的均值为ωmi,协方差矩阵ωTΣω;(这里投影后的协方差矩阵是1x1的,因此可以视为一个标量)

有关协方差和投影后协方差矩阵的形式,可见线性代数要点总结的主成分分析一节;

希望类间距离越大,可以写成样本中心距离越大;希望类内距离越小,可以写成协方差越小,则目标函数(最大化)为: J=||ωTm0ωTm1||22ωTΣ0ω+ωTΣ1ω=ωT(m0m1)(m0m1)TωωT(Σ0+Σ1)ω 把分子分母中做个变量代换,定义:

类间散度矩阵为Sbd×d Sb=(m0m1)(m0m1)T 分母上 Σ0+Σ1=1N01(X0m01)(X0m01)T+1N11(X1m11)(X1m11)T=1N01xX0(xm0)(xm0)T+1N11xX1(xm1)(xm1)T 而在定义类内散度矩阵Swd×d时, 抛去了归一化项: Sw=xX0(xm0)(xm0)T+xX1(xm1)(xm1)T 上述目标函数重写为: J=ωTSbωωTSwω

抛去了归一化项会有什么影响吗?直观地,正负样本的数量不同时,会有差距,不做归一化会使得Sw偏向样本多得那一方。可是求平均同样会放大样本较少类别中离群点的影响。对于类别不均衡问题,LDA算法本身没有考虑,但是后续可以通过难样本挖掘等采样策略来训练等等;

如何优化

如何求解使J最大的ω?分子分母都是关于ω的二次型;由于我们只需要ω的方向,因此可以让分母为非零常数c,分子最大化;

为了便于理解,在上图中原始空间为R2的情况下,记ω=(ω1,ω2)J也就是这样的一个目标函数: J=aω12+bω22+cω1ω2dω12+eω22+fω1ω2

minwωSbωs.t.ωTSwω=c

对应的拉格朗日函数为: L(ω,λ)=ωTSbωλ(ωTSwωc)ω求导并令导数为0,得到 Sbω=λSwω LDA假设样本的协方差矩阵是满秩的,因此有Sw非奇异,则 Sw1Sbω=λω

在Fisher判别分析中,没有协方差矩阵满秩的假设,因此Sw1可以使用求伪逆的方法;

转化为求解Sω1Sb的特征向量的问题;但是,又观察到(m0m1)Tω是标量,则Sbω始终与(m0m1)同方向: Sbω=(m0m1)(m0m1)Tω=λ(m0m1) 因此 ω=λλSw1(m0m1) 比例因子λ/λ可以忽略,因为我们只在意方向;

如何分类

对于二分类问题,在投影到1维直线上之后,我们需要确定一个阈值来在推理时区分正负类别,最简单的,可以使用投影后的样本中心的均值作为阈值;

如何扩展到多分类

观察上述过程,扩展到多分类,仍要满足类内距离小,那么Sw的定义只要由两类协方差矩阵之和扩展成多类协方差矩阵之和即可; Sw=i=1KxXi(xmi)(xmi)T

仍要满足类间距离大,那么Sb的定义该如何扩展?

先定义一个全局散度矩阵Stm表示所有样本的均值: St=i=1KxXi(xm)(xm)TSb=StSw,则有类间样本均值:

(xm)(xm)T(xmi)(xmi)T=(xm)(xTmT)(xmi)(xTmiT)=mxTxmT+mmT+mixT+xmiTmimiTxXi(mxTxmTmmT+mixT+xmiTmimiT)=Ni(mmTmiTmiT)+(mim)NimiT+Nimi(miTmT)=Ni(mmT+miTmiTmmiTmimT)=Ni(mim)(mim)T

Sb=i=1KNi(mim)(mim)T

扩展到多分类的另一个问题在于,投影到1维直线上已经不太合适了,d×1的投影向量ω扩展为d×(K1)的投影矩阵W,但是这样一来,目标函数的分子分母都不再是标量而是矩阵,可以改成求矩阵的迹

协方差矩阵的迹是总方差

maxWtr(WTSbW)tr(WtSwW)

上述问题的解与之前有相同形式(笔者目前还不能给出推导过程): SbW=λSwW 问题同样转化为求Sw1Sb的前d个最大广义非零特征值对应的特征向量,d(K1)

在推理时,设y=Wx是测试样本在投影空间的表示,计算y到哪个投影后的类别中心Wmi最近,决定了x属于哪个类别;

为什么K分类投影到K1的超平面?还是别的维度也可以?

不存在什么限制要求必须投影到$K-1维超平面

扩展到降维

上面在多分类的扩展中,我们看到了LDA可以作为监督降维技术,并且这种投影过程使用了类别信息;

逻辑斯蒂回归/对数几率回归

一句话描述逻辑斯蒂回归,就是在线性回归层之后使用了sigmoid函数,并设置阈值完成二分类预测,相比于直接用线性模型+阈值做分类,能够一定程度减少离群点的影响;

如何优化逻辑斯蒂回归模型的参数?我想起来在吴恩达老师的机器学习入门课中,给了一个新手友好的解释:

线性回归模型 + MSE损失,和逻辑回归模型 + BCE损失,求导后损失函数对θ的梯度形式均为Error * Feature

逻辑回归模型为什么引入CE?又为什么不用MSE?吴恩达老师只是简单提到了最大似然估计和非凸函数,没有给当时还是新手的我讲太多;下面笔者记录一下,是怎样得到BCE损失函数的?

从统计意义解释

决策边界:使得模型输出=分类阈值的所有输入的集合,设输入特征是Rd中的向量,则决策边界是d1维的超平面;对于逻辑回归,其决策边界是线性的;

如果阈值为0.5,那么超平面即wx+b=0,将偏置项"吸入",也就是wx=0

使用sigmoid激活之后,模型的输出可以视为一种后验概率: P(Y=1|X)=ewx1+ewx=pP(Y=0|X)=11+ewx=1p 定义事件的几率为发生与不发生的比率,对数几率即几率取对数,那么逻辑斯蒂回归模型的对数几率,即为线性函数的输出: logP(Y=1|X)P(Y=0|X)=wx 也就是说,虽然披着“分类”的外皮,但是我们还是在做一个回归任务,只不过,回归的目标是“对数几率”;

设输入数据为{xi,yi}i=1myi为0或1,则对数似然函数为 l(w)=i=1mlogp(yi|xi;w) 按照似然函数的定义,其中: p(yi|xi;w)=piyi(1pi)1yil(w)=i=1m[yilogpi+(1yi)log(1pi)]=i=1m[yilogpi1pi+log(1pi)]=i=1m[yi(wxi)log(1+ewx)] 上式的第一行也就是常见的BCE损失的表现形式,求lw即我们熟悉的Error * Feature形式;

扩展到多分类

同样的,写出对数似然函数,仍然能够得到CE损失的形式:

这里有一份softmax+CE loss的求导过程;