牛顿法(Newton Method)
牛顿法其实是一个寻找函数的根的方法,而后运用到优化问题中。主要是运用泰勒级数的知识来寻找一个可导函数 f(x)=0 的根。
将函数 f(x) 在 x0 处展开成带皮亚诺余项的泰勒展开式:
f(x)=f(x0)+f′(x0)(x−x0)+o(x)
取前两项,作为 f(x) 的近似,那么就可以用
f(x0)+f′(x0)(x−x0)=0
的解来近似 f(x) 的解,求得的解为
x1=x0−f′(x0)f(x0)
如下图:

由于函数只有一阶展开,求解处的值离真实的根还有一定的差距,但是已经很接近结果了,我们只需要再将 f(x) 在 x1 处泰勒展开,重复以上的步骤,那么就会得到比 x1 更加接近的解 x2。

只要我们重复上述的步骤,循环迭代 n 次,就会得到近似解 xn
xn=xn−1−f′(xn−1)f(xn−1)
利用牛顿法求解最优化问题
对于一求个无约束的最优化问题 minxf(x),x∈Rn 的最优解,可以将其转换为求解其梯度等于 0 时的根,即 ∇f(x)=0。你看,这就可以利用牛顿法求解最优化问题啦。
采用牛顿法求解的迭代式为:
xk+1=xk−H−1(xk)⋅∇f(xk)
这个 H(x) 是海塞矩阵,用来描述一个多元函数二阶导数。
海塞矩阵(Hessian Matrix)
对于一个多元函数 f(x1,x2,…,xn),如果函数的二阶导数都存在,则定义 f 的海塞矩阵为
H(f)=⎝⎛∂x12∂2f∂x2∂x1∂2f⋮∂xn∂x1∂2f∂x1∂x2∂2f∂x22∂2f⋮∂xn∂x2∂2f⋯⋯⋱⋯∂x1∂xn∂2f∂x1∂xn∂2f⋮∂xn2∂2f⎠⎞
如果多元函数 f(x1,x2,…,xn) 二阶连续可导,并且在某一点 α(x1′,x2′,…,xn′) 处梯度为 0,即∇f(α)=0,那么点 α 为函数驻点,但不能判断该点是否为极小值。通过之前学习的知识,此时需要对函数求二阶导。
记 f 在点 α 处的海塞矩阵为 H(α),因为
∂xi∂xj∂2f=∂xj∂xi∂2f
那么海塞矩阵是一个对称矩阵,对于 H(α),有以下结论
- 如果 H(α) 是正定矩阵,则驻点 α 为极小值点
- 如果 H(α) 是负定矩阵,则驻点 α 为极大值点
- 如果 H(α) 是不定矩阵,则驻点 α 不是极值点
因为牛顿法在进行迭代时运用了二阶导数,也就是说用二次曲线连模拟点 xk,一步便可以找到二次曲线的极值点,所以下降的速度比起梯度下降法更快,能更容易地找到答案;但由于 H−1(xk) 难于求解,难于操作,于是一种牛顿法的优化方法便出现了,就是下面提到的拟牛顿法。
LM 修正牛顿法
Levenberg-Marquardt 修正牛顿法主要着手于处理 H−1(xk) 为不可逆的情况,令
G(xk)=H(xk)+μI
使 μ 充分大,则 G(xk) 的特征值 λi+μ 均大于 0。
当 μ→∞ 时, H−1(xk)⋅∇f(xk) 趋近于 μ1∇f(xk),那么该法就趋近于梯度下降法。
高斯-牛顿法(Gauss-Newton Method)
高斯-牛顿法是用来解非线性的最小二乘问题。设有 m 个样本点 {(x(1),y(1)),(x(2),y(2)),⋯,(x(m),y(m))},x(i)∈Rn,用于训练一个可以用来预测的函数 fθ(x)。
有别于其他模型,这里我们特别地记 fi(x)=f(x(i);θ) 。有损失函数:
L(θ)=i=1∑m(fi(θ)−y(i))2
上式对 θj 进行求导,有
∂θj∂L=i=1∑m[2(fi(θ)−y(i))∂θj∂fi]
写成向量和矩阵形式:
∇L(θ)=⎝⎛∂θ1∂L∂θ2∂L⋮∂θn∂L⎠⎞=2⎝⎛∂θ1∂f1∂θ2∂f1⋮∂θn∂f1∂θ1∂f2∂θ2∂f2⋮∂θn∂f2⋯⋯⋱⋯∂θ1∂fm∂θ2∂fm⋮∂θn∂fm⎠⎞⎝⎛(f1(θ)−y(1))(f2(θ)−y(2))⋮(fm(θ)−y(m))⎠⎞=2JTr
其中 J 为 f(x;θ) 关于 θ 的雅可比矩阵,r 为样本与模型的残差。
接下来我们根据已经求得的梯度,更进一步求海森矩阵的元素 hjk
hjk=∂θjθk∂2L=∂θj∂(i=1∑m[2(fi(θ)−y(i))∂θk∂fi])=2i=1∑m(∂θj∂fi∂θk∂fi+(fi(θ)−y(i))∂θjθk∂2fi)
同样的,写成矩阵形式
H(θ)=2(JTJ+S)
其中
sij=i=1∑m(fi(θ)−y(i))∂θjθk∂2fi
在迭代过程中,由于残差项很小,往往(?)在迭代过程中可以忽略,则我们找到了一个新的矩阵 JTJ 来代替海塞矩阵 H,回归到求解 x 的问题,得到迭代式
xk+1=xk−(JTJ)−1JTr
拟牛顿法(Quasi-Newton Methods)
由于海塞矩阵矩阵不一定可逆,而且求矩阵逆的复杂度较高,所以引入了拟牛顿法。拟牛顿法其实就是准找可以替代矩阵 H−1(xk) 的方法。
我们对 ∇f(x) 在 xk 点处做一阶泰勒展开:
∇f(x)=∇f(xk)+H(xk)⋅(x−xk)
或者说对 f(x) 在 xk 点处做二阶泰勒展开:
f(x)=f(xk)+(x−xk)T∇f(xk)+21(x−xk)TH(xk)(x−xk)
并对其求导。
取 x=xk+1 有:
∇f(xk+1)−∇f(xk)=H(xk)⋅(xk+1−xk)
记 yk=∇f(xk+1)−∇f(xk),δk=xk+1−xk,有:
yk=H(xk)⋅δk
上式被称为拟牛顿条件。根据对矩阵 H−1(xk) 或者 H(xk) 估计方法的不同,拟牛顿法可以分为以下的几种:
DFP 变尺度法
DFP 方法采用矩阵 G(xk) 来对 H−1(xk) 进行近似,最早是由 Davidon 提出,后经 Fletcher 和 Powell 解释和改进,在命名时以三个人名字的首字母命名。
在 DFP 方法中,假设迭代式:
G(xk+1)=G(xk)+ΔG(xk)
其中 G(xk) 是正定的,令
ΔGk=αukukT+βvkvkT,uk,vk∈Rn
代入上上式可得
G(xk+1)=G(xk)+αukukT+βvkvkT
已知有 H−1(xk)⋅yk=δk,则
δk==G(xk)yk+αukukTyk+βvkvkTykG(xk)yk+α(ukTyk)uk+β(vkTyk)vk
可知 ukTyk,vkTyk 为数,我们设 uk=rδk, vk=θG(xk)yk,有
δk=G(xk)yk+α(rδkTyk)rδk+β(θykTG(xk)yk)θG(xk)yk
整理得:
(αr2(δkTyk)−1)δk+(βθ2(ykTG(xk)yk)+1)G(xk)yk=0
令
{αr2(δkTyk)=1βθ2(ykTG(xk)yk)=−1
最终代入可得
G(xk+1)=G(xk)+δkTykδkδkT−ykTG(xk)ykG(xk)ykykTG(xk)
BFGS 方法
BFGS 算法采用矩阵 B(xk) 来对 H(xk) 进行近似,采取上节 DFP 方法的推导方法,可得
B(xk+1)=B(xk)+ykTδkykykT−δkTB(xk)δkB(xk)δkδkTB(xk)
可记 G(xk)=B(xk)−1,那么有
G(xk+1)=(B(xk)+ykTδkykykT−δkTB(xk)δkB(xk)δkδkTB(xk))−1
本式可以运用 Sherman-Morrison-Woodbury 公式求解
Sherman-Morrison-Woodbury 公式是一种矩阵求逆的方法,公式如下:
(A+UCV)−1=A−1−C−1+VA−1UA−1UVA−1
还有一个向量版的,叫 Sherman-Morrison 公式:
(A+uvT)−1=A−1−1+vTA−1uA−1uvTA−1
经过上面两个计算的不停的折腾(完整推倒过程可以 点这里 ),求解得:
G(xk+1)=(I−ykTδkδkykT)G(xk)(I−ykTδkykδkT)+ykTδkδkδkT
令 ρ=ykTδk1,可以得出最终的 BFGS 方法的迭代方程:
G(xk+1)=(I−ρδkykT)G(xk)(I−ρykδkT)+ρδkδkT
L-BFGS 算法
这个算法的英文全称为Limited-memory BFGS(或 Limited-storage BFGS),意思就是上面的 BFGS 方法同样需要消耗计算机的很多计算能力,于是需要一个简洁版的算法。这个 L-BFGS 算法就是这个意思。
想看的看下面这个博客
liuxiaofei.com.cn/blog/lbfgs%…