梯度下降法的基本思想
目标函数:
x∈Rnminf(x),f具有一阶连续偏导数。
负梯度方向是使函数值下降最快的方向
根据泰勒展开
f(x+Δx)≈f(x)+∇f(x)TΔx当
Δx=−λ∇f(x)时,有
f(x+Δx)<f(x),
λ>0为学习率或步长
一维优化问题:定长梯度下降法
采用固定的步长
λ(学习率)的梯度下降法,但步长
λ不宜太大或太小
迭代过程:
x(k+1)=x(k)−λf′(x(k))多维优化问题:最速下降法
每次迭代选择合适的步长
λk,使得目标函数在当前搜索方向上得到最大程度的减少
即转化为一维优化问题
λkminf(x(k)−λk∇f(x(k)))再用梯度下降法或牛顿法求解。
有意思的是,最速下降法每次更新的轨迹都和上一次垂直,且只要
∇f(x(k))=0,则
f(x(k+1))<f(x(k)).
例:二次型目标函数的最速下降法
二次型
f(x)=xTAx,A为对称矩阵f(x1,x2,…,xn)=a11x12+a22x22+…+annxn2+2a12x1x2+2a13x1x3+…+2a(n−1)nxn−1xn即函数的每一项都是二次项。
任意全是二次项的函数都是二次型,当A不是对称矩阵时,可以做如下变换化为对称矩阵的形式:
xTAx=xTATx=xT(21A+21AT)x 二次型的意义
- 对于二次函数如f(x)=x2增加一次项、常数项不会影响其形状,只是做了位移;
- 对于二次方程如x2+xy+y2=1增加一次项、常数项也不会改变其形状,只是看上去有些伸缩和位移。
二次型目标函数的最速下降法
目标函数为
f(x)=xTAx−bTx,A为对称矩阵其梯度为
∇f(x)=Ax−b,Hessian矩阵为
H(x)=A=AT记
gk=∇f(x(k))最速下降法的第k次迭代为求一维优化问题
λkminh(λk)=λkminf(x(k)−λkgk))h′(λ)=−gkT∇f(x(k)−λgk))=−gkT(Ax(k)−λAgk−b)=λgkTAgk−gkTgk=0⟹λk=gkTAgkgkTgk故的二次目标函数的最速下降法为
x(k+1)=x(k+1)−gkTAgkgkTgkgk
机器学习中的梯度下降法
算法的核心思想即沿着损失函数的负梯度方向调整参数,以达到损失函数的局部最小值。
θ=θ−η∇J(θ)θ为训练参数,
η为学习率。
以平方损失函数为例:
J(θ;T)=2N1i∑(yi−fθ(xi))2T为整个训练数据集,N为训练数据集大小,
yi为真实标签,
fθ(xi)为模型预测值。
但在深度学习中,通常对每一个batch进行损失函数的计算和梯度下降法:
J(θ;batch)=2m1i∑(yi−fθ(xi))2m为一个batch的大小。
假设训练数据集中含有N个数据样本,对m的不同取值会有不同影响:
BGD(批量梯度下降法)
每次选用全量的训练样本来更新模型参数,即
θ=θ−η∇J(θ;x,y)优点:
- 每次更新都会朝着正确方向进行,最后保证收敛于极值点(凸函数收敛于全局极值,非凸函数可能收敛于局部极值);
缺点:
- 每次学习时间过长,如果训练数据集很大需要消耗大量内存,并且不能在线更新。
SGD(随机梯度下降)
每次从训练样本集中随机选择一个样本来进行学习,
θ=θ−η∇J(θ;xi,yi)优点:
- 对于非凸函数,由于其随机性,可能会使得优化从当前的局部最小跳到另一个更好的局部最小,这样对于非凸函数,会使得最终收敛于一个较好的局部最小值,甚至全局最小值;
缺点:
- 每次更新可能并不会朝着整体正确的方向进行,因此可能带来优化扰动;
MBGD(小批量梯度下降法)
综合了BGD和SGD,在每次更新速度和更新次数中取一个平衡,每次更新随机从训练集中取m<N个样本进行学习,
θ=θ−η∇J(θ;xi:i+m,yi:i+m)优点:
- 相比于SGD,降低了收敛波动性,即降低了参数更新的方差,使更新更加稳定;
缺点:
- 由于样本选择依然存在随机性,故上述方法依然不能保证好的收敛性。
主要存在的挑战有:
- 选择学习率困难(过小→收敛慢,过大→妨碍收敛&在最小点附近波动);
- 应在训练期间调整学习率,学习速率逐步减小(但事先制定的规则和阈值可能不适用于所有数据集);
- 使用梯度更新可能会导致所有参数都用相同的学习率更新(当训练数据集是稀疏的,或者特征频率不同,可能不希望参数被相同程度的更新,否则可能使很少出现的特征有较大变化);
- 求高度非凸函数应避免陷入局部最优,但最困难的不是局部最优,而是鞍点。