最急降下法および準ニュートン法に関するメモ

# 概要

　最適化問題を解く場合、最急降下法や準ニュートン法などが使われます。例えば、4次元変分法（データ同化）において、準ニュートン法が使われることが多いです。

最急降下法や準ニュートン法について、メモ程度に書き込んでいきます。

# 最適化問題

　目的関数 $f({\bf x})$ が最小となる ${\bf x}$ を求めることを考える。
　
以下の説明において、ランダウの o-記法を用いる。これは、

```math
\begin{align}
\lim_{x\to 0} \left| \frac{g(x)}{x} \right| = 0
\end{align}
```
が成立するとき
```math
\begin{align}
g(x) = o(x)
\end{align}
```
と表す。

# 最急降下法

## 最適性の１次の必要条件
　目的関数 $f({\bf x})$ は微分可能とする。このとき、点 ${\bf x}^{\ast}$ が局所最適解ならば、

```math
\begin{align}
{\bf \nabla} f({\bf x}^{\ast}) =0
\end{align}
```
が成立。
（ただし、停留点においても$\nabla f({\bf x}^{\ast})=0$ が成立する。十分条件である「$\nabla f({\bf x}^{\ast})=0$ であるならば、点 ${\bf x}^{\ast}$ は局所最適解である。」は成立しない。）

###  証明

　局所最適解 ${\bf x}^{\ast}$ から、ある方向 ${\bf d}$ $(\|{\bf d} \|=1)$に沿って十分小さい $\alpha(>0)$ だけ動いた点を考える。$f({\bf x})$ は微分可能なので、

```math
\begin{align}
f({\bf x}^{\ast}+\alpha\ {\bf d}) = f({\bf x}^{\ast}) + \alpha{\bf \nabla} f({\bf x}^{\ast})^T {\bf d}+o(\alpha)
\end{align}
```
と書ける。また、局所最適解 ${\bf x}^{\ast}$ においては、 
```math
\begin{align}
f({\bf x}^{\ast}+\alpha\ {\bf d}) \geq f({\bf x}^{\ast}) 
\end{align}
```
が成立するので、

```math
\begin{align}
& f({\bf x}^{\ast}+\alpha\ {\bf d}) -f({\bf x}^{\ast})=\alpha\nabla f({\bf x}^{\ast})^T {\bf d}+o(\alpha) \geq 0 \\
\therefore \ \ &\nabla f({\bf x}^{\ast})^T {\bf d}+\frac{o(\alpha)}{\alpha} \geq 0 \\
& \downarrow \alpha \to 0 \\
&\nabla f({\bf x}^{\ast})^T {\bf d}\geq 0 \\
\end{align}
```
となる。任意の${\bf d}$ において成立するので、$\nabla f({\bf x}^{\ast})=0$ が成立。


## 最急降下法について
最適性の１次の必要条件より、$\nabla f({\bf x})=0$を解けば良い。$\nabla f({\bf x})=0$を解くために、反復法が用いられる。局所最適解 ${\bf x}^{\ast}$ に収束する点列
　
```math
\begin{align}
\{{\bf x}_k \ \ |\ \ k=0,1,2,\ldots  \}
\end{align}
```
を生成し、局所最適解 ${\bf x}^{\ast}$ に十分近い ${\bf x}_k$ を近似解とする。

　点列は、${\bf x}_0$ から出発し
```math
\begin{align}
{\bf x}_{k+1} = {\bf x}_k+\alpha_k {\bf d}({\bf x}_k)
\end{align}
```
を繰り返しながら生成していく。$\alpha(>0)$ はステップ幅、${\bf d}({\bf x}_k)$ は探索方向と言う。

　反復法の各ステップにおいて、新たに生成された ${\bf x}_{k+1}$ が、これまで生成された点列より小さくなるよう、つまり、　
```math
\begin{align}
f({\bf x}_{k+1}) =f({\bf x}_k+\alpha_k {\bf d}({\bf x}_k)) < f({\bf x}_k) 
\end{align}
```
を満たすように、計算を行いたい。

　$f({\bf x})$ は、微分可能であるので
```math
\begin{align}
f({\bf x}_k+\alpha_k {\bf d}({\bf x}_k)) \approx f({\bf x}_k) + \alpha_k \nabla f({\bf x}_k)^T {\bf d}({\bf x}_k)
\end{align}
```
と書くことができる。

十分小さな$\alpha_k$ に対して、降下方向
```math
\begin{align}
 \nabla f({\bf x}_k)^T {\bf d}({\bf x}_k) <0
\end{align}
```
が成立するならば、

```math
\begin{align}
f({\bf x}_{k+1}) =f({\bf x}_k+\alpha_k {\bf d}({\bf x}_k)) < f({\bf x}_k) 
\end{align}
```
が成立。

