BFGS
step 1.
根据泰勒公式,省略掉高阶项:
f(x)≈f(xk+1)+∇f(xk+1)⋅(x−xk+1)+12⋅(x−xk+1)T⋅∇2f(xk+1)⋅(x−xk+1) f ( x ) ≈ f ( x k + 1 ) + ∇ f ( x k + 1 ) ⋅ ( x − x k + 1 ) + 1 2 ⋅ ( x − x k + 1 ) T ⋅ ∇ 2 f ( x k + 1 ) ⋅ ( x − x k + 1 )
再两边取导数得
∇f(x)=∇f(x+1)+Hk+1(x−xk+1) ∇ f ( x ) = ∇ f ( x + 1 ) + H k + 1 ( x − x k + 1 )
此时,取 x=xk x = x k ,并设 ∇f(xk)=gk,∇2f(xk)=Hk ∇ f ( x k ) = g k , ∇ 2 f ( x k ) = H k
有 gk+1−gk=Hk+1⋅(xk+1−xk) g k + 1 − g k = H k + 1 ⋅ ( x k + 1 − x k ) ,设 gk+1−gk=yk g k + 1 − g k = y k , xk+1−xk=Sk x k + 1 − x k = S k
则有
step 2.
用 Bk B k 表示海森矩阵 Hk H k 的近似,用 Dk D k 表示 H−k1 H k − 1 (海森矩阵的逆)的近似
Bk+1=Bk+ΔBk B k + 1 = B k + Δ B k
设 ∇Bk=αuuT+βvvT ∇ B k = α u u T + β v v T ,其中 u u 和 v v 是n维向量
又由(1)得 yk=Bk+1⋅Sk y k = B k + 1 ⋅ S k
所以
yk=Bk⋅Sk+αuuTSk+βvvTSk y k = B k ⋅ S k + α u u T S k + β v v T S k
yk=Bk⋅Sk+αuTSku+βvTSkv y k = B k ⋅ S k + α u T S k u + β v T S k v (之所以能这么换位置,是因为 uTSk u T S k 是一个数,而不是一个矩阵或向量)
令
可以解得
所以
后面转自:
作者: peghoty
出处: http://blog.youkuaiyun.com/itplus/article/details/21897443
L-BFGS
所谓L-BFGS是对BFGS进行了空间优化:
这是由于向量维数n到达了一定数量级,
n×n
n
×
n
的矩阵需要相当大的内存。
L-BFGS算法并没有直接存储整个矩阵,而是在需要用到时,根据若干个n维向量来计算。
由于计算的结果需要用到之前每一次迭代/循环中的结果, L-BFGS算法只保存了最近的m次迭代的结果,所以L-BFGS算法又做了近似。