ホップフィールドネットワークは相互結合型ネットワークの代表的なものです。 1980年代の前半にJohn Hopfieldという人が提案しました。 ネットワーク構成は次の図のようになっています。
![]()
見た目は少し異なって見えますが、同じことをあらわしています。 今までの階層型ネットワークと比べて、ネットワーク構成が大きく違うことはわかりますか?
相互結合型ネットワークには階層型ネットワークのように、 入力層、出力層というものがありません。 すべてのユニットは自分自身をのぞく他のすべてのユニットと結合しています。
ホップフィールドネットワークはある入力に対して、ネットワークが出力値を出し、 それをもとに学習していくという階層型ネットワークとはまったく異なり、ネッ トワークのエネルギーを最小になるように状態変化を繰り返すというもので 学習もしません。
すこし分かりにくいですね。 ホップフィールドネットワークの特徴と動作を見ながら考えてみましょう。 ホップフィールドネットワークはパーセプトロンといくつかの類似点を持っています。 それは、
- ユニットの値は2値である。
- 階段関数によって出力を決定する。
ということです。つまり、今までと同様にネット値を求める操作を行い、「0」か「1」 の出力を求めるということですね。
ここで出力値は「0」か「1」としましたが、ホップフィールドは少し後に発表した 論文で「1」と「−1」の2値のほうが数学的に見通しが良くなるとして、こちらの 2値を使っています。
この後の説明でも、「1」と「−1」の2値を用いることにしましょう。ホップフィールドネットワークには結合荷重も当然あり、次のような特徴を持っています。
- 自分自身への結合荷重は0である。
- 結合荷重の値は対象である。
1つめのことについては、自分自身への結合がないので結合荷重が0ということです。
![]()
2つめの「結合荷重の値は対象である」とはどういことでしょう。 まず左の図をみてみましょう。 ユニットi、jがあれば、iからjへの結合とjからiへの結合があります。 「結合荷重の値は対象である」ということは、 この2つの結合荷重が等しいということなのです。 つまり、左の図で同じ色になっている結合荷重は同じ値を持っているということです。
ホップフィールドネットワークでは、この「結合荷重は対象である」ということは とても重要で、これが少しでもくずれると動作が不安定になってしまいます。
では、このネットワークに入力を与えるにはどうしたら良いのでしょうか。 ホップフィールドネットワークへの入力は、 すべてのニューロンユニットに初期値「1」か「−1」を与えることで行います。
そして、出力はホップフィールドネットワークの すべてのユニットの状態の集合を出力とします。
次に、3つめの特徴を紹介しましょう。
- ネットワークにエネルギー関数を導入する
これは、前の誤差関数と同じようなもので、 ネットワークのユニットの状態をもとに、エネルギーを計算し、 これが最小になるようにネットワークの状態が変化し、 安定したときがネットワークの出力ということになります。