　最急降下法は、探索方向を
```math
\begin{align}
 {\bf d}({\bf x}_k) = - \nabla f({\bf x}_k)^T
\end{align}
```
と定める。そうすれば、
```math
\begin{align}
 \nabla f({\bf x}_k)^T {\bf d}({\bf x}_k)= -\left\| \nabla f({\bf x}_k)  \right\|^2 <0
\end{align}
```
となり、降下方向になる。

まとめると最急降下法は、${\bf x}_0$ から出発し
```math
\begin{align}
{\bf x}_{k+1} = {\bf x}_k+\alpha_k {\bf d}({\bf x}_k)　\ \ , \ \  {\bf d}({\bf x}_k) = - \nabla f({\bf x}_k)^T
\end{align}
```
と計算しながら、近似解を求める。


# 直線探索
 
　上記のように計算すれば、$f({\bf x})$ の値は減少するが、増加に転じる場合がある。この問題に関しては、ステップ幅 $\alpha$ を上手に定めることで対処する。これは、

```math
\begin{align}
g(\alpha) =f({\bf x}_k+\alpha {\bf d}({\bf x}_k))
\end{align}
```
を最小化する$\alpha$ を求め、この$\alpha$ を $\alpha_k$として最適化問題の計算を進める。直接、この式を求めるのは難しいので、 以下の条件を満たすように、$\alpha_k$を定める。

　$f({\bf x})$ は微分可能であるので

```math
\begin{align}
\frac{\mathrm{d} g(\alpha) }{\mathrm{d} \alpha} &=\frac{\mathrm{d}  }{\mathrm{d} \alpha} f({\bf x}_k+\alpha {\bf d}({\bf x}_k)) \\
&= {\bf \nabla}  f({\bf x}_k+\alpha {\bf d}({\bf x}_k))^T \frac{\mathrm{d}  }{\mathrm{d} \alpha} ({\bf x}_k+\alpha {\bf d}({\bf x}_k)) \\
&= {\bf \nabla}  f({\bf x}_k+\alpha {\bf d}({\bf x}_k))^T {\bf d}({\bf x}_k)
\end{align}
```
　$\alpha=0$ における接線の方程式は、
```math
\begin{align}
g(\alpha)_{\tan} &= g(0) + \frac{\mathrm{d} g(0) }{\mathrm{d} \alpha}\alpha\\
&=g(0) +\alpha {\bf \nabla}  f({\bf x}_k)^T {\bf d}({\bf x}_k)
\end{align}
```
である。

　アルミホ条件は、$g(\alpha)$ が接線の方程式$g(\alpha)_{\tan}$ の傾きを $\tau$ 倍した直線より下部の領域に収まるように設定された条件である。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1521272/60170ca0-956a-fcc3-b5c6-1f1ac5228962.png)


　アルミホ条件では、小さすぎる $\alpha$ が選ばれる可能性がある。傾きが$\alpha=0$ より緩やかになる条件

```math
\begin{align}
\frac{\mathrm{d} g(\alpha) }{\mathrm{d} \alpha} \geq \frac{\mathrm{d} g(0)}{\mathrm{d} \alpha}
\end{align}
```
を入れた条件がウルフ条件である。
　降下法の計算より、$ \mathrm{d} g(0)/\mathrm{d} \alpha = {\bf \nabla}  f({\bf x}_k)^T {\bf d}({\bf x}_k) <0$ である。$\alpha$を大きくすると勾配は、

```math
\begin{align}
\frac{\mathrm{d} g(\alpha)}{\mathrm{d} \alpha}\geq 0
\end{align}
```
となるのでウルフ条件を満たし、小さすぎる $\alpha$ が選ばれる可能性を減らす。ただし、ウルフ条件は、$\mathrm{d} g(\alpha)/\mathrm{d}\alpha$ が簡単に計算できる場合に限る。

　まとめると、以下となる。
- アルミホ（Armijo）条件
```math
\begin{align}
g(\alpha) \leq g(0) + \tau \alpha {\bf \nabla}  f({\bf x}_k)^T {\bf d}({\bf x}_k) \ \ , \ \ 0<\tau<1
\end{align}
```

- ウルフ（Wolfe）条件 
```math
\begin{align}
&g(\alpha) \leq g(0) + \tau_1 \alpha {\bf \nabla}  f({\bf x}_k)^T {\bf d}({\bf x}_k)  \\ 
&{\bf \nabla}  f({\bf x}_k+\alpha {\bf d}({\bf x}_k))^T {\bf d}({\bf x}_k) \geq \tau_2 {\bf \nabla}  f({\bf x}_k)^T {\bf d}({\bf x}_k)\\
&0 < \tau_1 < \tau_2 < 1
\end{align}
```

　以上の条件を満たすように、ステップ幅$\alpha$ を決めれば良いが、$\alpha$をどのように更新すればいいかわからない。

