Nonnegative Matrix Factorization (NMF) の解を求めるアルゴリズムの導出

$\boldsymbol{V} \in \mathbb{R}^{m \times n}$を入力とし,これを$\boldsymbol{V} \approx \boldsymbol{W} \boldsymbol{H}^T$と分解することを目的とする．ただし，$\boldsymbol{W} \in \mathbb{R}^{m \times k}$, $\boldsymbol{H} \in \mathbb{R}^{n \times k}$とする．なお，今回は単純のため，正則化は考えない．拡張は難しくない（はず）．

さて，解きたい最適化問題は以下で与えられる．

```math
\begin{align*}
\min_{\boldsymbol{W}, \boldsymbol{H}} &\ \left\|\boldsymbol{V} - \boldsymbol{W}\boldsymbol{H}^T \right\|^2_{F} \\
s.t. &\ \boldsymbol{W} \succeq \boldsymbol{0} \\
&\ \boldsymbol{H} \succeq \boldsymbol{0} \\
\end{align*}
```

なお，今回はFrobeniusで行列間の距離を考えるが，他の指標でも構わない（KL Divergenceとか）．Lagrangianは以下のようになる．

```math
\begin{align*}
L(\boldsymbol{W}, \boldsymbol{H}, \boldsymbol{A}, \boldsymbol{B})
&= \left\|\boldsymbol{V} - \boldsymbol{W}\boldsymbol{H}^T \right\|^2_{F} - \sum_{i=1}^m \sum_{j=1}^k A_{ij} W_{ij} - \sum_{i=1}^n \sum_{j=1}^k B_{ij} H_{ij} \\
&= tr\left(\boldsymbol{H} \boldsymbol{W}^T \boldsymbol{W} \boldsymbol{H}^T\right) - 2 tr \left(\boldsymbol{V}^T \boldsymbol{W} \boldsymbol{H}^T\right)
- tr\left(\boldsymbol{W} \boldsymbol{A}^T\right) - tr\left(\boldsymbol{H} \boldsymbol{B}^T\right) + const.
\end{align*}
```

以下文章が適当になる．

KKT condition (Stationarity):

```math
\begin{align}
\frac{\partial L}{\partial \boldsymbol{W}} = 0 &\Rightarrow 2 \boldsymbol{W} \boldsymbol{H}^T \boldsymbol{H} - 2 \boldsymbol{V} \boldsymbol{H} - \boldsymbol{A} = 0 \cdots (1) \\
\frac{\partial L}{\partial \boldsymbol{H}} = 0 &\Rightarrow 2 \boldsymbol{H} \boldsymbol{W}^T \boldsymbol{W} - 2 \boldsymbol{V}^T \boldsymbol{W} - \boldsymbol{B} = 0 \cdots (2) \\
\end{align}
```

KKT condition (Complementary slackness):

```math
\begin{align*}
-A_{ij}W_{ij} &= 0 \ (\forall i=1, \ldots, m \ \forall j=1, \ldots, k) \cdots (3)\\
A_{ij} &\geq 0 \ (\forall i=1, \ldots, m \ \forall j=1, \ldots, k) \cdots (4)\\
-B_{ij}H_{ij} &= 0 \ (\forall i=1, \ldots, n \ \forall j=1, \ldots, k) \cdots (5)\\
B_{ij} &\geq 0 \ (\forall i=1, \ldots, n \ \forall j=1, \ldots, k) \cdots (6)\\
\end{align*}
```

```math
\begin{align*}
(1), (3) &\Rightarrow W_{ij} \left(\left[\boldsymbol{W} \boldsymbol{H}^T \boldsymbol{H}\right]_{ij} - \left[\boldsymbol{V} \boldsymbol{H}\right]_{ij} \right) = 0
\Rightarrow W_{ij} = W_{ij} \frac{\left[\boldsymbol{V} \boldsymbol{H}\right]_{ij}}{\left[\boldsymbol{W} \boldsymbol{H}^T \boldsymbol{H}\right]_{ij}} \cdots (7) \\
(2), (5) &\Rightarrow H_{ij} \left( \left[\boldsymbol{H} \boldsymbol{W}^T \boldsymbol{W}\right]_{ij} - \left[\boldsymbol{V}^T \boldsymbol{W}\right]_{ij} \right)= 0
\Rightarrow H_{ij} = H_{ij} \frac{\left[\boldsymbol{V}^T \boldsymbol{W}\right]_{ij}}{\left[\boldsymbol{H} \boldsymbol{W}^T \boldsymbol{W}\right]_{ij}} \cdots (8)
\end{align*}
```

(7), (8)から解は右辺の関数のfixed pointであることがわかる．なので，以下の更新式（fixed point iteration）で解を求めることができる．

```math
\begin{align*}
W_{ij} \leftarrow W_{ij} \frac{\left[\boldsymbol{V} \boldsymbol{H}\right]_{ij}}{\left[\boldsymbol{W} \boldsymbol{H}^T \boldsymbol{H}\right]_{ij}} \\
H_{ij} \leftarrow H_{ij} \frac{\left[\boldsymbol{V}^T \boldsymbol{W}\right]_{ij}}{\left[\boldsymbol{H} \boldsymbol{W}^T \boldsymbol{W}\right]_{ij}}
\end{align*}
```

ちなみに，

```math
W_{ij} \leftarrow W_{ij} - \epsilon_{ij} \left(\left[\boldsymbol{W} \boldsymbol{H}^T \boldsymbol{H}\right]_{ij} - \left[\boldsymbol{V} \boldsymbol{H}\right]_{ij}\right)
```

がGradient descentなわけですが，

```math
\epsilon_{ij} = \frac{W_{ij}}{\left[\boldsymbol{W} \boldsymbol{H}^T \boldsymbol{H}\right]_{ij}}
```

とおくと，fixed point iterationは，adaptive stepsizeを用いた，Gradient descentだと見ることもできる．$\boldsymbol{H}$も同様．