想赖着你每一天,
耽误多一秒都不愿意。
想把你捧在手心,
给你我最奢侈的温柔。
感恩节快乐,
感谢有你。
——畅宝宝的傻逼哥哥
令 f(x)∈C2 是 En 中的函数并假设 f(x) 在点 xk,xk+1 处的梯度分别为 gk,gk+1 ,如果
那么根据泰勒级数可以得出
gk+1
的元素为
其中
m=1,2,…,n
。接下来如果
f(x)
是二次的,那么
f(x)
的二阶导为常数,
gkm
的二阶导为令,所以
又因为
因此我们有
其中
m=1,2,…,n
,也就是
其中
H
是
f(x)
的海森矩阵。或者我们可以写成
其中
上面的分析表明,如果
f(x)
在点
xk,xk+1
处的梯度已知,那么可以得到上面的关系,这给出了矩阵
H
的部分信息。因为
H
中有
n2
个未知量(或者如果
H
是实对称矩阵,那么存在
n(n+1)/2
个未知量),而等式2只提供了
n
个等式,不能唯一的确定
为了证明这个事实,我们将等式2给出的
n
个等式重新写成
因此
如果 δ0,δ1,…,δn−1 构成一个线性无关向量集,那么解就存在。
利用上面的原则可以构造下面的算法:
上面的算法基本上是牛顿法的实现,唯一的不同是利用数据来得到 H−1 。对于凸二次问题,上面的算法一次迭代就得的问题的解,因此非常有效,然而对于非二次问题,同基于牛顿法的其他一样,它也存在相同的缺点。首先需要矩阵的逆,其次必须检查 Hk 的正定性。
下面介绍一种消除矩阵逆的策略。假设已知正定实对称矩阵
Sk
,
H−1
的近似值,然后计算拟牛顿方向为
然后求
α
,也就是最小化
f(xk+αdk)
的
α
值。对于凸二次问题,
其中
Sk,H
是正定的。显然,当
xk
不是问题的解
x∗
时,
αk
大于零,然后确定
x
的变化量为
根据等式1得到新点
xk+1
。通过计算
xk,xk+1
处的梯度,利用等式4得到梯度的变化量
γk
,接下里对
Sk
进行修正得到
其中
Ck
是
n×n
修正矩阵,从数据计算得出的。从初始点
x0
,初始正定矩阵
S0,S0=In
开始,迭代使用上面的过程,得到序列
δ0,δ1,…,δk,γ0,γ1,…,γk,S1,S2,…,Sk+1
。如果
然后对于
k=n−1
,我们可以写作
或者
根据等式5与11可得
接下来如果
k=n
,等式6到8得到
所以根据等式1可得
上面的过程产生了一族拟牛顿算法,他们有一个基本属性:对于凸二次问题, n+1 次迭代内中止,根据修正矩阵 Cn 的差异从而得出各种各样的算法。
对于任何 Cn , Sk+1 必须满足等式10,并且下面的属性也是我们想要的:
- 向量 δ0,δ1,…,δn−1 构成一个共轭方向集
- 正定矩阵 Sk 产生正定矩阵 Sk+1
第一个属性确保共轭方向的性质能够应用到拟牛顿法上,第二个属性确保每次迭代中
dk
是下降方向。为了证明这个事实,考虑点
xk+δk
并令
其中
对于
α>0
,泰勒级数给出
其中
c
是常数,
其中
o(α∥dk∥)
是余项,比
α∥dk∥
更快接近零。接下来如果
Sk
是正定的,那么对于充分小的
α>0
,我们有
因为
α>0,gTkSkgk>0,o(α∥dk∥)→0
,因此
也就是说如果 Sk 是正定的,那么 dk 是下降方向。
从这点来说,属性2的重要性就很明显了。正定矩阵 S0 将产生正定矩阵 S1 ,然后产生正定矩阵 S2 ,如此不断进行,最后方向 d0,d1,d2,… 将都是下降方向,这就确保算法能够收敛。