私の研究は連想記憶の高次元化が中心で、Hopfield Network またはその亜種を高次元化して使います。Hopfield Network の主な用途は最適化問題と連想記憶です。Hopfield Network の高次元化は連想記憶では成功していますが、最適化問題では成功した例を知りません。Hopfield Network の解説は他に多く見つかると思いますので、ここでは高次元化に向けてのポイントに焦点を当てます。また、今回触れるのは Hopfield Network の構造のみで連想記憶には触れません。
Hopfield Network の基礎理論
Hopfield Network はニューロンとその間を繋ぐ結合荷重から構成されます。各ニューロンは \( \pm 1 \) のいずれかの状態を取ります。\( N \)個のニューロンがあり、\( x_i \) で \(i\) 番目のニューロンを表す。また、ニューロンの状態も \( x_i \) と記す。\(x_j\) から \(x_i\) への結合荷重を \( w_{ij} \) で表す。Hopfield Network には結合に対称性制約 \( w_{ij}=w_{ji} \) が課されます。このため、\( w_{ij} \) を \( x_i – x_j \) 間の結合と呼んでも良いことになります。\( i=j \) の場合は自己結合を表すが、自己結合はないものとする。すなわち \( w_{ii} = 0 \) となります。対称性制約のおかげで、Hopfield Network は収束性(安定状態に到達すること)が保証されます。
Hopfield Network の動作を定義します。あるニューロン1つを選び、これをあるルールで更新します。\( x_k \) が選ばれたとしましょう。\( x_k \) への入力和を \( \displaystyle S_k = \sum_{l=1}^N w_{kl} x_l \) で定義します。これは、\( x_l \) の情報を \(x_k\) への結合荷重 \( w_{kl} \) で増幅して伝えていると解釈できます。\( x_k \) は入力和 \( S_k \) を受け取り、次の活性化関数を使って状態を更新します。
\( \begin{eqnarray}
f(S_k) &=&
\left\{
\begin{array}{ll}
+1 & (S_k>0) \\
-1 & (S_k<0) \\
\end{array}
\right.
\end{eqnarray} \)
\( S_k = 0 \) の場合は元の状態を維持するものとします。\(x_k\) の更新後の状態を \( x_k’ \) とすると \( x_k’ S_k > 0 \) となります。この操作によって状態が変更されることもあるし、変更されないこともあります。繰り返していくと、いずれ全く変化しなくなる、すなわち収束することが Hopfield Network の利点です。収束性を示すためにエネルギーが導入されます。\( \vec{x} = (x_1,x_2,\cdots,x_N) \) とし、状態ベクトルと呼ぶことにします。エネルギーは次の式で定義されます。
\( \begin{eqnarray}
E(\vec{x}) &=& – \frac{1}{2}\sum_{i,j} x_i w_{ij} x_j
\end{eqnarray} \)
和の前についている \(-\) 符号は更新の度にエネルギーが減少するようにするためで、物理学の習慣に合わせたものです。\(-\) 符号が無くてもエネルギーが増大するだけで、証明には差し支えありません。\( \frac{1}{2} \) は計算するときに係数が消えるようにするためで、これも本質的な意味はありません。どの \( x_k \) を選んでも \(x_k\) が変化しないのなら、既にその状態ベクトルは安定していると言えます。Hopfield Network の状態数は \( 2^N \) 通りです。状態に変更がある度にエネルギーが減少するならば、無限に状態の変更は生じませんので、いつかはエネルギーが極小値に到達して安定状態となります。\( x_k \) に状態変更があったとすると、新しい状態は \( x_k’=-x_k \) となります。 更新があったのは \(x_k\) だけですので、更新の前後で入力和 \(S_k\) に変化はありません。したがって、\( x_k’ S_k > 0,\) \(x_k S_k = -x_k’ S_k < 0 \) となることに注意しましょう。\( \vec{x},\vec{x}’\) をそれぞれ Hopfield Network の更新前、更新後の状態とします。\( \vec{x} \) と \(\vec{x}’\) の違いは \(k\) 番目の要素のみです。\( \Delta E = E(\vec{x}’) \,-\, E(\vec{x}) < 0 \) を示せば、Hopfield Network が安定状態に到達することが証明されます。\( E(\vec{x}) \) と \( E(\vec{x}’) \) の違いは \(x_k\) の部分だけですので、エネルギー差を計算する上で異なる部分だけを残せばよいことになります。
\( \begin{eqnarray}
\Delta E &=&
-\, \frac{1}{2} \sum_{l=1}^N x_k’ w_{kl} x_l
\,-\, \frac{1}{2}\sum_{l=1}^N x_l w_{lk} x_k’ \\
&&
\,+\, \frac{1}{2} \sum_{l=1}^N x_k w_{kl} x_l
\,+\, \frac{1}{2}\sum_{l=1}^N x_l w_{lk} x_k
\end{eqnarray} \)
\( w_{kl} =w_{lk} \) に注意すると、次のようになります。
\( \begin{eqnarray}
\Delta E &=&
-\, \sum_{l=1}^N x_k’ w_{kl} x_l
+ \sum_{l=1}^N x_k w_{kl} x_l \\
&=&
-\, x_k’ \sum_{l=1}^N w_{kl} x_l
+ x_k \sum_{l=1}^N w_{kl} x_l \\
&=& -x_k’ S_k + x_k S_k < 0
\end{eqnarray} \) \\
これで Hopfield Network が安定状態に達することが証明されました。
Hopfield Network の高次元化に向けて
上記の手順を書き換えることで Hopfield Network の高次元化を実現できます。高次元化のためにどのように書き換えれば良いかを意識しながら、Hopfield Network の理論を検証しましょう。以下、古典的な Hopfield Network を実Hopfield Network と呼びます。まず、高次元化とは何かということを考えましょう。それはニューロンの入出力を拡張することです。最初のモデルは実数から複素数への拡張でした。一般的には \(n\) 次元ベクトルと見なせる集合を考えれば良いでしょう。集合と書きましたが、ここでは積が定義されている代数系をイメージしておきましょう。複素数の場合は積が定義された2次元ベクトルになります。実Hopfield Network の活性化関数の出力は2値でしたが、高次元の場合は有限個の値を選びます。複素 Hopfield Network の場合は単位円周上に等間隔に値を選びますが、これは応用上の理由で、理論構成上では有限個の値であれば十分です。連続値も可能でしょうが、構成は難しくなります。活性化関数の出力値の集合を \( V = \{v_1, v_2, \cdots, v_r \} \) としましょう。実Hopfield Network は2値のため出力値を \(\pm 1\) から選びますが、高次元ではより多くの値から出力値を選ばなければなりません。実Hopfield Network は \( x_k S_k \) が正になるように \( x_k \) を更新しています。\( x_k S_k \) を1次元の内積と解釈し、双線型実数値関数 \( <x,y> \) を考えて一般化します。Hopfield Network の場合は \( <x,y>=xy \) となります。Hopfield Network の更新則を入力和 \( \displaystyle S_k = \sum_{j=1}^N w_{kj} x_j\) に対して \( <x_k’,S_k>=x_k’ S_k \) を最大化するように \( \pm 1 \) から \(x_k’\) を選んでいると解釈して、高次元化では \(V\) から \( <x_k’,S_k’> \) を最大化するように \(x_k’\) を選ぶよう定義します。活性化関数を数式で表せば、\( f(S) = \mathop{\rm arg~max}\limits_{v\in V} <v,S> \) となります。
エネルギーは \( \displaystyle E(\vec{x}) = – \frac{1}{2} \sum_{i} <x_i,S_i> \) と書き直せます。\( <x,y> \) を定めるとエネルギーが決まるとも言えます。活性化関数は \( <x_i,S_i> \) の最大化です。エネルギーはネットワーク全体としての最大化の度合いを表すことを意図されています。\(x_k\) が更新されて \( x_k’ \) となるときのエネルギーの変化 \( \Delta E \) を考えましょう。変更のあった項だけを考慮すればよいので、次のようになります。
\( \begin{eqnarray}
\Delta E
&=& \frac{1}{2}\left( <x_k , S_k> – < x_k’, S_k> \right) \\[1mm]
& & \quad + \frac{1}{2}\sum_{i\neq k} \left( <x_i,w_{ik}x_k> – <x_i,w_{ik}x_k’> \right)
\end{eqnarray} \)
第1項は活性化関数の定義から負になります。 問題は第2項で、負になるように結合荷重を制限しなければなりません。\( <x_i,w_{ik}x_k> = <x_k,w_{ki}x_i> \) とできれば負になります。実際、次のように計算すれば負と分かります。
\( \begin{eqnarray}
& & \sum_{i\neq k} \left( <x_i,w_{ik}x_k> – <x_i,w_{ik}x_k’> \right) \\
&=& \sum_{i\neq k} \left( <x_k,w_{ik}x_i> – <x_k’,w_{ik}x_i> \right) \\
&=& \left( <x_k,\sum_{i\neq k} w_{ik}x_i> – <x_k’, \sum_{i\neq k}w_{ik}x_i> \right) \\
&=& \left( <x_k,S_k> – <x_k’, S_k> \right) \\
\end{eqnarray} \)
実Hopfield Network の場合は、\( w_{ik}=w_{ki} \) より \( <x_i,w_{ik}x_k> = x_iw_{ik}x_k = x_kw_{ki}x_i = <x_k,w_{ki}x_i> \) なので、条件を満たします。結合荷重の制限については、ヘブ則を上手く定義できるような制限を考えると見つかることがしばしばあります。今回は学習については扱いませんのでヘブ則自体は解説しませんが、考え方だけ述べておきます。\(x_i \) を \(x_j \) にするためには何を掛けると良いかという視点で考え、\( x_j = w_{ji} x_i \) となる \( w_{ji} \) を求めると \( w_{ji} = x_j x_i \) となります。同様に\( x_i = w_{ij} x_j \) となる \( w_{ij} \) を求めると \( w_{ij} = x_i x_j = w_{ji}\) となります。得られた関係から \( w_{ij} = w_{ji} \) が結合荷重の制限の有力な候補となります。
おわりに
Hopfield Network の構成を高次元化に向けての視点で概観しました。次回は具体例を使って理解を深めます。