1. 原理简介
L是limited memory的意思。BFGS是四个数学家的名字。连续优化问题基本原理是泰勒二阶展开后,求导=0,用迭代的方法进行求解。
迭代公式很简单:
f
x
k
′
+
f
x
k
′
′
(
x
k
+
1
−
x
k
)
=
0
f'_{x_k}+f''_{x_k}(x_{k+1}-x_k)=0
fxk′+fxk′′(xk+1−xk)=0
f
′
f'
f′是一个向量,
f
′
′
f''
f′′是一个矩阵,称为Hessian阵。Hessian计算比较复杂,我们用迭代的方式计算,迭代方程改写为:
x
k
+
1
=
x
k
−
f
′
f
′
′
−
1
x_{k+1}=x_k-f'f''^{-1}
xk+1=xk−f′f′′−1。我们用D来近似
f
′
′
−
1
f''^{-1}
f′′−1,迭代公式为:
注意如下几点:
(1)这里有2个迭代:第一个迭代计算
D
D
D,第二个迭代计算
f
f
f。为了节省时间,我们每一轮迭代都干脆让两个迭代一起进行。
(2)在深度学习时,数据量往往非常大。假设我们数据有10w维,那么每次迭代算出来的D有74.5G,内存、显存都放不下。所以我们用时间换空间,使用L-BFGS方法,将D的计算过程存储下来,需要的时候计算一下即可。
(3)为了进一步节省内存,我们只保留一定步数的计算过程。