想赖着你每一天,
耽误多一秒都不愿意。
想把你捧在手心,
给你我最奢侈的温柔。
感恩节快乐,
感谢有你。
——畅宝宝的傻逼哥哥
令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,…将都是下降方向,这就确保算法能够收敛。