\begin{equation*} \newcommand\innerp[2]{\langle #1, #2 \rangle} \newcommand\ve[1]{\boldsymbol{#1}} \newcommand\parfrac[2]{\frac{\partial #1}{\partial #2}} \newcommand\mean[2]{\mathrm{E}_{#1} \left[ #2 \right]} \newcommand\KL[2]{\mathrm{KL} \left[ #1 \ \middle| \middle| \ #2 \right]} \end{equation*}

課題祭りで11/19と11/20の昼は潰れる。今から進めるだけ進める。 前までに確認した「直前の勾配とは必ずしも直交しない」の解決策を今日は考えたい。3連休は準備に入らないとまずそう。色々やっちゃったし。

解決策は 論文 にあると思う。適応的にやるんだったら上の問題は絶対に出てくるはずだし。

論文に答えが色々書いてあった。手法の要点は、

  • 共役勾配の線形結合係数にポラック・ラビエール(Polak-Ribiere)の式を使う。フレッチャー・リーブス(論文では(6)式)より実験的に性能が良かったらしい。
  • 線形結合係数には2次式を仮定した値を使う。ただし、η倍(定数倍)する(収束が保証される範囲が忘却係数により決まる)。これによって勾配は必ずしもステップ毎に直交しなくなり、定数ステップでの収束が保証されなくなる。(しかし、適応アルゴリズムにとってはむしろこれがいい!)

参考になった情報は、

  • 論文以前の共役勾配ベースの適応アルゴリズムは、ブロック単位で自己相関行列(とWiener-Hopfの式の右辺のb)を更新していた。この論文ではサンプル単位で更新するアルゴリズムを提案する。
  • R,bをブロック単位で求めて更新する方法と、逐次的に忘却係数をかけて更新する手法の性能を比較。

難点(というか、新規性が生まれそうなところ)は、そのままNGSAには突っ込めないところか。この論文では二乗誤差最小基準で議論している、すなわちWiener-Hopf解を求めようとしている。勾配はWiener-Hopf解とのズレベクトルで定義される。NGSA(SA)の目的関数はなんだ?

論文のノーテーションに合わせ、実装を整理しつつも実験。でもやっぱ傾向は変わらんよ。SAと同等家それ以下。 気になるのは、NGSA(SA)の目的関数に合わせたことをしなければならないという点。Wiener-Hopf解を解く実装だとパフォーマンスは良いのか?まずはそこから切り込んで調べる。