　$\alpha$の更新方法として、バックトラック法がある。バックトラック法は、$\alpha^{(0)}=1$ を初期値として、反復的に

```math
\begin{align}
\alpha^{(i+1)} =\beta \alpha^{(i)}
\ \ , \ \ 0<\beta<1
\end{align}
```
として、更新していく。$i$ は直線探索におけるステップ数である。

　他に、セカント方があるが、$\mathrm{d} g(\alpha)/\mathrm{d}\alpha$ が簡単に計算できる場合に限る。
　



# 準ニュートン法

## 最適性の2次の必要条件
　目的関数 $f({\bf x})$ は２階微分可能とする。このとき、点 ${\bf x}^{\ast}$ が局所最適解ならば、ヘッセ行列は半正定値である。

```math
\begin{align}
{\bf d}^T{\bf \nabla} ^2 f({\bf x}^{\ast}){\bf d} \geq 0
\end{align}
```
${\bf d}$ は任意のベクトルである。

###  証明

　局所最適解 ${\bf x}^{\ast}$ から、ある方向 ${\bf d}$ $(\|{\bf d} \|=1)$に沿って十分小さい $\alpha(>0)$ だけ動いた点を考える。$f({\bf x})$ は２階微分可能なので、

```math
\begin{align}
f({\bf x}^{\ast}+\alpha\ {\bf d}) = f({\bf x}^{\ast}) + \alpha{\bf \nabla} f({\bf x}^{\ast})^T {\bf d}+ \frac{\alpha^2}{2}{\bf d}^T{\bf \nabla} ^2 f({\bf x}^{\ast}){\bf d}+o(\alpha^2)
\end{align}
```
と書ける。また、 局所最適解 ${\bf x}^{\ast}$ においては、 
```math
\begin{align}
f({\bf x}^{\ast}+\alpha\ {\bf d}) \geq f({\bf x}^{\ast}) 
\ \ , \ \ {\bf \nabla} f({\bf x}^{\ast}) =0 
\end{align}
```
が成立するので、

```math
\begin{align}
& f({\bf x}^{\ast}+\alpha\ {\bf d}) -f({\bf x}^{\ast})=\frac{\alpha^2}{2}{\bf d}^T{\bf \nabla} ^2 f({\bf x}^{\ast}){\bf d}+o(\alpha^2) \geq 0 \\
\therefore \ \ &{\bf d}^T{\bf \nabla} ^2 f({\bf x}^{\ast}){\bf d}+\frac{o(\alpha^2)}{\alpha^2} \geq 0 \\
& \downarrow \alpha \to 0 \\
&{\bf d}^T{\bf \nabla} ^2 f({\bf x}^{\ast}){\bf d}\geq 0 \\
\end{align}
```
となり、${\bf d}$ は任意のベクトルなので、ヘッセ行列は半正定値である。


## 最適性の2次の十分条件
　目的関数 $f({\bf x})$ は２階微分可能とする。このとき、点 ${\bf x}^{\ast}$ が停留点で、ヘッセ行列が半正定値ならば、点 ${\bf x}^{\ast}$ は局所最適解である。

###  証明
　
　停留点 ${\bf x}^{\ast}$ から、ある方向 ${\bf d}$ $(\|{\bf d} \|=1)$に沿って十分小さい $\alpha(>0)$ だけ動いた点を考える。$f({\bf x})$ は２階微分可能なので、

```math
\begin{align}
f({\bf x}^{\ast}+\alpha\ {\bf d}) = f({\bf x}^{\ast}) + \alpha{\bf \nabla} f({\bf x}^{\ast})^T {\bf d}+ \frac{\alpha^2}{2}{\bf d}^T{\bf \nabla} ^2 f({\bf x}^{\ast}){\bf d}+o(\alpha^2)
\end{align}
```
と書ける。停留点では ${\bf \nabla}f({\bf x}^{\ast})=0$ を満たし、ヘッセ行列は半正定値 ${\bf d}^T{\bf \nabla} ^2 f({\bf x}^{\ast}){\bf d}\geq0 $ を満たすので

```math
\begin{align}
f({\bf x}^{\ast}+\alpha\ {\bf d})-f({\bf x}^{\ast}) &= \frac{\alpha^2}{2}{\bf d}^T{\bf \nabla} ^2 f({\bf x}^{\ast}){\bf d}+o(\alpha^2)\geq o(\alpha^2)
\\
& \downarrow \alpha \to 0 \\
f({\bf x}^{\ast}+\alpha\ {\bf d})-f({\bf x}^{\ast}) &\geq 0
\end{align}
```
が成立。任意の ${\bf d}$ において成立するので、停留点 ${\bf x}^{\ast}$ は局所最適解である。


## 準ニュートン法について


