\begin{equation*} \newcommand\innerp[2]{\langle #1, #2 \rangle} \newcommand\ve[1]{\boldsymbol{#1}} \newcommand\parfrac[2]{\frac{\partial #1}{\partial #2}} \end{equation*}

実装誤りを見直しながらもう一度。

やはり、自然勾配法が何故うまくいくのか、更新式の導出までやったほうが宜しい。実装間違いするから。適応的自然勾配の更新式は微小量の近似を使っている。微小量の近似は今まで何度も避けてきたが、この際おさらいする。ようはテイラー展開して2次以降の項を打ち切れば良し。高校数学レベルの話。

実験が落ち着いたら書いていきたい。

→実験OK。ステップサイズの設定が難しかったけど、ナイーブなものよりは性能がよいはず。

また、軽く見た感じでも自然勾配学習法は発散しやすい。以下の記事にあるように、正則化を掛けたほうが良さそう。

ヘッセ行列の計算は少し回り道になったが、理論的最適値との比較において議論できそう。

逆行列補題を使っていて、最早カルマンフィルタやRLSに近いんでないかと思えてきた。

にLMSからRLSまで記述あり。

上の「信号とシステム」を眺めていたら、NLMSにおける適応的ステップサイズ決定則が使えそうな印象。NLMSは事後誤差 \(e^{+}(k)\) を0にするように適応的なステップサイズ \(\alpha(k)\) を定める。普通のSigned-LMSでは、リファレンス信号 \(d(k)\), フィルタ係数 \(\ve{h}(k)\), 入力データ \(\ve{x}(k)\) に対し、事後誤差は次のように展開できる。

\begin{align*} e^{+}(k) &= d(k) - \innerp{\ve{h}(k+1)}{\ve{x}(k)} \\ &= d(k) - \innerp{\ve{h}(k) + \alpha(k) \mathrm{sign}[e(k)] \ve{x}(k)}{\ve{x}(k)} \\ &= d(k) - \innerp{\ve{h}(k)}{\ve{x}(k)} - \alpha(k) \mathrm{sign}[e(k)] \innerp{\ve{x}(k)}{\ve{x}(k)} \\ &= e(k) - \alpha(k) \mathrm{sign}[e(k)] ||\ve{x}(k)||_{2}^{2} \end{align*}

\(e^{+}(k) = 0\) となるように \(\alpha(k)\) を選ぶと、

\begin{equation*} \alpha(k) = \frac{e(k)}{\mathrm{sign}[e(k)] ||\ve{x}(k)||_{2}^{2}} = \frac{|e(k)|}{||\ve{x}(k)||_{2}^{2}} \end{equation*}

として、事後誤差を最小にするステップサイズが求まった。(Signed-LMSでこういう議論があんまり見られないのはなぜだ?この \(\alpha(k)\) をSigned-LMSの更新則に突っ込むとNLMSになる

自然勾配を使った場合が有益(ステップサイズ設定つらい)なので、求めてみると、

\begin{align*} e^{+}(k) &= d(k) - \innerp{\ve{h}(k+1)}{\ve{x}(k)} \\ &= d(k) - \innerp{\ve{h}(k) + \alpha(k) \mathrm{sign}[e(k)] \ve{F}(k)^{-1} \ve{x}(k)}{\ve{x}(k)} \\ &= d(k) - \innerp{\ve{h}(k)}{\ve{x}(k)} - \alpha(k) \mathrm{sign}[e(k)] \innerp{\ve{F}(k)^{-1}\ve{x}(k)}{\ve{x}(k)} \\ &= e(k) - \alpha(k) \mathrm{sign}[e(k)] \innerp{\ve{x}(k)}{\ve{F}(k)^{-1}\ve{x}(k)} \end{align*}

よって、

\begin{equation*} \alpha(k) = \frac{e(k)}{\mathrm{sign}[e(k)] \innerp{\ve{x}}{\ve{F}(k)^{-1}\ve{x}(k)}} = \frac{|e(k)|}{\innerp{\ve{x}(k)}{\ve{F}(k)^{-1}\ve{x}(k)}} \end{equation*}

が得られる。これは計量としてフィッシャー情報行列の逆行列を使った時の \(\ve{x}(k)\) のノルムによる正規化に対応する。すると残差の絶対値が外れる。NLMSとかなり近いけど計量が入っているところが違う。

実装してみたら実験でも音源に依存せず安定している印象(注意!ノイズのない正弦波で発散した!おそらく、情報行列の要素が全て同一で特異になっている。)。

結果の意味付けが非常に大事な気がする。資料35pあたりの議論を当てはまると、何か幾何的な解釈が出てくるはずだ。改めて、ここらへんの議論って誰かやっていないか、気になる。明日はそこを考えてみる。改めて既存研究が無いか見て、報告に移そうか。

TODO:

  • Normalizeするやつの結果の意味付け
  • 忘却係数として捉えれば式が簡単にならんか? \((\lambda \ve{F} + \ve{x}\ve{x}^{\mathsf{T}})^{-1}\)\(0 < \lambda < 1\) は1に近い係数。
  • 自然勾配法がなんでうまくいくのか Natural Gradient Descent を訳しながら理解していく。 New insights and perspectives on the natural gradient method も参考になりそう。
  • RLS(Recursive Least Square)の更新式の誤差に符号関数を被せたものが、自分が導いているものかも知れないと思い立つ。確認。