本文总结了牛顿法, 拟牛顿法,梯度下降和随机梯度下降的概念和计算公式.
牛顿法
首先考虑一维问题.
对于一个一维的函数,如果这个函数连续可微, 并且导数可以计算,
那么计算这个函数的最优解可以看成求解方程f′(x)=0的根.
设F(x)=f′(x), 这个求解过程就变成了求解方程F(x)=0的过程.
使用上述迭代的方法就可以进行计算.
迭代的方程为:
xk+1=xk−f′(xk)f′′(xk)
对于多维情况, f(x1,x2,x3,…,xn), 需要求这个函数的最优解,
就是求∇f(x⃗ )=0⃗ 的解.
其中∇f(x⃗ )=(∂f(x⃗ )∂x0,∂f(x⃗ )∂x1,…,∂f(x⃗ )∂xn)
按照求解一维函数的方法, 设Fi(x⃗ )=∂f(x⃗ )∂xi.
则∇f(x⃗ )=F⃗ (x⃗ ).
那么对于多维函数来说, 牛顿法的公式为:
{x⃗ =初始值x⃗ k=x⃗ k−(DF⃗ (x⃗ k))−1F⃗ (x⃗ k),k=0,1,2,…
由于求解矩阵的逆的计算复杂度较高, 因此,需要使用替换的方法.
设s⃗ =(DF⃗ (x⃗ k))−1F⃗ (x⃗ k),
即DF⃗ (x⃗ k)s⃗ =F⃗ (x⃗ k).
牛顿法的公式变为:
⎧⎩⎨⎪⎪x⃗ =初始值x⃗ k=x⃗ k+s⃗ DF⃗ (x⃗ k)s⃗ =F⃗ (x⃗ k),k=0,1,2,…
拟牛顿法
牛顿法虽然收敛速度很快, 但是计算海森矩阵时计算量特别大.
由此演化出了拟牛顿法.
拟牛顿法是模拟牛顿法的意思, 并不是一种算法, 而是几种算法的总称, 这些算法包括DFP算法, BFGS算法, L-BFGS算法.
牛顿法中, 设gk=∇f(xk)为梯度向量, Hk=∇2f(xk)为海森矩阵.
拟牛顿法是对Hk或者H−1k取近似值, 从而减少计算量.
记B≈H, D≈H−1, yk=gk+1−gk, sk=xk+1−xk
根据拟牛顿法条件, 可得到近似公式:
或
下面是几种拟牛顿法:
DFP算法
DFP算法采用的是D,但并不直接计算
D0通常取单位矩阵I,关键导出每一步的
通过一系列艰苦而又卓绝的推导计算假设取便,最终的导出结果为:
BFGS算法
BFGS算法与DFP算法类似,只是采用的B来近似
L-BFGS算法
L-BFGS算法对BFGS算法进行改进,不再存储矩阵Dk,因为Dk有时候比较大,计算机的肚子盛不下。
但是我们用到Dk的时候怎么办呢?答案是根据公式求出来。
从上面的算法推导可知,Dk只跟D0和序列{sk} 和{yk} 有关。
即我们知道了后者,即可以求得前者。
进一步近似,我们只需要序列sk和yk的最近m个值即可。
这样说来,我们的计算机内存中只需要存储这两个序列即可.
最终的递推关系为:
其中
梯度下降法
首先是梯度的介绍, 对于单变量的的函数中, 梯度是导数, 对于线性函数而言, 梯度就是线的斜率.
假设h(x)是要拟合的函数, J(θ)是损失函数, θ是参数:
g(θ)=∑nj=0θjxj
J(θ)=12m∑mi=1(yi−hθ(xi))2
- 将J(θ)对θ求偏导, 得到每个θ对应的梯度:
∇h(θj)=∂J(θ)∂θj=−1m∑mi=1(yi−hθ(xi))xij
- 对于每个θj都按照它的梯度负方向更新它的值, 其中α为学习速度:
θ′j=θj−α∇h(θj)
这种算法有许多缺点:
- 靠近极小值时速度减慢
- 直线搜索可能会产生一些问题
- 可能会’之’字型地下降
当数据量比较大时, 这种方法收敛速度比较慢.
随机梯度下降法
同样假设h(x)是要拟合的函数, J(θ)是损失函数, θ是参数:
g(θ)=∑nj=0θjxj
J(θ)=12m∑mi=1(yi−hθ(xi))2
- 与批量梯度下降(上面提到的普通梯度下降)不同, 随机梯度下降选择其中一个θk.
将J(θ)对θk求偏导, 得到的梯度为:
∇h(θk)=∂J(θ)∂θk=−1m∑mi=1(yi−hθ(xi))xik
- 对于每个θj, 使用θk的梯度负方向更新每个θ:
θ′j=θj−α∇h(θk)
相对于批量梯度下降, 随机梯度下降在每次更新操作时, 并没有选择全局最优解, 这也导致随机梯度下降可能陷入局部最优解.

本文深入讲解牛顿法、拟牛顿法、梯度下降及随机梯度下降等优化算法的基本概念与计算公式,并对比各算法优缺点。
4397

被折叠的 条评论
为什么被折叠?