　準ニュートン法は、正定値対称行列 ${\bf B}_k$ を用いて、最急降下法における探索方向を
```math
\begin{align}
 {\bf d}({\bf x}_k) = -{\bf B}_k^{-1} \nabla f({\bf x}_k)
\end{align}
```
と定める。すると、正定値対称行列の特性から
```math
\begin{align}
 \nabla f({\bf x}_k)^T {\bf d}({\bf x}_k)= - \nabla f({\bf x}_k)^T{\bf B}_k^{-1}\nabla f({\bf x}_k)  <0
\end{align}
```
となり、降下方向になる。正定値対称行列 ${\bf B}_k$は、ヘッセ行列の近似に対応しており、最適性の２次の必要十分条件より、局所最適解が保証される。

## セカント条件

　準ニュートン法では、正定値対称行列 ${\bf B}_k$を求める必要がある。

　まず、$f({\bf x_k})$ を ${\bf x}_{k+1}$ の周りで展開し

```math
\begin{align}
f({\bf x}_k)\approx f({\bf x}_{k+1}) + {\bf \nabla} f({\bf x}_{k+1})({\bf x}_k-{\bf x}_{k+1})
\end{align}
```

２階微分可能とすれば、

```math
\begin{align}
{\bf \nabla}f({\bf x}_k)\approx {\bf \nabla}f({\bf x}_{k+1}) + {\bf \nabla}^2 f({\bf x}_{k+1})({\bf x}_k-{\bf x}_{k+1})
\end{align}
```
となる。

　セカント条件は、${\bf \nabla}^2 f({\bf x}_{k+1})$ を正定値対称行列 ${\bf B} _{k+1}$ に置き換えた

```math
\begin{align}
{\bf B} _{k+1}({\bf x}_{k+1}-{\bf x}_k)={\bf \nabla}f({\bf x}_{k+1})-{\bf \nabla}f({\bf x}_k) 
\end{align}
```
を満たす条件である。

　この条件を満たす ${\bf B} _{k}$ の更新式として、BFGS公式がある。 

```math
\begin{align}
{\bf B}_{k+1} &= {\bf B}_{k} - \frac{{\bf B}_{k}{\bf s}_k({\bf B}_{k}{\bf s}_k)^T } {{\bf s}_k^T {\bf B}_{k}{\bf s}_k} + \frac{{\bf y}_k({\bf y}_k)^T }{{\bf s}_k^T {\bf y}_k} \\
{\bf s}_k &= {\bf x}_{k+1} - {\bf x}_{k} \\
{\bf y}_k &= {\bf \nabla}f({\bf x}_{k+1})-{\bf \nabla}f({\bf x}_k) \\
\end{align}
```
${\bf B} _{k}$ が対称行列ならば、上式は対称行列なので　${\bf B} _{k+1}$ も対称行列となる。BFGS公式がセカント条件を満たすか確認すると
 
```math
\begin{align}
{\bf B} _{k+1}({\bf x}_{k+1}-{\bf x}_k)&={\bf B} _{k+1} {\bf s}_k \\
&= {\bf B}_{k}{\bf s}_k - \frac{{\bf B}_{k}{\bf s}_k({\bf B}_{k}{\bf s}_k)^T } {{\bf s}_k^T {\bf B}_{k}{\bf s}_k}{\bf s}_k + \frac{{\bf y}_k({\bf y}_k)^T }{{\bf s}_k^T {\bf y}_k}{\bf s}_k            \\
&={\bf B}_{k}{\bf s}_k - \frac{{\bf B}_{k}{\bf s}_k } {{\bf s}_k^T {\bf B}_{k}{\bf s}_k} {\bf s}_k^T{\bf B}_{k}{\bf s}_k  +  \frac{{\bf y}_k }{{\bf s}_k^T {\bf y}_k} {\bf y}_k^T {\bf s}_k       \\
& = {\bf y}_k \\
&={\bf \nabla}f({\bf x}_{k+1})-{\bf \nabla}f({\bf x}_k) 
\end{align}
```
となり、BFGS公式がセカント条件を満たす。

## 正定値性

　BFGS公式は、セカント条件を満たし、更新された${\bf B} _{k+1}$ も対称行列となる。あとは、正定値であることを示す。

　まず、${\bf B} _{k}$ が正定値ならば ${\bf s}_k^T {\bf y}_k >0$ が成立することを示す。

　準ニュートン法で直線探索を行い
```math
\begin{align}
g(\alpha_k) =f({\bf x}_{k+1})=f({\bf x}_k+\alpha_k {\bf d}({\bf x}_k))
\end{align}
```
が最小になるステップ幅$\alpha_k$ が求まったとする。このとき、

