Hopfield Network 複素数値化の例

前回は Hopfield Network を高次元化に向けての視点を交えながら構成しました。今回は具体例として複素数値化を見ていきます。

複素 Hopfield Network の文献

参考として複素 Hopfield Network に関する文献をあげます。Jankowski らが書いた次の論文が良く参照されています。

S. Jankowski, A. Lozowski, J. M. Zurada: “Complex-valued multistate neural associative memory” IEEE Transactions on neural networks, Vol.7, No.6, pp.1491-1496 (1996)

オープンアクセスではないと思っていましたが、検索すると pdf ファイルが見つかるようです。見つからない場合のために、私のオープンアクセスの関連論文も掲載しておきます。

M. Kitahara, M. Kobayashi: “Projection Rule for Complex-Valued Associative Memory with Large Constant Terms”, Nonlinear Theory and Its Applications, Vol.3, No.3, pp.426-435 (2012)
M. Kobayashi: “Fast Recall for Complex-Valued Hopfield Neural Networks with Projection Rules”, Computational Intelligence and Neuroscience, Vol.2017, Article ID 4894278, 6 pages (2017)

既存の論文は天下りにモデルを構成していることが多いです。ここでは、どうやって高次元化の発想を得るための考え方に基づいて解説していきます。

複素 Hopfield Network の構成

実 Hopfield Network のニューロンは \( x_j \) などと表現されましたが、複素 Hopfield Network では \( z_j = x_j + y_j i \) と表されることが多いようです。虚数単位に \(i\) を使うことから、添え字に \(i\) を使うことも避けられます。まず、活性化関数の出力値の集合を決めなければなりません。単位円周上の等分点 \( \displaystyle V=\left\{ v_k = \exp \left( \frac{2k\pi i}{K}\right) \right\}_{k=0}^{K-1} \) を取ります。これらは絶対値が1になります。この場合、\(K\) 個の値を取ることができます。\(K\) を resolution factor と言います。

結合荷重の制限を前回のようにヘブ則の考え方に基づいて決めます。\( z_j = w_{jk} z_k \) として \(w_{jk} \) を求めます。\( z_k \in V \) より \( |z_k|^2 = z_k \overline{z_k} = 1 \) だから \( w_{jk} = z_j \overline{z_k} \) が得られます。\( z_k = w_{kj} z_j \) からは \( w_{kj} = z_k \overline{z_j} \) が得られます。両者には複素共役の関係 \(w_{jk}=\overline{w_{kj}} \) があり、これを結合荷重の制限として採用します。

次に、\( <z,z’> \) を定義します。複素数を2次元ベクトルと見て内積で定義します。複素数を使った式では \( <z,z’> = \mathrm{Re} \left( \overline{z}z’ \right) \) と表されます。\( z_j \) への入力和を \( \displaystyle S_j = \sum_{k=1}^{N} w_{jk} z_k \) と表します。このとき、活性化関数は \( \displaystyle f(S) = \mathop{\rm arg~max}\limits_{v \in V} <v,S> = \mathop{\rm arg~max}\limits_{v \in V} \,\mathrm{Re} \left( \overline{v}S \right) \) と定義されます。これは2次元ベクトルとしての内積の最大化でもあり、複素平面上で最も近い点を選んでいるとも理解できます。エネルギーを計算してみましょう。

\( \begin{eqnarray}
E(\vec{z})
&=& -\frac{1}{2} \sum_{j=1}^N <z_j,S_j> \\
&=& -\frac{1}{2} \sum_{j=1}^N \mathrm{Re} \left( \overline{z_j} \sum_{k=1}^N w_{jk} z_k \right) \\
&=& -\frac{1}{2} \mathrm{Re} \left( \sum_{j,k} \overline{z_j} w_{jk} z_k \right) \\
\end{eqnarray} \)

実は \( \mathrm{Re} () \) の中身は実数のため、\( \displaystyle E(\vec{z}) = -\frac{1}{2} \sum_{j,k} \overline{z_j} w_{jk} z_k \) と表されることが多いです。しかし、モデルに修正を加えると \( \mathrm{Re} () \) が必要になることもあるため、省略された形のみしか知らないと応用が利かなくなることもあります。中身が実数であることを確認しておきましょう。

\( \begin{eqnarray}
\overline{\sum_{j,k} \overline{z_j} w_{jk} z_k}
&=& \sum_{j,k} z_j \overline{w_{jk}} \overline{z_k} \\
&=& \sum_{j,k} \overline{z_k} w_{kj} z_j
\end{eqnarray} \)

前回の議論から \( <z_j,w_{jk}z_k> = <z_k,w_{kj}z_j> \) が成立すれば、複素 Hopfield Network は収束します。実際に確認します。

\( \begin{eqnarray}
<z_j,w_{jk}z_k>
&=& \mathrm{Re}\left( \overline{z_j} w_{jk} z_k\right)
= \mathrm{Re}\left( z_j \overline{w_{jk}} \overline{z_k} \right)
= \mathrm{Re}\left( \overline{z_k} w_{kj} z_j \right) \\
&=& <z_k,w_{kj}z_j>
\end{eqnarray} \)

論文ではこのような方法ではなく、直接エネルギーの減少を証明して安定性を保証しています。

高次元化の意義

複素数値化は Hopfield Network の多値化という点では大成功と言えるでしょう。複素数値化以前に多値化の試みはあったようですが、複素 Hopfield Network が決定版という感じの扱いになっているように感じます。ただし、私の立場では決定版ではないと思っています。さて、新しい高次元化モデルを作ることにどれだけの意味があるでしょうか。多値化以外に何か大きな変化がなければ、新しいモデルが1つ追加されただけで価値は限定的でしょう。とはいえ、それなりの新規性は認められるべきだと思います。個々の高次元モデルには固有の性質があるでしょうから、それを研究するというのは面白いと思います。面白いだけではモデルの優劣を議論することにはなりません。私は高次元Hopfield Network を連想記憶に適用しています。連想記憶では雑音除去が求められます。その評価値によってモデルの優劣が議論されます。連想記憶として優秀性を示すことができれば、価値は高まると考えられます。

仮に大きな進展でなかったとしても、新規の結果がでたら是非発表して欲しいと思います。私の研究での大きな成功は、他の人の小さな結果に支えられているのです。ある研究者は論文で複素 Hopfield Network のある性質を指摘しました。それは些細な指摘でしたが、重大な問題をはらんでいました。それには世界中の誰も気づいていなかったようです。別の研究者はある高次元モデルを提案しました。それは単に高次元化の一例を示したに過ぎずませんでした。私は提案されたモデルが複素Hopfield Network の問題を解決することに気付き、大成功を収めました。これは2人の研究者が発表しておいてくれたからであって、自分で見つけるのは難しかったでしょう。もっとも、大成功とは言っても、私の知名度が低すぎてほとんど注目されませんでした。