Week2 线性回归和梯度下降法
week1由于比较基础,暂时先略过,如果有时间会补上。
另外,这份笔记里不只是有吴恩达课堂的内容,还增加了一些曾经在其他课堂学习记录下的笔记,所以算是一种笔记整合。不过整体流程是按吴恩达课程大纲走的。目前算是借助吴恩达的课程进行一次复习。
如有发现何处公式推导或者文字说明有误,请留言指正,谢谢。
参数说明
假设数据集中有m个样本,针对研究的问题每个样本具有n个特征。那么:
x(i)=(x1(i),x2(i),...,xn(i))′表示第i个样本的特征向量,其中xk(i)表示第i个样本的第k个特征;
y(i)表示第i个样本的标签或对应特征x(i)的实际结果;
(x(i),y(i))表示第i个样本。
如果具有m个样本,那么可以合并写成
Xm×n=⎣⎢⎡x0(1)⋯x0(m)x1(1)⋯x1(m)⋯⋯⋯xn(1)⋯xn(m)⎦⎥⎤,其中x0(i)=1。
Y=⎣⎢⎢⎡y(1)y(2)⋯y(m)⎦⎥⎥⎤
1.多特征的线性回归方程
假设当前机器学习系统可以对特征为(x1,x2,...,xn)′的数据进行预测,预测结果为y^。则多特征的线性回归的数学表达式即为:
y^=θ0+θ1x1+⋯+θnxn=θTx(i)
其中θ=(θ0,θ1,…,θn)′是参数向量;
x(i)是某个样本的特征向量;
由于考虑到参数θ0,所以通常会增加一个全1特征x0=1,简化多特征的线性回归方程。即此时的特征转化为
x(i)=(x0(i),x1(i),x2(i),…,xn(i)),其中x0(i)=1。
2.梯度下降法(Gradient Descent)
2.1如何选择参数向量θ呢?
首先需要有一个评价当前机器学习系统预测效果的标准,此处称为损失函数J(θ),其作用是衡量系统预测值和真实值的差距大小。最直观的做法是将所有样本数据的预测值和真实值的差值平方后求均值:
J(θ)=2m1i=1∑m(y^−y(i))2=2m1i=1∑m(θTx(i)−y(i))2
(注:公式中的1/2 是为了后续求导方便,详情见后续推导部分)
损失函数J(θ)数值越大,说明预测效果越差。所以很明显我们需要寻找使J(θ)达到最小值的参数向量θ。即:
θ=argθminJ(θ)
沿着J(θ)梯度下降的方向不断迭代,即可达到局部最小值:
梯度下降法迭代公式:θ:=θ−α∂θ∂J(θ)
其中α是学习率(learning rate),也叫步长,可以控制收敛速度,但是过大的话容易发散。
在程序中该如何计算导数∂θ∂J(θ)呢?
∂θj∂J(θ)=∂θj∂[2m1i=1∑m(θTx(i)−y(i))2]=2m1i=1∑m2(θTx(i)−y(i))⋅∂θj∂(θTx(i)−y(i))
∴∂θj∂J(θ)=m1i=1∑m(θTx(i)−y(i))⋅∂θj∂(i=1∑mθixi−y(i))=m1i=1∑m(θTx(i)−y(i))xj(i)
转化为矩阵表达式为:
∂θj∂J(θ)=m1(Xθ−Y)TX(:,j)
其中,
Xm×n=⎣⎢⎡x0(1)⋯x0(m)x1(1)⋯x1(m)⋯⋯⋯xn(1)⋯xn(m)⎦⎥⎤
θ=(θ0,θ1,…,θn)′
X(:,j)=(xj(1),xj(2),...,xj(m))′
Y=⎣⎢⎢⎡y(1)y(2)⋯y(m)⎦⎥⎥⎤
∴∂θ∂J(θ)=[∂θ0∂J(θ),∂θ1∂J(θ),...,∂θn∂J(θ)]T
通常设置初值θ=(0,0,…,0)’,代入迭代公式后即可不断更新参数向量θ直到θ收敛致某一值,此时的参数向量θ可以使J(θ)达到局部最小值。
通常来说,梯度下降法求到的不是全局最优解,而是局部最优。然而此处的线性回归问题只有一个最优解,并无局部最优解(因为J(θ)是一个凸函数)。所以梯度下降法(步长适当时)一定会收敛,且一定能得到全局最优解。
2.2优化梯度下降法的方法
1).特征缩放(特征标准化)
为什么需要特征缩放?
因为当样本具有多个特征时,如x(i)=(x1(i),x2(i),...,xn(i))′,在所有样本中,由于每个特征的量纲不同,特征取值的范围也不同,可能x1(i)∈[0,1],而x2(i)∈[10000,100000]。这样,在进行梯度下降的时候,由于数值较大的特征(如x2(i))会导致在数值较小的特征的梯度方向上移动缓慢,从而大大增加梯度迭代次数,降低算法效率(如右图)。因此,对所有数据进行适当的特征缩放后,将所有特征的取值范围映射到同一数量级的范围内,可以解决上述问题。
如何进行特征缩放?
常用的特征缩放方法有:
i. (0,1)缩放
xk(i):=j∈[1,m]maxxk(j)−j∈[1,m]minxk(j)xk(i)−j∈[1,m]minxk(j)
其中,等号左边的xk(i)是第i个样本第k个特征缩放后的新值;
j∈[1,m]minxk(j)是所有样本第k个特征的最小值;
j∈[1,m]maxxk(j)是所有样本第k个特征的最大值。
ii. 标准缩放
xk(i):=std(xk)xk(i)−xˉk
xˉk=meanj∈[1,m](xk(j))=m1∑j=1mxk(j) ,是所有样本第k个特征的均值;
std(xk)是所有样本第k个特征的标准差。
2).学习率α的选择
如果学习率过小,则达到收敛所需的迭代次数很大,收敛速度很慢;
如果学习率过大,则每次迭代后的损失函数数值(loss值)可能不降反增,会跳过局部最小值,甚至不收敛;
通常可以按顺序尝试α=0.01,0.03,0.1,0.3,1,3,10等数值。
最好是记录每次迭代的loss值,然后画出J(θ)与迭代次数的函数图,根据图像来选择合适的学习率。如下图。
2.3批量梯度下降算法和随机梯度下降算法
批量梯度下降算法(BGD, batch gradient descent):
θj=θj−αm1i=1∑m(θTx(i)−y(i))xj(i),反复迭代,直到收敛
随机梯度下降算法(SGD, stochastic gradient descent):
θj=θj−αm1(θTx(i)−y(i))xj(i),一个样本迭代一次或多个样本迭代一次
由于批量梯度下降每前进一个步长时,都需要遍历整个训练集,所以当训练集样本个数m很大时,会耗费很长时间,效率不高。而随机梯度下降法是每遍历一个样本(或设定好一定数量的样本)就前进一个步长,所以随机梯度算法一般会比批量梯度算法更快的找到”最优解”(随机梯度算法找到的最优解一般不是最优的,而是在最优解附近摆动的,但是其得到的最终解通常都是在精度要求以内的)。所以通常情况下,在训练集样本数较大时,都倾向于使用随机梯度下降算法。
随机梯度下降(SGD)是可行的,并且效率很高,实际中是最常用的。同时,这种拿一个样本就下降,可以保证在线学习,及时更新。当然,也可以折中,取一定样本后再下降。(在大部分教材中提到的随机梯度下降,其实是折中的随机梯度下降。也就是每次取若干个样本的平均梯度作为更新方向)。
3.线性回归的“非线性拟合”
线性回归不只是可以拟合“线性方程”,提前计算好已有特征的非线性数值,再作为新特征值代入线性回归中,就可以拟合“非线性方程”。
例如想要拟合的方程为:y=θ0+θ1sinx+θ2lnx,但是样本中只给出了x的数值。那么只需要计算出所有样本的sinx和lnx的数值,然后令x1=sinx,x2=lnx。代入后即可得:
y=θ0+θ1x1+θ2x2
因为这里的线性回归的线性,其实不是指对特征x(i)的线性,由于我们在目标方程中真正要求解的是参数向量θ=(θ0,θ1,…,θn)′,因此只需要对参数θ=(θ0,θ1,…,θn)′保持线性即可。而对特征x(i)是否线性并不影响,只需要在进行线性回归前进行适当的数据转化即可。
4.目标函数J(θ)的最小值的线性代数求法(了解)
4.1目标函数J(θ)的最小值求解过程:
我们如此思考,将M个N维样本组成矩阵XM×N:
1.X的每一行对应一个样本,共M个样本;
2.X的每一列对应样本的一个维度,共N维(也就是模型的影响因素个数,或是同一因素不同阶数的影响);
3.还有一维常数项,全为1(所以实际上是N+1维)。
所以,目标函数转换为:
J(θ)=21i=1∑m(θTx(i)−y(i))2=21(Xθ−Y)T(Xθ−Y)(平方和求和等于矩阵与其转置相乘)
所以,目标函数求导,也就是目标函数的梯度为:
∂θ∂J(θ)=∂θ∂[21(Xθ−Y)T(Xθ−Y)]=∂/∂θ[21(θTXT−YT)(Xθ−Y]
∂θ∂J(θ)=∂θ∂[21(θTXTXθ−θTXTY+YTXθ−YTY)]=XTXθ−21XTY−21XTY−0
其中,上式中使用了几个线性代数结论:
1.当矩阵A为对称阵时,∂θ∂(θTAθ)=2Aθ,故∂θ∂(θTXTXθ)=2XTXθ
2.∂θ∂Aθ=AT,∴∂θ(∂θTA)=A。故∂θ(∂θTXTY)=XTY
综上所述,
令 ∂θ∂J(θ)=XTXθ−XTY=0
可以得到目标函数J(θ)的驻点:
超级重要结论:θ=(XTX)−1XTY
简单记忆方法(不正规):Xθ=Y⇒XTXθ=XTY⇒θ=(XTX)−1XTY
代入样本数据点X,Y之后,就可以求解得到θ的值
但是,如果XTX不可逆怎么办?
为了解决该问题,我们在上式中增加扰动,得到:
θ=(XTX+λI)−1XTY
其中λ>0。且λ的选择需要根据实际情况进行修改,也就是λ是可调节的参数(超参数)。
(X^T X)矩阵不可逆的常见原因,及简单的解决办法
1).具有多余的特征,即两个特征之间关系非常紧密(例如两个特征线性相关)
2).特征数量太多(比如特征数量大于样本数据集数量)
解决办法:找出关系密切的特征,删去多余特征。
为什么增加了扰动可以避免不可逆?
∵对于任意非零向量u,有
uTXTXu=(Xu)TXu,令v=Xu,∴vTv≥0恒成立,∴XTX是半正定矩阵
∴对于任意λ>0,XTX+λI一定是正定矩阵,因此一定可逆。(即加入扰动后,避免了XTX是全零矩阵的情况。)
为什么增加了扰动还能防止过拟合?
在线性回归的目标函数中加入复杂度惩罚因子(目标函数增加平方和的损失),可以一定程度的抑制噪声数据的干扰。这种做法的本质是假定参数θ服从高斯分布。加入扰动后的目标函数如下:
Ridge回归:J(θ)=2m1i=1∑m(θTx(i)−y(i))2+λj=1∑nθj2
Lasso回归:J(θ)=2m1i=1∑m(θTx(i)−y(i))2+λj=1∑n∣θj∣
其中λ∑j=1nθj2这一项,叫做正则项,这种做法叫做Ridge回归,也叫l2正则(L2-norm)。同理,如果改为λ∑j=1n∣θj∣,则叫做Lasso回归,也叫l1正则(L1-norm)。
利用上述新的目标函数,再进行求导求驻点的操作,最终得到的结果就是上述加了扰动λ后的结果。这就解释了为什么加了扰动后的结果可以防止过拟合。
-----------------------------注释-----------------------------
1).Ridge回归可以很简单对λ∑j=1nθj2项求导,但是Lasso回归要如何对λ∑j=1n∣θj∣项求导?
构造函数
f(x,α)=x+α1log(1+e−αx),x≥0
所以有如下近似:
∣x∣≈f(x,α)+f(−x,α)=α1log(1+e−αx+1+eαx)
所以∣x∣的梯度为:
∇∣x∣≈(1+e−αx1−(1+eαx)1;∇2∣x∣≈(2αeαx)/(1+eαx)2
实践中,通常取α=106
2).广义逆矩阵(伪逆矩阵)
由Xθ=Y⇒θ=(XTX)−1XTY可知,定义:
A+=(ATA)−1AT
当A为可逆方阵时,可以推导得到A+=A−1
当A为矩阵(非方阵)时,称A+为广义逆矩阵(伪逆矩阵)
-----------------------------注释-----------------------------
4.2梯度下降法和线代直接求解法求解最优解的对比
在线性回归中,当n比较低维的时候,可以直接用解析的方法计算。但是当n比较高维的时候,这样做就会耗费大量的计算能力。这时候最好就要用梯度下降法(Gradient Descent)。不一定能找到全局最优,但一定能找到局部最优,通常情况下,局部最优解已经可以满足任务要求了。
差不多当n>10000时,直接求解法的效率就明显低于梯度下降法了。
另外,梯度下降法求解的是局部最优解,而直接求解法求的是全局最优解