```math
\begin{align}
\frac{\mathrm{d} g(\alpha) }{\mathrm{d} \alpha} &=\frac{\mathrm{d}  }{\mathrm{d} \alpha} f({\bf x}_k+\alpha {\bf d}({\bf x}_k)) \\
&= {\bf \nabla}  f({\bf x}_k+\alpha {\bf d}({\bf x}_k))^T \frac{\mathrm{d}  }{\mathrm{d} \alpha} ({\bf x}_k+\alpha {\bf d}({\bf x}_k)) \\
&= {\bf \nabla}  f({\bf x}_k+\alpha {\bf d}({\bf x}_k))^T {\bf d}({\bf x}_k)\\
&={\bf \nabla}  f({\bf x}_{k+1})^T {\bf d}({\bf x}_k) \\
&=0 
\end{align}
```
を満たすので、
```math
\begin{align}
{\bf s}_k^T {\bf y}_k &= ({\bf x}_{k+1} - {\bf x}_{k})^T\left({\bf \nabla}f({\bf x}_{k+1})-{\bf \nabla}f({\bf x}_k)\right) \\
&= \alpha_k {\bf d}({\bf x}_k)^T{\bf \nabla}f({\bf x}_{k+1}) -\alpha_k {\bf d}({\bf x}_k)^T{\bf \nabla}f({\bf x}_k)\\
&=-\alpha_k {\bf d}({\bf x}_k)^T{\bf \nabla}f({\bf x}_k)\\
\end{align}
```
となる。準ニュートン法の探索方向を代入すれば、${\bf B} _{k}$が正定値なので、

```math
\begin{align}
{\bf s}_k^T {\bf y}_k &=-\alpha_k {\bf d}({\bf x}_k)^T{\bf \nabla}f({\bf x}_k)\\
&=\alpha_k\left({\bf B}_k^{-1} \nabla f({\bf x}_k) \right)^T {\bf \nabla}f({\bf x}_k)\\
&=\alpha_k \nabla f({\bf x}_k) ^T{\bf B}_k^{-1}{\bf \nabla}f({\bf x}_k)>0\\
\end{align}
```
となる。（${\bf B} _{k}$は正定値対称行列なので、その逆行列も正定値になる。）

　
　最後に、${\bf B} _{k}$が正定値であるならば、行列${\bf B} _{k+1}$ も正定値であることを示す。任意のベクトル ${\bf u}$ を用意し

```math
\begin{align}
{\bf u}^T{\bf B}_{k+1}{\bf u} &= {\bf u}^T{\bf B}_{k}{\bf u} - {\bf u}^T\frac{{\bf B}_{k}{\bf s}_k({\bf B}_{k}{\bf s}_k)^T } {{\bf s}_k^T {\bf B}_{k}{\bf s}_k}{\bf u} +{\bf u}^T \frac{{\bf y}_k({\bf y}_k)^T }{{\bf s}_k^T {\bf y}_k}{\bf u}\\
&={\bf u}^T{\bf B}_{k}{\bf u} -\frac{\left({\bf u}^T {\bf B}_{k}{\bf s}_k\right)^2}{{\bf s}_k^T {\bf B}_{k}{\bf s}_k} + \frac{\left( {\bf y}_k^T {\bf u}\right)^2}{{\bf s}_k^T {\bf y}_k}
\end{align}
```
を考える。${\bf u}^T{\bf B}_{k+1}{\bf u}>0$ ならば正定値である。

　${\bf B} _{k}$は正定値対称行列なので対角化できる。正則行列を${\bf P}$（${\bf P}^T{\bf P}={\bf I}$）  とすれば、${\bf B} _{k}$は

```math
\begin{align}
{\bf B}_{k}&= {\bf P}^T {\bf \lambda} {\bf P} = {\bf P}^T \sqrt{{\bf \lambda}} {\bf P} {\bf P}^T \sqrt{{\bf \lambda}}  {\bf P} = \bar{{\bf P} }^T\bar{{\bf P} }\\
\bar{{\bf P} } &={\bf P}^T \sqrt{{\bf \lambda}}  {\bf P}
\end{align}
```
と書ける。${\bf \lambda}$ は、対角上に固有値が並んだ行列である。上記の行列を使い、

```math
\begin{align}
\bar{{\bf u}} =\bar{{\bf P} } {\bf u} 
\ \ , \ \ 
\bar{{\bf s}} =\bar{{\bf P} } {\bf s} 
\end{align}
```
と置くと、

