本文总结了牛顿法, 拟牛顿法,梯度下降和随机梯度下降的概念和计算公式.
牛顿法
首先考虑一维问题.
对于一个一维的函数,如果这个函数连续可微, 并且导数可以计算,
那么计算这个函数的最优解可以看成求解方程
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)
相对于批量梯度下降, 随机梯度下降在每次更新操作时, 并没有选择全局最优解, 这也导致随机梯度下降可能陷入局部最优解.