L-BFGS
L-BFGS###
先介绍下BFGS算法过程
BFGS ####
缺点:矩阵本身的存储大小Gk
从易存储的初始矩阵出发,可以迭代求出Gk。而且计算到一定步数之后,可以不用从第一步开始迭代,比如可以取从前m步开始迭代,找一个Gk0跟前m步迭代结果“差不多”就可以近似了。 所以递归公式为:
所求方向:
等一等,这个式子中有大量的重复计算:
右侧优化:
递推:qi=Viqi+1
初始:qk=∇f
得到:$$
\begin{align}
q{k-1} &= V{k-1} \nabla f \
q{k-2} &= V{k-2} V_{k-1} \nabla f \
\ldots \
q{k-m} &= V{k-m} \ldots V{k-2} V{k-1} \nabla f
\end{align}
$$
αk−i=ρk−isk−iT(Vk−i+1Vk−i+2…Vk−2Vk−1)∇f
然后左侧优化:
递推:ri+1=Vi+1Tri+si+1αi+1=ri+si+1(αi+1−ρi+1yi+1Tri)
初始:rk−m=Vk−mTGk0(Vk−m…Vk−1)∇f+sk−mαk−m
得到$$
r{k-1} = (V{k-1}^T \ldots V{k-m}^T) G_k^0 (V{k-m} \ldots V_{k-1}) \nabla f \
(V{k-1}^T \ldots V{k-m+1}^T) s{k-m} \alpha{k-m} \
(V{k-1}^T \ldots V{k-m+2}^T) s{k-m+1} \alpha{k-m+1} \
(V{k-1}^T \ldots V{k-m+3}^T) s{k-m+2} \alpha{k-m+2} \
\ldots \
V{k-1}^T s{k-2} \alpha_{k-2} \
s{k-1} \alpha{k-1}
$$
rk−1就是最后要求解的值。
L-BFGS算法过程:

Gk0 的选择:yk−1Tyk−1sk−1Tyk−1I
L-BFGS法计算方向更精美一点的排版####

看第6步,就直接计算出 Gk0 了。之前看到有些代码是传入了Gk0 。
整个L-BFGS法下降过程####

待扩展###
百度有个shooting算法 ,比LBFGS更快,对hession矩阵分块,使得特征值差不多的靠的更近。
并行化###
《Large-scale L-BFGS using MapReduce》
整个算法过程(Algorithm 1)中,第2,3,4步可以优化。
第2,4步很按数据容易拆分。
第3步拆分如下:

参考佳文####
Last updated