```math
\begin{align}
{\bf u}^T{\bf B}_{k+1}{\bf u} 
&={\bf u}^T\bar{{\bf P} }^T\bar{{\bf P}}{\bf u}
 -\frac{\left({\bf u}^T\bar{{\bf P} }^T\bar{{\bf P}} {\bf s}_k\right)^2}{{\bf s}_k^T\bar{{\bf P}}^T\bar{{\bf P}} {\bf s}_k}
 + \frac{\left( {\bf y}_k^T {\bf u}\right)^2}{{\bf s}_k^T {\bf y}_k}\\

&=\bar{{\bf u}}^T\bar{{\bf u}} -\frac{\left(\bar{{\bf u}}^T\bar{{\bf s}} \right)^2}{\bar{{\bf s}}^T\bar{{\bf s}}}+ \frac{\left( {\bf y}_k^T {\bf u}\right)^2}{{\bf s}_k^T {\bf y}_k}\\

&=\frac{\left(\bar{{\bf u}}^T\bar{{\bf u}}\right)\left(\bar{{\bf s}}^T\bar{{\bf s}}\right)-\left(\bar{{\bf u}}^T\bar{{\bf s}}\right)^2 }{\bar{{\bf s}}^T\bar{{\bf s}}}+ \frac{\left( {\bf y}_k^T {\bf u}\right)^2}{{\bf s}_k^T {\bf y}_k}
\end{align}
```
となる。

　シュワルツの不等式から

```math
\begin{align}
\left(\bar{{\bf u}}^T\bar{{\bf u}}\right)\left(\bar{{\bf s}}^T\bar{{\bf s}}\right)\geq\left(\bar{{\bf u}}^T\bar{{\bf s}}\right)^2 
\end{align}
```
であり、さらに ${\bf s}_k^T {\bf y}_k >0$　が成立する。シュワルツの不等式において、等号を満たさない場合、

```math
\begin{align}
{\bf u}^T{\bf B}_{k+1}{\bf u} 
&=\frac{\left(\bar{{\bf u}}^T\bar{{\bf u}}\right)\left(\bar{{\bf s}}^T\bar{{\bf s}}\right)-\left(\bar{{\bf u}}^T\bar{{\bf s}}\right)^2 }{\bar{{\bf s}}^T\bar{{\bf s}}}+ \frac{\left( {\bf y}_k^T {\bf u}\right)^2}{{\bf s}_k^T {\bf y}_k}\\
& > 0
\end{align}
```
である。

　シュワルツの不等式において、等号が成立する場合を考える。
```math
\begin{align}
&\left(\bar{{\bf u}}^T\bar{{\bf u}}\right)\left(\bar{{\bf s}}^T\bar{{\bf s}}\right)=\left(\bar{{\bf u}}^T\bar{{\bf s}}\right)^2 \\
\end{align} 
```
等式を満たすには、$\eta(\neq0)$ を定数として
```math
\begin{align}
\bar{{\bf u}} &= \eta \bar{{\bf s}} \\
\therefore \ \ \bar{{\bf P} } {\bf u}  &=\eta \bar{{\bf P} } {\bf s} \\
\therefore \ \  {\bf u}  &=\eta  {\bf s} 
\end{align} 
```
が成立すれば良い。このとき、

```math
\begin{align}
{\bf u}^T{\bf B}_{k+1}{\bf u} 
&=\frac{\left(\bar{{\bf u}}^T\bar{{\bf u}}\right)\left(\bar{{\bf s}}^T\bar{{\bf s}}\right)-\left(\bar{{\bf u}}^T\bar{{\bf s}}\right)^2 }{\bar{{\bf s}}^T\bar{{\bf s}}}+ \frac{\left( {\bf y}_k^T {\bf u}\right)^2}{{\bf s}_k^T {\bf y}_k}\\
&= \eta ^2 \frac{\left( {\bf y}_k^T {\bf s}\right)^2}{{\bf s}_k^T {\bf y}_k}  \\
& > 0
\end{align}
```
となり、${\bf u}^T{\bf B}_{k+1}{\bf u} =0$ は満たさない。

 よって、${\bf B} _{k}$が正定値であるならば、行列 ${\bf B} _{k+1}$ も正定値である。

　正定値対称行列の初期値は、

```math
\begin{align}
{\bf B} _{0}={\bf I}
\end{align}
```
として計算される。　

## 記憶制限 BFGS 法

　BFGS 法の実装において、${\bf B}_{k}$ を記憶する必要があるため、大規模な計算の場合、メモリを多く必要とする。それを回避するため、記憶制限 BFGS 法　のアルゴリズムが使われる。


まずは、${\bf B}_{k+1}$ の逆行列を求める。

```math
\begin{align}
{\bf B}_{k+1} &= {\bf B}_{k} - \frac{{\bf B}_{k}{\bf s}_k({\bf B}_{k}{\bf s}_k)^T } {{\bf s}_k^T {\bf B}_{k}{\bf s}_k} + \frac{{\bf y}_k({\bf y}_k)^T }{{\bf s}_k^T {\bf y}_k} \\
&= {\bf B}_{k} - 
\begin{pmatrix}
{\bf B}_{k}{\bf s}_k & {\bf y}_k \\
\end{pmatrix}

\begin{pmatrix}
-\frac{1}{{\bf s}_k^T {\bf B}_{k}{\bf s}_k} & 0 \\
0 &  \frac{1}{{\bf s}_k^T {\bf y}_k} \\
\end{pmatrix}

\begin{pmatrix}
({\bf B}_{k}{\bf s}_k)^T \\
({\bf y}_k)^T \\
\end{pmatrix} \\

\end{align}
```


