版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Hemk340200600/article/details/87969213
1.牛顿法
统计学习方法有了具体形式后就转换为最优化问题。有时最优化问题存在解析解,可以由公式计算,多数情况下没有解析解,需要用数值计算的方法求解,牛顿法和拟牛顿法是求解无约束最优化问题的常用方法,收敛速度快。
牛顿法是迭代算法,每一步需要求解目标函数的海塞矩阵的逆矩阵。
1.1 算法推导
无约束最优化问题如下:
x∈Rnminf(x)..........(1)
一元函数在
xk处的泰勒展开式为
f(x)=f(xk)+(x−xk)f′(xk)+2!1(x−xk)2f′′(xk)+o(n)
二元函数在
(xk,yk)处的泰勒展开式为
f(x,y)=f(xk,yk)+(x−xk)fx′(xk,yk)+(y−yk)fy′(xk,yk)+2!1(x−xk)2fxx′′(xk,yk)+2!1(x−xk)(y−yk)fxy′′(xk,yk)+2!1(x−xk)(y−yk)fyx′′(xk,yk)+2!1(y−yk)2fyy′′(xk,yk)+o(n)
多元函数在
x
k处的泰勒展开式为
f(x(1),x(2),...,x(n))=f(xk(1),xk(2),...xk(n))+i=1∑n(x(i)−xk(i))fx(i)′(xk(1),xk(2),...xk(n))+2!1i,j=1∑n(xi−xk(ii))(x(j)−xk(j))fij′′(xk(1),xk(2),...xk(n))+o(n)
假设f(x)有二阶连续偏导数,若第k次迭代值为
xk,则可以将f(x)在
xk附近二阶泰勒展开,并将泰勒展开写成矩阵的形式,有
f(x)=f(xk)+[∇f(xk)]T(x−xk)+2!1(x−xk)TH(xk)(x−xk)+o(n)..........(2)
其中x为列向量,
[∇f(xk)]为f(x)的梯度向量在
xk的值,
H(xk)是f(x)的海塞矩阵在点
xk的值,其形式如下
H(x)=[∂xi∂xj∂2f]n×n..........(3)
我们知道一元函数取得极值点的条件是导数等于0,二元函数取得极值点的条件是一阶导数等于0,并且二阶导数要大于0,对应到上面的泰勒展开,只要
(x−xk)TH(xk)(x−xk)>0即可,而这个满足线性代数中二次型的特征,当H矩阵为正定矩阵时,该不等式成立。即
- 当海塞矩阵H为正定矩阵时,临界点
xk为局部极小值。
- 当海塞矩阵H为负定矩阵时,临界点
xk为局部极大值。
- 当海塞矩阵H为不定矩阵时,临界点
xk不是极值。
牛顿法利用这一点,每次迭代从点
xk开始,求目标函数的极小值点,作为第k+1次迭代值
xk+1,则
xk+1满足
∇f(xk+1)=0..........(4)
式子2求导得,
∇f(x)=∇f(xk)+H(xk)(x−xk)..........(5)
求导公式可以参考【机器学习总结】向量、矩阵求导公式
则式子4等价于
∇f(xk)+H(xk)(xk+1−xk)=0.........(6)
则
xk+1=xk−H(xk)−1∇f(xk).........(7)
牛顿法以式子7进行迭代求得极小值,其流程总结如下:
- 取初始点
x0,令k=0
- 计算
∇f(xk),若
∣∣∇f(xk)∣∣<ϵ,则停止计算,得到近似解
x∗=xk
- 计算
H(xk)并根据
xk+1=xk−H(xk)−1∇f(xk)求得
xk+1
- 令k=k+1,转2
2. 拟牛顿法
牛顿法中每轮迭代都需要计算海塞矩阵的逆矩阵,计算比较复杂,考虑用一个n阶矩阵
Gk=G(xk)来近似代替
Hk−1=H−1(xk)。
式子5中,将
x=xk+1代入,有
∇f(xk+1)−∇f(xk)=Hk(xk+1−xk).........(8)
令
yk=∇f(xk+1)−∇f(xk),
δk=xk+1−xk,则
yk=Hkδk..........(9)
式子(9)称为拟牛顿条件。
如果
Hk是正定矩阵,则可以保证牛顿法搜索方向
pk=−Hk−1∇f(xk)是下降方向。由式子7有
x=xk+λpk=xk−λHk−1∇f(xk)..........(10)
则f(x)在
xk的泰勒展开式可以近似为
f(x)=f(xk)−λ[∇f(xk)]THk−1∇f(xk)..........(11)
由于H的逆矩阵为正定矩阵,故有
[∇f(xk)]THk−1∇f(xk)>0,当
λ是充分小的正数时,总有
f(x)<f(xk) ,则
pk=[∇f(xk)]THk−1∇f(xk)是下降方向。
拟牛顿法寻找
Gk来近似
H−1,
Gk满足以下拟牛顿条件
Gk+1yk=δk..........(12)
2.1 DFP算法
DFP算法假设每步迭代中,有
Gk+1=Gk+Pk+Qk..........(13)
则
Gk+1yk=Gkyk+Pkyk+Qkyk..........(14)
为了满足拟牛顿条件(12),可以让
Pkyk=δkQkyk=−Gkyk
事实上可以取
Pk=δTykδkδkT.........(15)Qk=−ykTGkykGkykykTGk..........(16)
得到
Gk+1的迭代公式
Gk+1=Gk+δTykδkδkT−−ykTGkykGkykykTGk..........(17)
可以证明如果
G0是正定的,则迭代过程中每个矩阵都是正定的。
DFP算法总结如下:
- 选定初始点
x0,取
G0为正定对称矩阵,置k=0
- 计算
∇f(xk),若
∣∣∇f(xk)∣∣<ϵ,则停止计算,得到近似解
x∗=xk
- 置
pk=−Gk∇f(xk)
- 一维搜索,求
λk使得
f(xk+λpk)最小
- 置
xk+1=xk+λkpk
- 计算
∇f(xk+1),若
∣∣∇f(xk+1)∣∣<ϵ,则停止计算,得到近似解
x∗=xk+1,否则按式子
Gk+1=Gk+δTykδkδkT−−ykTGkykGkykykTGk计算得到
Gk+1
- 置k=k+1,转3
2.2 BFGS(Broyden-Fletcher-Goldfarb-Shanno)算法
除了可以用
Gk逼近
H−1之外,我们可以用
Bk来逼近
H,此时拟牛顿条件为
Bk+1δk=yk..........(18)
跟DFP算法类似,
Bk+1的迭代公式为
Bk+1=Bk+yTδkykykT−−δkTBkδkBkδkδkTBk.........(19)
BFGS算法总结如下:
- 选定初始点
x0,取
G0为正定对称矩阵,置k=0
- 计算
∇f(xk),若
∣∣∇f(xk)∣∣<ϵ,则停止计算,得到近似解
x∗=xk
- 由
Bkpk=−∇f(xk)求出
pk
- 一维搜索,求
λk使得
f(xk+λpk)最小
- 置
xk+1=xk+λkpk
- 计算
∇f(xk+1),若
∣∣∇f(xk+1)∣∣<ϵ,则停止计算,得到近似解
x∗=xk+1,否则按式子
Bk+1=Bk+yTδkykykT−−δkTBkδkBkδkδkTBk计算得到
Bk+1
- 置k=k+1,转3
2.3 Broyden类算法
迭代公式(19)经过两次应用Sherman-Morrison公式可以得到
Gk+1=(I−δkTykδkykT)Gk(I−δkTykδkykT)T+δkTykδkykT.........(20)
称为BFGS算法关于
Gk的迭代公式,将式子(20)得到的
Gk+1记作
GBFGS,将DFP算法得到的G_{k+1}记作
GDFP,它们都满足拟牛顿条件,则它们的线性组合也同样满足拟牛顿条件,并且也是正定的。
Gk+1=aGDFP+(1−a)GBFGS..........(21)
其中
0≤a≤1,这样就得到了一类拟牛顿算法称为Broyden类算法。