ホップフィールドネットワークの動作を詳しく見ていきましょう。 このネットワークの動作は3つの段階に分けることができます。
- 結合荷重を割り当てる
- 未知パターンで初期化する
- 収束するまで繰り返す
まず、1つめの結合荷重の割り当てですが、 これは前のようにランダムな値を割り当てるのではなく ネットワークのエネルギーが最小になるような結合荷重 をここで決めてしまうということなのです。
したがって学習はしないことになりますが、 この段階で出力したいパターンをすべて記憶させることができます。 ただし、正しく記憶できるパターン数は(ニューロンユニット数×0.15)程度です。
では、実際にどのように結合荷重を決めるかというと、
![]()
ここで、Xisはs番めのパターンのi番目のユニットの値です。 前に説明した特徴がここでわかりますね。1つは結合が対象であること。 添字のi、jをいれかえても同じ値になることがわかります。 もう1つは自分自身への結合が0であることです。
なぜ、これだけでパターンを記憶できるかは、また少し後で説明します。 ここではこのように決められた結合荷重はネットワークのエネルギーを最小化できること を覚えておきましょう。
このようにしてM個のパターンを記憶させることができたら、次の段階へ進みます。 次は未知パターンでユニットを初期化します。つまりネットワークに入力を与える操作です。
![]()
これで、ニューロンユニットμiに初期値を与えることができました。 ここまでできればあとはネットワークを動作させればよいのです。 自分以外のユニットからの入力を得て、ネット値を求め、階段関数に通せばよいのですね。
![]()
このようにして、ネットワークが安定するまで状態変化を繰り返します。 ユニットの出力は1度に1つだけ更新されることに注意しましょう。
実際にどのように動作するか次のシミュレーションでみてましょう。