逆行列の公式

```math
\begin{align}
\left({\bf A}+ {\bf B}{\bf D}{\bf C} \right)^{-1}={\bf A}^{-1} -{\bf A}^{-1}{\bf B} \left( {\bf D}^{-1}+ {\bf C}{\bf A}^{-1}{\bf B} \right)^{-1}{\bf C}{\bf A}^{-1}
\end{align}
```
を使い、${\bf B_{k}}^{-1}={\bf H_{k}}$ と置き、${\bf B_{k}}$　は対称行列であることを使うと、


```math
\begin{align}
{\bf H}_{k+1} &={\bf H}_{k}-{\bf H}_{k} 
\begin{pmatrix}
{\bf B}_{k}{\bf s}_k & {\bf y}_k \\
\end{pmatrix}
\left[
\begin{pmatrix}
-\frac{1}{{\bf s}_k^T {\bf B}_{k}{\bf s}_k} & 0 \\
0 &  \frac{1}{{\bf s}_k^T {\bf y}_k} \\
\end{pmatrix}^{-1}
+
\begin{pmatrix}
({\bf B}_{k}{\bf s}_k)^T \\
({\bf y}_k)^T \\
\end{pmatrix}
{\bf H}_{k} 
\begin{pmatrix}
{\bf B}_{k}{\bf s}_k & {\bf y}_k \\
\end{pmatrix}
\right]^{-1}
\begin{pmatrix}
({\bf B}_{k}{\bf s}_k)^T \\
({\bf y}_k)^T \\
\end{pmatrix}
{\bf H}_{k} \\

&={\bf H}_{k}-
\begin{pmatrix}
{\bf s}_k & {\bf H}_{k}{\bf y}_k \\
\end{pmatrix}
\left[
\begin{pmatrix}
-{\bf s}_k^T {\bf B}_{k}{\bf s}_k & 0 \\
0 &  {\bf s}_k^T {\bf y}_k \\
\end{pmatrix}
+
\begin{pmatrix}
({\bf B}_{k}{\bf s}_k)^T \\
({\bf y}_k)^T \\
\end{pmatrix}

\begin{pmatrix}
{\bf s}_k & {\bf H}_{k} {\bf y}_k \\
\end{pmatrix}
\right]^{-1}
\begin{pmatrix}
({\bf s}_k)^T \\
({\bf y}_k)^T {\bf H}_{k}\\
\end{pmatrix}
\end{align}
```
また、

```math
\begin{align}
&\left[
\begin{pmatrix}
-{\bf s}_k^T {\bf B}_{k}{\bf s}_k & 0 \\
0 &  {\bf s}_k^T {\bf y}_k \\
\end{pmatrix}
+
\begin{pmatrix}
({\bf B}_{k}{\bf s}_k)^T \\
({\bf y}_k)^T \\
\end{pmatrix}

\begin{pmatrix}
{\bf s}_k & {\bf H}_{k} {\bf y}_k \\
\end{pmatrix}
\right]^{-1}
\\
&=
\begin{pmatrix}
-{\bf s}_k^T {\bf B}_{k}{\bf s}_k+{\bf s}_k^T {\bf B}_{k}{\bf s}_k & {\bf s}_k^T {\bf y}_k \\
{\bf y}_k^T {\bf s}_k &  {\bf s}_k^T {\bf y}_k +{\bf y}_k^T{\bf H}_{k} {\bf s}_k \\
\end{pmatrix}^{-1}
\\
&=-\frac{1}{({\bf s}_k^T {\bf y}_k )({\bf y}_k^T {\bf s}_k)}
\begin{pmatrix}
{\bf s}_k^T {\bf y}_k +{\bf y}_k^T{\bf H}_{k} {\bf s}_k & -{\bf s}_k^T {\bf y}_k \\
-{\bf y}_k^T {\bf s}_k &  0 \\
\end{pmatrix}

\end{align}
```
となるため、


