Meet Our Team
home

Derivation of LBFGS Part 4 - LBFGS Method

오태호 (Taeho Oh)
오태호 (Taeho Oh)
안녕하세요. 오태호입니다.
이 글에서는 Optimization 기법중에 하나인 LBFGS Method(Limited Memory Broyden–Fletcher–Goldfarb–Shanno Method)의 수식을 다음과 같이 4개의 Part에 걸쳐서 차근차근 유도하여 LBFGS Method의 구조를 조금 깊게 살펴보도록 하겠습니다.
Derivation of LBFGS Part 4 - LBFGS Method

LBFGS Method

Quasi Newton Method중에 하나인 BFGS Method는 HkHk의 크기가 너무 커서 저장이 쉽지 않은 문제가 있습니다. 여기서는 HkHk를 저장하지 않고 BFGS Method를 사용하는 LBFGS Method(Limited Memory Broyden Fletcher Goldfarb Shanno Method)를 살펴보겠습니다.
앞에서 정의했던 각종 수식을 다시 정리하면 다음과 같습니다.
x=[x1x2xn]f(x)=[x1f(x)x2f(x)xnf(x)]2f(x)=[2x12f(x)2x1x2f(x)2x1xnf(x)2x2x1f(x)2x22f(x)2x2xnf(x)2f(x)2ρf(x)2nf(x)\begin{array}{l}\mathbf{x}=\left[\begin{array}{c}x_{1} \\x_{2} \\\vdots \\x_{n}\end{array}\right] \\\nabla f(\mathbf{x})=\left[\begin{array}{c}\frac{\partial}{\partial x_{1}} f(\mathbf{x}) \\\frac{\partial}{\partial x_{2}} f(\mathbf{x}) \\\vdots \\\frac{\partial}{\partial x_{n}} f(\mathbf{x})\end{array}\right] \\\nabla^{2} f(\mathbf{x})=\left[\begin{array}{cccc}\frac{\partial^{2}}{\partial x_{1}^{2}} f(\mathbf{x}) & \frac{\partial^{2}}{\partial x_{1} \partial x_{2}} f(\mathbf{x}) & \cdots & \frac{\partial^{2}}{\partial x_{1} \partial x_{n}} f(\mathbf{x}) \\\frac{\partial^{2}}{\partial x_{2} x_{1}} f(\mathbf{x}) & \frac{\partial^{2}}{\partial x_{2}^{2}} f(\mathbf{x}) & \cdots & \frac{\partial^{2}}{\partial x_{2} \partial x_{n}} f(\mathbf{x}) \\\vdots & \vdots & \ddots & \vdots \\\frac{\partial^{2}}{\partial} f(\mathbf{x}) & \frac{\partial^{2}}{\rho} f(\mathbf{x}) & \cdots & \frac{\partial^{2}}{n} f(\mathbf{x})\end{array}\right.\end{array}
Quasi Newton Method를 다시 살펴보면 다음과 같습니다.
xk+1=xktkHkgk\mathbf{x}_{k+1}=\mathbf{x}_{k}-t_{k} \mathbf{H}_{k} \mathbf{g}_{k}
BFGS Method를 다시 살펴보면 다음과 같습니다.
Bk+1=Bk+aukukT+bvkvkT=BkBkskskTBkskTBksk+ykykTykTskHk+1=(IskykTykTsk)Hk(IykskTykTsk)+skskTykTsk\begin{aligned}\mathbf{B}_{k+1} & =\mathbf{B}_{k}+a \mathbf{u}_{k} \mathbf{u}_{k}^{T}+b \mathbf{v}_{k} \mathbf{v}_{k}^{T} \\& =\mathbf{B}_{k}-\frac{\mathbf{B}_{k} \mathbf{s}_{k} \mathbf{s}_{k}^{T} \mathbf{B}_{k}}{\mathbf{s}_{k}^{T} \mathbf{B}_{k} \mathbf{s}_{k}}+\frac{\mathbf{y}_{k} \mathbf{y}_{k}^{T}}{\mathbf{y}_{k}^{T} \mathbf{s}_{k}} \\\mathbf{H}_{k+1} & =\left(\mathbf{I}-\frac{\mathbf{s}_{k} \mathbf{y}_{k}^{T}}{\mathbf{y}_{k}^{T} \mathbf{s}_{k}}\right) \mathbf{H}_{k}\left(\mathbf{I}-\frac{\mathbf{y}_{k} \mathbf{s}_{k}^{T}}{\mathbf{y}_{k}^{T} \mathbf{s}_{k}}\right)+\frac{\mathbf{s}_{k} \mathbf{s}_{k}^{T}}{\mathbf{y}_{k}^{T} \mathbf{s}_{k}}\end{aligned}
BFGS Method를 설명할 때 Hk\mathbf{H}_{k}를 구하는 방법을 알아보았습니다. 그런데 Quasi Newton Method를 자세히 살펴보면 결국 필요한 것은 Hk\mathbf{H}_{k}가 아니라 Hkgk\mathbf{H}_{k} \mathbf{g}_{k}입니다. x가 n차원 Vector일 때 Hk\mathbf{H}_{k}를 저장하기 위해서는  Element의 Memory가 필요하지만  Hkgk\mathbf{H}_{k} \mathbf{g}_{k}는 n Element의 Memory만이 필요합니다. 그리고 Hk\mathbf{H}_{k}는 Iteration마다 n차원 Vector 2개를(uk\mathbf{u}_{k}와 vk\mathbf{v}_{k}를) 사용해서 Update를 하기 때문에 Hk\mathbf{H}_{k}의 변화정보를 n×2n \times 2  Element의 저장공간에 저장할 수 있습니다. 이런 특징을 보면 Hk\mathbf{H}_{k}의 n2n^{2} Element의 저장공간보다 훨씬 적은 저장공간을 사용하면서 BFGS Method를 사용할 수 있는 방법이 있을 것으로 상상할 수 있습니다. 이런 특징을 활용한 방법이 LBFGS Method입니다.
BFGS Method를 좀 더 간결하게 표현하기 위해 ρk\rho_{k}를 다음과 같이 정의합니다.
ρk=1ykTsk\rho_{k}=\frac{1}{\mathbf{y}_{k}^{T} \mathbf{s}_{k}}
ρk\rho_{k}를 이용해서 BFGS Method를 다음과 같이 간결하게 표현합니다.
Hk+1=(IρkskykT)Hk(IρkykskT)+ρkskskT\mathbf{H}_{k+1}=\left(\mathbf{I}-\rho_{k} \mathbf{s}_{k} \mathbf{y}_{k}^{T}\right) \mathbf{H}_{k}\left(\mathbf{I}-\rho_{k} \mathbf{y}_{k} \mathbf{s}_{k}^{T}\right)+\rho_{k} \mathbf{s}_{k} \mathbf{s}_{k}^{T}
Hk\mathbf{H}_{k}는 다음과 같습니다.
Hk=(Iρk1sk1yk1T)Hk1(Iρk1yk1sk1T)+ρk1sk1sk1T\mathbf{H}_{k}=\left(\mathbf{I}-\rho_{k-1} \mathbf{s}_{k-1} \mathbf{y}_{k-1}^{T}\right) \mathbf{H}_{k-1}\left(\mathbf{I}-\rho_{k-1} \mathbf{y}_{k-1} \mathbf{s}_{k-1}^{T}\right)+\rho_{k-1} \mathbf{s}_{k-1} \mathbf{s}_{k-1}^{T}
BFGS는 를 구하려고 노력하지만, LBFGS Method는 Hk\mathbf{H}_{k}대신에 다음과 같이 Hkgk\mathbf{H}_{k} \mathbf{g}_{k}를 구하려고 노력합니다.
Hkgk=(Iρk1sk1yk1T)Hk1(Iρk1yk1sk1T)gk+ρk1sk1sk1Tgk\mathbf{H}_{k} \mathbf{g}_{k}=\left(\mathbf{I}-\rho_{k-1} \mathbf{s}_{k-1} \mathbf{y}_{k-1}^{T}\right) \mathbf{H}_{k-1}\left(\mathbf{I}-\rho_{k-1} \mathbf{y}_{k-1} \mathbf{s}_{k-1}^{T}\right) \mathbf{g}_{k}+\rho_{k-1} \mathbf{s}_{k-1} \mathbf{s}_{k-1}^{T} \mathbf{g}_{k}
이 식을 살펴보면 Hkgk\mathbf{H}_{k} \mathbf{g}_{k}를 최대한 정확하게 구하기 위해서는 이전 Iteration인 Hk1\mathbf{H}_{k-1}을 최대한 정확하게 구해야 합니다. 그리고 Hk1\mathbf{H}_{k-1}을 최대한 정확하게 구하기 위해서는 Hk2\mathbf{H}_{k-2}을 최대한 정확하게 구해야 합니다. 하지만 그렇다고 해도 Hk1000\mathbf{H}_{k-1000}같이 상당히 이전 Iteration 정보가 중요하지는 않습니다. 그래서 LBFGS Method에서는 적당히 이전 Iteration 정보까지만을 사용해서 Hkgk\mathbf{H}_{k} \mathbf{g}_{k}를 구하려고 노력합니다. 얼마나 이전 Iteration 정보를 사용하는가를 History Size라고 합니다. History Size가 클수록 Memory를 많이 사용하게 되고 계산결과가 더 정확해집니다.
History Size가 22인 경우의 Hkgk\mathbf{H}_{k} \mathbf{g}_{k}를 계산해서 규칙성을 찾아보겠습니다.
Hkgk=(Iρk1sk1yk1T)Hk1(Iρk1yk1sk1T)gk+ρk1sk1sk1Tgk=(Iρk1sk1yk1T)((Iρk2sk2yk2T)Hk2(Iρk2yk2sk2T)+ρk2sk2sk2T)(Iρk1yk1sk1T)gk+ρk1sk1sk1Tgkqk=gkαk1=ρk1sk1Tqkqk1=qkαk1yk1Hkgk=(Iρk1sk1yk1T)((Iρk2sk2yk2T)Hk2(Iρk2yk2sk2T)+ρk2sk2sk2T)qk1+αk1sk1αk2=ρk2sk2Tqk1qk2=qk1αk2yk2Hkgk=(Iρk1sk1yk1T)((Iρk2sk2yk2T)Hk2qk2+αk2sk2)+αk1sk1rk2=Hk2qk2βk2=ρk2yk2Trk2Hkgk=(Iρk1sk1yk1T)(rk2βk2sk2+αk2sk2)+αk1sk1rk1=rk2+(αk2βk2)sk2βk1=ρk1yk1Trk1Hkgk=rk1βk1sk1+αk1sk1rk=rk1+(αk1βk1)sk1Hkgk=rk=rk1+(αk1βk1)sk1=rk2+(αk2βk2)sk2+(αk1βk1)sk1=Hk2qk2+(αk2βk2)sk2+(αk1βk1)sk1Hkgk=(Iρk1sk1yk1T)Hk1(Iρk1yk1sk1T)gk+ρk1sk1sk1Tgk=(Iρk1sk1yk1T)((Iρk2sk2yk2T)Hk2(Iρk2yk2sk2T)+ρk2sk2sk2T)(Iρk1yk1sk1T)gk+ρk1sk1sk1Tgkqk=gkαk1=ρk1sk1Tqkqk1=qkαk1yk1Hkgk=(Iρk1sk1yk1T)((Iρk2sk2yk2T)Hk2(Iρk2yk2sk2T)+ρk2sk2sk2T)qk1+αk1sk1αk2=ρk2sk2Tqk1qk2=qk1αk2yk2Hkgk=(Iρk1sk1yk1T)((Iρk2sk2yk2T)Hk2qk2+αk2sk2)+αk1sk1rk2=Hk2qk2βk2=ρk2yk2Trk2Hkgk=(Iρk1sk1yk1T)(rk2βk2sk2+αk2sk2)+αk1sk1rk1=rk2+(αk2βk2)sk2βk1=ρk1yk1Trk1Hkgk=rk1βk1sk1+αk1sk1rk=rk1+(αk1βk1)sk1Hkgk=rk=rk1+(αk1βk1)sk1=rk2+(αk2βk2)sk2+(αk1βk1)sk1=Hk2qk2+(αk2βk2)sk2+(αk1βk1)sk1\begin{array}{l}\begin{array}{l}\mathbf{H}_{k} \mathbf{g}_{k}=\left(\mathbf{I}-\rho_{k-1} \mathbf{s}_{k-1} \mathbf{y}_{k-1}^{T}\right) \mathbf{H}_{k-1}\left(\mathbf{I}-\rho_{k-1} \mathbf{y}_{k-1} \mathbf{s}_{k-1}^{T}\right) \mathbf{g}_{k}+\rho_{k-1} \mathbf{s}_{k-1} \mathbf{s}_{k-1}^{T} \mathbf{g}_{k} \\=\left(\mathbf{I}-\rho_{k-1} \mathbf{s}_{k-1} \mathbf{y}_{k-1}^{T}\right)\left(\left(\mathbf{I}-\rho_{k-2} \mathbf{s}_{k-2} \mathbf{y}_{k-2}^{T}\right) \mathbf{H}_{k-2}\left(\mathbf{I}-\rho_{k-2} \mathbf{y}_{k-2} \mathbf{s}_{k-2}^{T}\right)+\rho_{k-2} \mathbf{s}_{k-2} \mathbf{s}_{k-2}^{T}\right)\left(\mathbf{I}-\rho_{k-1} \mathbf{y}_{k-1} \mathbf{s}_{k-1}^{T}\right) \mathbf{g}_{k}+\rho_{k-1} \mathbf{s}_{k-1} \mathbf{s}_{k-1}^{T} \mathbf{g}_{k} \\\mathbf{q}_{k}=\mathbf{g}_{k} \\\alpha_{k-1}=\rho_{k-1} \mathbf{s}_{k-1}^{T} \mathbf{q}_{k} \\\mathbf{q}_{k-1}=\mathbf{q}_{k}-\alpha_{k-1} \mathbf{y}_{k-1} \\\mathbf{H}_{k} \mathbf{g}_{k}=\left(\mathbf{I}-\rho_{k-1} \mathbf{s}_{k-1} \mathbf{y}_{k-1}^{T}\right)\left(\left(\mathbf{I}-\rho_{k-2} \mathbf{s}_{k-2} \mathbf{y}_{k-2}^{T}\right) \mathbf{H}_{k-2}\left(\mathbf{I}-\rho_{k-2} \mathbf{y}_{k-2} \mathbf{s}_{k-2}^{T}\right)+\rho_{k-2} \mathbf{s}_{k-2} \mathbf{s}_{k-2}^{T}\right) \mathbf{q}_{k-1}+\alpha_{k-1} \mathbf{s}_{k-1} \\\alpha_{k-2}=\rho_{k-2} \mathbf{s}_{k-2}^{T} \mathbf{q}_{k-1} \\\mathbf{q}_{k-2}=\mathbf{q}_{k-1}-\alpha_{k-2} \mathbf{y}_{k-2} \\\mathbf{H}_{k} \mathbf{g}_{k}=\left(\mathbf{I}-\rho_{k-1} \mathbf{s}_{k-1} \mathbf{y}_{k-1}^{T}\right)\left(\left(\mathbf{I}-\rho_{k-2} \mathbf{s}_{k-2} \mathbf{y}_{k-2}^{T}\right) \mathbf{H}_{k-2} \mathbf{q}_{k-2}+\alpha_{k-2} \mathbf{s}_{k-2}\right)+\alpha_{k-1} \mathbf{s}_{k-1} \\\mathbf{r}_{k-2}=\mathbf{H}_{k-2} \mathbf{q}_{k-2} \\\beta_{k-2}=\rho_{k-2} \mathbf{y}_{k-2}^{T} \mathbf{r}_{k-2} \\\mathbf{H}_{k} \mathbf{g}_{k}=\left(\mathbf{I}-\rho_{k-1} \mathbf{s}_{k-1} \mathbf{y}_{k-1}^{T}\right)\left(\mathbf{r}_{k-2}-\beta_{k-2} \mathbf{s}_{k-2}+\alpha_{k-2} \mathbf{s}_{k-2}\right)+\alpha_{k-1} \mathbf{s}_{k-1} \\\mathbf{r}_{k-1}=\mathbf{r}_{k-2}+\left(\alpha_{k-2}-\beta_{k-2}\right) \mathbf{s}_{k-2} \\\beta_{k-1}=\rho_{k-1} \mathbf{y}_{k-1}^{T} \mathbf{r}_{k-1} \\\mathbf{H}_{k} \mathbf{g}_{k}=\mathbf{r}_{k-1}-\beta_{k-1} \mathbf{s}_{k-1}+\alpha_{k-1} \mathbf{s}_{k-1} \\\mathbf{r}_{k}=\mathbf{r}_{k-1}+\left(\alpha_{k-1}-\beta_{k-1}\right) \mathbf{s}_{k-1} \\\mathbf{H}_{k} \mathbf{g}_{k}=\mathbf{r}_{k} \\=\mathbf{r}_{k-1}+\left(\alpha_{k-1}-\beta_{k-1}\right) \mathbf{s}_{k-1} \\=\mathbf{r}_{k-2}+\left(\alpha_{k-2}-\beta_{k-2}\right) \mathbf{s}_{k-2}+\left(\alpha_{k-1}-\beta_{k-1}\right) \mathbf{s}_{k-1} \\=\mathbf{H}_{k-2} \mathbf{q}_{k-2}+\left(\alpha_{k-2}-\beta_{k-2}\right) \mathbf{s}_{k-2}+\left(\alpha_{k-1}-\beta_{k-1}\right) \mathbf{s}_{k-1}\end{array}\\\mathbf{H}_{k} \mathbf{g}_{k}=\left(\mathbf{I}-\rho_{k-1} \mathbf{s}_{k-1} \mathbf{y}_{k-1}^{T}\right) \mathbf{H}_{k-1}\left(\mathbf{I}-\rho_{k-1} \mathbf{y}_{k-1} \mathbf{s}_{k-1}^{T}\right) \mathbf{g}_{k}+\rho_{k-1} \mathbf{s}_{k-1} \mathbf{s}_{k-1}^{T} \mathbf{g}_{k}\\=\left(\mathbf{I}-\rho_{k-1} \mathbf{s}_{k-1} \mathbf{y}_{k-1}^{T}\right)\left(\left(\mathbf{I}-\rho_{k-2} \mathbf{s}_{k-2} \mathbf{y}_{k-2}^{T}\right) \mathbf{H}_{k-2}\left(\mathbf{I}-\rho_{k-2} \mathbf{y}_{k-2} \mathbf{s}_{k-2}^{T}\right)+\rho_{k-2} \mathbf{s}_{k-2} \mathbf{s}_{k-2}^{T}\right)\left(\mathbf{I}-\rho_{k-1} \mathbf{y}_{k-1} \mathbf{s}_{k-1}^{T}\right) \mathbf{g}_{k}+\rho_{k-1} \mathbf{s}_{k-1} \mathbf{s}_{k-1}^{T} \mathbf{g}_{k}\\\mathbf{q}_{k}=\mathbf{g}_{k}\\\alpha_{k-1}=\rho_{k-1} \mathbf{s}_{k-1}^{T} \mathbf{q}_{k}\\\mathbf{q}_{k-1}=\mathbf{q}_{k}-\alpha_{k-1} \mathbf{y}_{k-1}\\\mathbf{H}_{k} \mathbf{g}_{k}=\left(\mathbf{I}-\rho_{k-1} \mathbf{s}_{k-1} \mathbf{y}_{k-1}^{T}\right)\left(\left(\mathbf{I}-\rho_{k-2} \mathbf{s}_{k-2} \mathbf{y}_{k-2}^{T}\right) \mathbf{H}_{k-2}\left(\mathbf{I}-\rho_{k-2} \mathbf{y}_{k-2} \mathbf{s}_{k-2}^{T}\right)+\rho_{k-2} \mathbf{s}_{k-2} \mathbf{s}_{k-2}^{T}\right) \mathbf{q}_{k-1}+\alpha_{k-1} \mathbf{s}_{k-1}\\\alpha_{k-2}=\rho_{k-2} \mathbf{s}_{k-2}^{T} \mathbf{q}_{k-1}\\\mathbf{q}_{k-2}=\mathbf{q}_{k-1}-\alpha_{k-2} \mathbf{y}_{k-2}\\\mathbf{H}_{k} \mathbf{g}_{k}=\left(\mathbf{I}-\rho_{k-1} \mathbf{s}_{k-1} \mathbf{y}_{k-1}^{T}\right)\left(\left(\mathbf{I}-\rho_{k-2} \mathbf{s}_{k-2} \mathbf{y}_{k-2}^{T}\right) \mathbf{H}_{k-2} \mathbf{q}_{k-2}+\alpha_{k-2} \mathbf{s}_{k-2}\right)+\alpha_{k-1} \mathbf{s}_{k-1}\\\mathbf{r}_{k-2}=\mathbf{H}_{k-2} \mathbf{q}_{k-2}\\\beta_{k-2}=\rho_{k-2} \mathbf{y}_{k-2}^{T} \mathbf{r}_{k-2}\\\mathbf{H}_{k} \mathbf{g}_{k}=\left(\mathbf{I}-\rho_{k-1} \mathbf{s}_{k-1} \mathbf{y}_{k-1}^{T}\right)\left(\mathbf{r}_{k-2}-\beta_{k-2} \mathbf{s}_{k-2}+\alpha_{k-2} \mathbf{s}_{k-2}\right)+\alpha_{k-1} \mathbf{s}_{k-1}\\\mathbf{r}_{k-1}=\mathbf{r}_{k-2}+\left(\alpha_{k-2}-\beta_{k-2}\right) \mathbf{s}_{k-2}\\\beta_{k-1}=\rho_{k-1} \mathbf{y}_{k-1}^{T} \mathbf{r}_{k-1}\\\mathbf{H}_{k} \mathbf{g}_{k}=\mathbf{r}_{k-1}-\beta_{k-1} \mathbf{s}_{k-1}+\alpha_{k-1} \mathbf{s}_{k-1}\\\mathbf{r}_{k}=\mathbf{r}_{k-1}+\left(\alpha_{k-1}-\beta_{k-1}\right) \mathbf{s}_{k-1}\\\mathbf{H}_{k} \mathbf{g}_{k}=\mathbf{r}_{k}\\=\mathbf{r}_{k-1}+\left(\alpha_{k-1}-\beta_{k-1}\right) \mathbf{s}_{k-1}\\=\mathbf{r}_{k-2}+\left(\alpha_{k-2}-\beta_{k-2}\right) \mathbf{s}_{k-2}+\left(\alpha_{k-1}-\beta_{k-1}\right) \mathbf{s}_{k-1}\\=\mathbf{H}_{k-2} \mathbf{q}_{k-2}+\left(\alpha_{k-2}-\beta_{k-2}\right) \mathbf{s}_{k-2}+\left(\alpha_{k-1}-\beta_{k-1}\right) \mathbf{s}_{k-1}\end{array}
여기서 Hk2\mathbf{H}_{k-2}에는 적당한 Matrix를 넣어줍니다. History Size가 큰 경우에는 II를 넣어도 큰 문제가 없지만 LBFGS Method에서는 보통 Heuristic으로 sk1Tyk1yk1Tyk1I\frac{\mathbf{s}_{k-1}^{T} \mathbf{y}_{k-1}}{\mathbf{y}_{k-1}^{T} \mathbf{y}_{k-1}} \mathbf{I}를 많이 사용합니다. 보통 이런 Heuristic을 사용하는 이유는 Initial Inverse Hessian를 참조하기 바랍니다.
위에서 알아본 History Size 2의 Hkgk\mathbf{H}_{k} \mathbf{g}_{k}의 계산과정을 일반화하여 History Size가 m일 때 계산과정을 정리하면 다음과 같습니다.
qkgk\mathbf{q}_{k} \leftarrow \mathbf{g}_{k}
For i=k1,k2,,kmi=k-1, k-2, \cdots, k-m
αiρisiTqi+1\alpha_{i} \leftarrow \rho_{i} \mathbf{s}_{i}^{T} \mathbf{q}_{i+1}
qiqi+1αiyi\mathbf{q}_{i} \leftarrow \mathbf{q}_{i+1}-\alpha_{i} \mathbf{y}_{i}
γksk1Tyk1yk1Tyk1I\gamma_{k} \leftarrow \frac{\mathbf{s}_{k-1}^{T} \mathbf{y}_{k-1}}{\mathbf{y}_{k-1}^{T} \mathbf{y}_{k-1}} \mathbf{I}
HkmγkI\mathbf{H}_{k-m} \leftarrow \gamma_{k} \mathbf{I}
rkmHkmqkm\mathbf{r}_{k-m} \leftarrow \mathbf{H}_{k-m} \mathbf{q}_{k-m}
For i=km,km+1,,k1i=k-m, k-m+1, \cdots, k-1
βiρiyiTri\beta_{i} \leftarrow \rho_{i} \mathbf{y}_{i}^{T} \mathbf{r}_{i}
ri+1ri+(αiβi)si\mathbf{r}_{i+1} \leftarrow \mathbf{r}_{i}+\left(\alpha_{i}-\beta_{i}\right) \mathbf{s}_{i}
Hkgkrk\mathbf{H}_{k} \mathbf{g}_{k} \leftarrow \mathbf{r}_{k}
그런데 여기서 자세히 살펴보면 qi\mathbf{q}_{i}와 ri\mathbf{r}_{i}는 굳이 Index별로 여러 개를 저장할 필요가 없습니다. 그래서 아래와 같이 더 간단하게 정리할 수 있습니다.
qgk\mathbf{q} \leftarrow \mathbf{g}_{k}
For i=k1,k2,,kmi=k-1, k-2, \cdots, k-m
αiρisiTq\alpha_{i} \leftarrow \rho_{i} \mathbf{s}_{i}^{T} \mathbf{q}
qqαiyi\mathbf{q} \leftarrow \mathbf{q}-\alpha_{i} \mathbf{y}_{i}
γksk1Tyk1yk1Tyk1I\gamma_{k} \leftarrow \frac{\mathbf{s}_{k-1}^{T} \mathbf{y}_{k-1}}{\mathbf{y}_{k-1}^{T} \mathbf{y}_{k-1}} \mathbf{I}
HkmγkI\mathbf{H}_{k-m} \leftarrow \gamma_{k} \mathbf{I}
rHkmq\mathbf{r} \leftarrow \mathbf{H}_{k-m} \mathbf{q}
For i=km,km+1,,k1i=k-m, k-m+1, \cdots, k-1
βiρiyiTr\beta_{i} \leftarrow \rho_{i} \mathbf{y}_{i}^{T} \mathbf{r}
rr+(αiβi)si\mathbf{r} \leftarrow \mathbf{r}+\left(\alpha_{i}-\beta_{i}\right) \mathbf{s}_{i}
Hkgkr\mathbf{H}_{k} \mathbf{g}_{k} \leftarrow \mathbf{r}
LBFGS Method는 이와 같이 Hkgk\mathbf{H}_{k} \mathbf{g}_{k}를 직접 계산하고 다음의 Iteration을 수행하는 것을 반복하여 f(X)f(\mathbf{X})를 최소화시키는 x를 구하는 방법입니다. 이때, tk\mathbf{t}_{k}는 Wolfe Conditions를 사용해서 구한 적절한 값을 사용합니다.
xk+1=xktkHkgk\mathbf{x}_{k+1}=\mathbf{x}_{k}-t_{k} \mathbf{H}_{k} \mathbf{g}_{k}
BFGS Method는 Hk\mathbf{H}_{k}를 계산하고 이것을 이용해 Hkgk\mathbf{H}_{k} \mathbf{g}_{k}을 계산하기 때문에 Memory 사용량이 매우 높지만 LBFGS Method는 Hkgk\mathbf{H}_{k} \mathbf{g}_{k}를 직접 계산하여 Memory 사용량을 BFGS Method에 비해 크게 낮출 수 있습니다.

Initial Inverse Hessian

LBFGS Method을 살펴보면 Initial Inverse Hessian Hkm\mathbf{H}_{k-m}가 필요합니다. History Size가 큰 경우에는 II를 사용해도 무방하지만 조금 더 개선된 Heuristic으로 다음과 같이 Hkm\mathbf{H}_{k-m}를 구해서 사용하는 경우가 많습니다. Gk1\mathbf{G}_{k-1}을 Hessian의 근사치라고 정의합니다.
Gk1sk1=yk1zk1=Gk1sk1yk1=Gk1sk1=Gk1zk1sk1=1Gk1zk1sk1Tyk1yk1Tyk1I=(1Gk1zk1)T(Gk1zk1)(Gk1zk1)T(Gk1zk1)I=zk1Tzk1zk1TGk1zk1IGk1sk1=yk1zk1=Gk1sk1yk1=Gk1sk1=Gk1zk1sk1=1Gk1zk1sk1Tyk1yk1Tyk1I=(1Gk1zk1)T(Gk1zk1)(Gk1zk1)T(Gk1zk1)I=zk1Tzk1zk1TGk1zk1I\begin{array}{l}\begin{array}{l}\mathbf{G}_{k-1} \mathbf{s}_{k-1}=\mathbf{y}_{k-1} \\\mathbf{z}_{k-1}=\sqrt{\mathbf{G}_{k-1}} \mathbf{s}_{k-1} \\\mathbf{y}_{k-1}=\mathbf{G}_{k-1} \mathbf{s}_{k-1}=\sqrt{\mathbf{G}_{k-1}} \mathbf{z}_{k-1} \\\mathbf{s}_{k-1}=\frac{1}{\sqrt{\mathbf{G}_{k-1}}} \mathbf{z}_{k-1} \\\frac{\mathbf{s}_{k-1}^{T} \mathbf{y}_{k-1}}{\mathbf{y}_{k-1}^{T} \mathbf{y}_{k-1}} \mathbf{I}=\frac{\left(\frac{1}{\sqrt{\mathbf{G}_{k-1}}} \mathbf{z}_{k-1}\right)^{T}\left(\sqrt{\mathbf{G}_{k-1}} \mathbf{z}_{k-1}\right)}{\left(\sqrt{\mathbf{G}_{k-1}} \mathbf{z}_{k-1}\right)^{T}\left(\sqrt{\mathbf{G}_{k-1}} \mathbf{z}_{k-1}\right)} \mathbf{I} \\=\frac{\mathbf{z}_{k-1}^{T} \mathbf{z}_{k-1}}{\mathbf{z}_{k-1}^{T} \mathbf{G}_{k-1} \mathbf{z}_{k-1}} \mathbf{I}\end{array}\\\mathbf{G}_{k-1} \mathbf{s}_{k-1}=\mathbf{y}_{k-1}\\\mathbf{z}_{k-1}=\sqrt{\mathbf{G}_{k-1}} \mathbf{s}_{k-1}\\\mathbf{y}_{k-1}=\mathbf{G}_{k-1} \mathbf{s}_{k-1}=\sqrt{\mathbf{G}_{k-1}} \mathbf{z}_{k-1}\\\mathbf{s}_{k-1}=\frac{1}{\sqrt{\mathbf{G}_{k-1}}} \mathbf{z}_{k-1}\\\frac{\mathbf{s}_{k-1}^{T} \mathbf{y}_{k-1}}{\mathbf{y}_{k-1}^{T} \mathbf{y}_{k-1}} \mathbf{I}=\frac{\left(\frac{1}{\sqrt{\mathbf{G}_{k-1}}} \mathbf{z}_{k-1}\right)^{T}\left(\sqrt{\mathbf{G}_{k-1}} \mathbf{z}_{k-1}\right)}{\left(\sqrt{\mathbf{G}_{k-1}} \mathbf{z}_{k-1}\right)^{T}\left(\sqrt{\mathbf{G}_{k-1}} \mathbf{z}_{k-1}\right)} \mathbf{I}\\=\frac{\mathbf{z}_{k-1}^{T} \mathbf{z}_{k-1}}{\mathbf{z}_{k-1}^{T} \mathbf{G}_{k-1} \mathbf{z}_{k-1}} \mathbf{I}\end{array}
자세히 살펴보면 zk1TGk1zk1zk1Tzk1I\frac{\mathbf{z}_{k-1}^{T} \mathbf{G}_{k-1} \mathbf{z}_{k-1}}{\mathbf{z}_{k-1}^{T} \mathbf{z}_{k-1}} \mathbf{I}의 Eigenvalue는 Hessian의 Eigenvalue와 유사하기 때문에 zk1Tzk1zk1TGk1zk1I\frac{\mathbf{z}_{k-1}^{T} \mathbf{z}_{k-1}}{\mathbf{z}_{k-1}^{T} \mathbf{G}_{k-1} \mathbf{z}_{k-1}} \mathbf{I}의 Eigenvalue는 Inverse Hessian의 Eigenvalue와 유사하게 됩니다. 즉, sk1Tyk1yk1Tyk1I\frac{\mathbf{s}_{k-1}^{T} \mathbf{y}_{k-1}}{\mathbf{y}_{k-1}^{T} \mathbf{y}_{k-1}} \mathbf{I}의 Eigenvalue는 Inverse Hessian의 Eigenvalue와 유사하게 되므로 sk1Tyk1yk1Tyk1I\frac{\mathbf{s}_{k-1}^{T} \mathbf{y}_{k-1}}{\mathbf{y}_{k-1}^{T} \mathbf{y}_{k-1}} \mathbf{I}을 Initial Inverse Hessian으로 사용합니다.

Conclusion

LBFGS Method를 처음부터 차근차근 유도해 보았습니다. 이 글이 LBFGS Method를 이해하는데 유용한 자료로 사용되기를 희망합니다.
작성자
관련된 글 더 보기