```math
\begin{align}
{\bf H}_{k+1} 
&={\bf H}_{k}+\frac{1}{({\bf s}_k^T {\bf y}_k )({\bf y}_k^T {\bf s}_k)}
\begin{pmatrix}
{\bf s}_k & {\bf H}_{k}{\bf y}_k \\
\end{pmatrix}

\begin{pmatrix}
{\bf s}_k^T {\bf y}_k +{\bf y}_k^T{\bf H}_{k} {\bf s}_k & -{\bf s}_k^T {\bf y}_k \\
-{\bf y}_k^T {\bf s}_k &  0 \\
\end{pmatrix}

\begin{pmatrix}
({\bf s}_k)^T \\
({\bf y}_k)^T {\bf H}_{k}\\
\end{pmatrix}
\\
&={\bf H}_{k}+\frac{1}{({\bf s}_k^T {\bf y}_k )({\bf y}_k^T {\bf s}_k)}\left\{
{\bf s}_k ({\bf s}_k^T {\bf s}_k ){\bf s}_k^T 
+{\bf s}_k {\bf y}_k^T {\bf H}_{k}{\bf y}_k{\bf s}_k^T
-{\bf s}_k({\bf s}_k^T{\bf y}_k) {\bf y}_k^T{\bf H}_{k}
-{\bf H}_{k}{\bf y}_k({\bf y}_k^T{\bf s}_k){\bf s}_k^T\right\}
\end{align}
```

よって、${\bf B_{k+1}}$ の逆行列 ${\bf H_{k+1}}$

```math
\begin{align}
{\bf H}_{k+1}&=\left({\bf I}-\frac{{\bf s}_k({\bf y}_k)^T}{{\bf y}_k^T{\bf s}_k }\right) {\bf H}_{k} \left({\bf I}-\frac{{\bf y}_k({\bf s}_k)^T}{{\bf y}_k^T{\bf s}_k }\right)+
\frac{{\bf s}_k({\bf s}_k)^T}{{\bf y}_k^T{\bf s}_k }
\end{align}
```
が求まる。

　${\bf H}_{k+1}$ を分解することを考える。
```math
\begin{align}
{\bf v}_k = {\bf I} - \rho_k {\bf y}_k{\bf s}_k^T 
\ \ , \ \
\rho_k = \frac{1}{{\bf y}_k^T{\bf s}_k}
\end{align}
```

とおき、計算ステップ $k$ ごとに　${\bf H}_{k}$ 分解していき
```math
\begin{align}
{\bf H}_{k+1}&={\bf v}_k^T{\bf H}_{k}{\bf v}_k+ \rho_k {\bf s}_k{\bf s}_k^T \\
&={\bf v}_k^T\left\{ {\bf v}_{k-1}^T{\bf H}_{k-1}{\bf v}_{k-1}+ \rho_k {\bf s}_{k-1}{\bf s}_{k-1}^T\right\}{\bf v}_k+ \rho_k {\bf s}_k{\bf s}_k^T \\
&=({\bf v}_k^T{\bf v}_{k-1}^T){\bf H}_{k-1}({\bf v}_{k-1}{\bf v}_{k})
+\rho_k {\bf v}_k^T{\bf s}_{k-1}{\bf s}_{k-1}^T{\bf v}_k
+ \rho_k {\bf s}_k{\bf s}_k^T \\
&\vdots \\
&=({\bf v}_k^T{\bf v}_{k-1}^T\cdots {\bf v}_{0}^T){\bf H}_{0}({{\bf v}_{0}\cdots\bf v}_{k-1}{\bf v}_{k})
+\rho_0 ({\bf v}_k^T{\bf v}_{k-1}^T\cdots {\bf v}_{1}^T){\bf s}_{0}{\bf s}_{0}^T ({{\bf v}_{1}\cdots\bf v}_{k-1}{\bf v}_{k}) \\
&+\cdots+\rho_k {\bf v}_k^T{\bf s}_{k-1}{\bf s}_{k-1}^T{\bf v}_k
+ \rho_k {\bf s}_k{\bf s}_k^T
\end{align}
```
となる。

　記憶制限 BFGS 法は、過去の $m$ ステップ分だけ情報を保持し
```math
\begin{align}
{\bf H}_{k+1}&=({\bf v}_k^T{\bf v}_{k-1}^T\cdots {\bf v}_{k-m}^T){\bf H}_{０}({{\bf v}_{k-m}\cdots\bf v}_{k-1}{\bf v}_{k})\\
&+\rho_{k-m} ({\bf v}_k^T{\bf v}_{k-1}^T\cdots {\bf v}_{k-m+1}^T){\bf s}_{k-m}{\bf s}_{k-m}^T ({{\bf v}_{k-m+1}\cdots\bf v}_{k-1}{\bf v}_{k}) \\
&+\cdots+\rho_k {\bf v}_k^T{\bf s}_{k-1}{\bf s}_{k-1}^T{\bf v}_k
+ \rho_k {\bf s}_k{\bf s}_k^T
\end{align}
```
を計算する。

　記憶制限 BFGS 法のアルゴリズムは、wikipedia に記載されている。

https://en.wikipedia.org/wiki/Limited-memory_BFGS


　

# 参考文献
記事は、以下の書籍を参考にしています。

しっかり学ぶ数理最適化　モデルからアルゴリズムまで
梅谷俊治・著

https://www.kspub.co.jp/book/detail/5212707.html