見出し画像

言語AIの進化史⑪ホップフィールド・ネットワーク

前回は、隠れマルコフモデル(HMM)を解説しました。

HMMは、時間的な依存関係を状態遷移行列を使ってモデル化する仕組みです。例として、音声認識を取り上げました。その中で、HMMが各音素の時系列パターンを捉える方法を紹介しました。ただし、隠れ状態を予測するために混合ガウスモデル(GMM)が使われ、後には、深層ニューラルネットワーク(DNN)が使われるようになりました。

やがて、エンドツーエンド(End-to-end)で動作する音声認識モデルが登場します。すべてを統合されたニューラルネットワークで処理するものです。これによって、システムがシンプルになり処理速度が速くなりました。また、音声からテキストへの変換全体を直接的に最適化できるので学習効率も高くなりました。

このニューラルネットワークの部分では、再帰型ニューラルネットワーク(Recurrent Neural Network、RNN)が活躍しました。RNNは、時系列データシーケンスデータのモデリングのためのニューラルネットワークです。

ただし、RNNの発展は、音声認識での応用よりもずっと前に始まっています。

初期のRNNに影響を与えたモデルとして、ホップフィールド・ネットワーク(Hopfield Network)があります。ニューロンが相互接続する全結合型のニューラルネットワークとして提案されました。

今回は、このホップフィールド・ネットワークを紹介します。


ホップフィールド・ネットワーク

背景と動機

ホップフィールド・ネットワーク(Hopfield Network)は、1982年にジョン・ホップフィールド(John Joseph Hopfield)によって提案されたニューラルネットワークの一種です。

当時のニューラルネットワークでは、複雑なパターン認識が困難でしたが、ホップフィールドは物理学のエネルギー最小化の考え方を取り入れることで、与えられた部分的な入力から学習済みパターンを復元できる仕組みを作り出しました。

そこで登場するのが、連想記憶という概念です。

連想記憶とは

連想記憶(Associative memory)とは、不完全な情報を基に、学習済みの完全な情報を想起できる記憶モデルです。不完全な情報とは、部分的に欠損しているとか、ノイズがある画像などを指します。

つまり、与えられた不完全な入力パターンから、対応する完全なパターンを想起・復元する記憶システムです。

例えば、部分的に欠損した画像やノイズが含まれる画像を入力として与えると、ネットワークはその欠損部分を補い、記憶された元の完全な画像を出力します。

上段:ノイズ有り画像。下段:復元画像。(あくまでも連想記憶のイメージです)

このため、連想記憶システムは、元の「完全な情報」をあらかじめ学習し記憶しておきます。よって、人間の脳のように「一部の記憶から全体を思い出す」ことが可能です。

この記憶を司るのが全結合型のニューラルネットワークです。

全結合型のニューラルネットワーク

ホップフィールド・ネットワークでは、各ノード(ニューロン)が全ての他のノードと双方向結合(相互接続)されています。つまり、全結合型のニューラルネット枠です。

ホップフィールド・ネットワークは、無向グラフ。

よって、順伝播型ニューラルネットワーク(Feedforward Neural Network、FNN)とは違って、データの流れは全ての方向が可能です。

では、このネットワークのノードの値とノード間の関連性を数式で表現します。そうすることで、ネットワークの仕組みと学習方法が見えてきます。

ノードの値

画像のパターンなどをホップフィールド・ネットワークで表現すると、ノードの値が$${-1}$$ならピクセルが黒、$${+1}$$なら白としたりします。

例えば、$${s_1 = -1}$$や$${s_2 = +1}$$となります。

6ピクセル画像を6つのノードで表現する

上図では6つのノードがあり、これが画像を表現しているとすると、これらのノードは、6個のピクセルの値を表現していることになります。

例えば、2x3の画像として考えると、以下のピクセル値になっているとします。

-1, -1, +1,
+1, +1, -1

これをフラットにしたベクトルで表現すると以下になります(あとで使います)。

$$
\bm{s} = \begin{bmatrix}
s_1 \\
s_2 \\
s_3 \\
s_4 \\
s_5 \\
s_6
\end{bmatrix} = \begin{bmatrix}
-1 \\
-1 \\
+1 \\
+1 \\
+1 \\
-1
\end{bmatrix}
$$

次にノード間の関連性を表現します。

ノード間の関連性

ランダムな画像でなければ、画像の中のピクセル間には何らかの関係があります。

ある画像に直線が描かれている様子を想像してください。

直線がある画像のピクセル

直線の中のピクセルの値は同じ値になり、その周りのピクセルは異なる値になります。もちろん、線の色が白か黒かによって、ピクセルの値は違いますが、線の中は同じ色で、外は異なる色であることに変わりはありません。

このような、「同じ値になる」あるいは「異なる値になる」傾向は、ピクセル間の関係の強さであり、ノード間の重みとして数値として表現することができます。

例えば、重み$${w_{12}}$$は、ノード1とノード2の関連の強さです。

この値が大きいと、ノード1とノード2が同じ値になる傾向が強いことになります。つまり、$${s_1 = +1}$$と$${s_2 = +1}$$、あるいは、$${s_1 = -1}$$と$${s_2 = -1}$$になる傾向が強いわけです。

以下は、各ノード間の重みを図に描いたものです。

ノード間の重み

なお、$${w_{12}}$$は、ノード1からノード2への重みの意味ですが、その逆向きの重み$${w_{21}}$$は図に描きませんでした。なぜなら、両方は同じ関係の強さを意味し、$${w_{12} = w_{21}}$$と等しくなるからです。

このような人工ニューラルネットワークは、神経科学からの影響を受けています。そのため、ここでノードと呼んでいるものを人工ニューロンや単にニューロンと呼んだりします。また、ニューロン間の結合をシナプスと呼び、その結合の強度をシナプスの重みと呼ぶこともあります。

また、重み$${w_{12}}$$が、負の値だとノード1とノード2の値が反対になる傾向があることになります。つまり、「$${+1}$$と$${-1}$$」あるいは「$${-1}$$と$${+1}$$」のどちらかになりがちだということです。重み$${w_{12}}$$がより絶対値が大きな負の値になるほど、その関連性が強いことになります。

全ての関連性の重みを、重み行列$${W}$$として表現すると、以下になります。

$$
W = \begin{bmatrix}
  0 & w_{12} & w_{13} & w_{14} & w_{15} & w_{16} \\
  w_{21} & 0 & w_{23} & w_{24} & w_{25} & w_{26} \\
  w_{31} & w_{32} & 0 & w_{34} & w_{35} & w_{36} \\
  w_{41} & w_{42} & w_{43} & 0 & w_{45} & w_{46} \\
  w_{51} & w_{52} & w_{53} & w_{54} & 0 & w_{56} \\
  w_{61} & w_{62} & w_{63} & w_{64} & w_{65} & 0 \\
\end{bmatrix}
$$

前述したように、$${w_{ij} = w_{ji}}$$なので、重み行列は、対称行列になっています。なお、対角要素が0になっているのは、自己結合がないからです。

以上より、画像の特徴(パターン)は重み行列で表現できることが分かります。

パターンとの整合性

ある画像(ベクトル$${\bm{s}}$$)が、期待される画像パターン(重み行列$${W}$$)にどれほど合っているかを判断することを考えます。

$${w_{12}}$$が正の値の場合:ノード1とノード2が同じ値になる傾向があります。この傾向が強いほど、$${w_{12}}$$の値はより大きな正の値になるわけです。

また、ノード1とノード2が同じ値になるならば、$${s_1s_2}$$の値は正になります。よって、$${w_{12}s_1s_2}$$も正の値になります。これは、画像のパターンと実際の画像のピクセル値の間に整合性があることを意味します。

逆に、$${w_{12}s_1s_2}$$が負の値になる場合は、画像のパターンと実際の画像のピクセル値の間に整合性がないことを意味します。

$${w_{12}}$$が負の値の場合:ノード1とノード2が異なる値になる傾向があります。この傾向が強いほど、$${w_{12}}$$の値はより絶対値が大きな負の値になるわけです。

また、ノード1とノード2が異なる値になるならば、$${s_1s_2}$$の値は負になります。よって、$${w_{12}s_1s_2}$$が正の値になります。これも、画像のパターンと実際の画像のピクセル値の間に整合性があることを意味します。

逆に、$${w_{12}s_1s_2}$$が負の値になる場合は、画像のパターンと実際の画像のピクセル値の間に整合性がないことを意味します。

以上より、$${w_{12}}$$の正負に関わらず、$${w_{12}s_1s_2}$$の値によって、画像のパターンと実際の画像のピクセル値の間に整合性を判断することができます。

この整合性を全てのノード間で計算して足したものを考えます。

$$
\begin{align*}
\text{パターンとの整合性} &= w_{12}s_1s_2 + w_{13}s_1s_3 + w_{14}s_1s_4 + w_{15}s_1s_5 + w_{16}s_1s_6 \\
&\ + w_{23}s_2s_3 + w_{24}s_2s_4 + w_{25}s_2s_5 + w_{26}s_2s_6 \\
&\ + w_{34}s_3s_4 + w_{35}s_3s_5 + w_{36}s_3s_6 \\
&\ + w_{45}s_4s_5 + w_{46}s_4s_6 \\
&\ + w_{56}s_5s_6
\end{align*}
$$

これをより一般的にまとめて書くと以下になります。

$${\text{パターンとの整合性} = \dfrac{1}{2} \sum\limits_i \sum\limits_{j \neq i} w_{ij} s_i s_j}$$

$${\frac{1}{2}}$$があるのは、$${w_{ij} = w_{ji}}$$であり、二重に整合性をカウントしないようにするためです。また、$${\sum\limits_{j \neq i}}$$としているのは、自己結合がないことを明示するためです。

エネルギーの最小化

パターンの整合性の合計が大きいほど、実際の画像が画像のパターンに合っていることになります。これを最小化問題として扱うために、マイナスにしたものをエネルギー$${E}$$と呼ぶことにします。

$$
E = -\dfrac{1}{2} \sum\limits_i \sum\limits_{j \neq i} w_{ij} s_i s_j
$$

重み行列$${W}$$と画像ベクトル$${\bm{s}}$$を使ってまとめると、次のようになります。

$$
E = -\dfrac{1}{2} \bm{s}^\top W \bm{s} 
$$

ただし、$${w_{ii} = 0}$$としています。また、$${\bm{s}^\top}$$は、列ベクトル$${\bm{s}}$$を転置して行ベクトルにするという意味です。

このままだと抽象的なので、上記の具体例を使って展開すると以下になります。

$$
\begin{align*}
E &= -\dfrac{1}{2} \bm{s}^\top W \bm{s} \\
&= -\dfrac{1}{2} \begin{bmatrix}
s_1 \ s_2 \ s_3 \ s_4 \ s_5 \ s_6
\end{bmatrix} \begin{bmatrix}
  0 & w_{12} & w_{13} & w_{14} & w_{15} & w_{16} \\
  w_{21} & 0 & w_{23} & w_{24} & w_{25} & w_{26} \\
  w_{31} & w_{32} & 0 & w_{34} & w_{35} & w_{36} \\
  w_{41} & w_{42} & w_{43} & 0 & w_{45} & w_{46} \\
  w_{51} & w_{52} & w_{53} & w_{54} & 0 & w_{56} \\
  w_{61} & w_{62} & w_{63} & w_{64} & w_{65} & 0 \\
\end{bmatrix} \begin{bmatrix}
s_1 \\
s_2 \\
s_3 \\
s_4 \\
s_5 \\
s_6
\end{bmatrix} \\
&= -\dfrac{1}{2} \sum\limits_{i=1}^6 \sum\limits_{j=1}^6 w_{ij} s_i s_j
\end{align*}
$$

(対角成分$${w_{ii}}$$は全て0なので、$${j \neq i}$$は省略しました)

これが全結合型ニューラルネットワークの正体です。

次に、計算された重み行列を使って、不完全な入力画像から元の画像を復元してみましょう。

パターンの想起

例えば、次のようなノイズのある2x3の入力画像があるとします。

# 入力画像(初期状態)

-1, +1, +1,
+1, +1, -1

これは、先ほどの 2×3 ピクセルのパターンとほぼ一致していますが、一部のピクセル(上段中央のピクセル値)が異なっています。

# 元のパターン1

-1, -1, +1,
+1, +1, -1

つまり、ノイズのある入力画像と復元したい画像パターンがあるわけです。

ホップフィールド・ネットワークは、エネルギー最小化の過程を通じて、ノイズのある入力から元の画像パターンへと収束させます。

まず、入力画像(初期状態)のエネルギーを以下の関数を使って計算します。

$$
E = - \dfrac{1}{2} \sum\limits_{i=1}^N \sum\limits_{j=1}^N w_{ij} s_i s_j
$$

(具体例では、$${N=6}$$になります)

次に、このエネルギーを最小化するために、ネットワークは各ノードの値を更新していきます。更新には以下の式を使用します。

$$
s_i \leftarrow \text{sign}\left( \sum\limits_{j=1}^N w_{ij} s_j \right)
$$

ここで、符号関数$${\text{sign}(x)}$$は次のように定義されます。

$$
\begin{array}{ll}
\text{sign}(x) = +1 & \text{if } x > 0 \\[1ex]
\text{sign}(x) = -1 & \text{if } x < 0 \\[1ex]
\text{sign}(x) = \ \ \ 0 & \text{if } x = 0
\end{array}
$$

つまり、ノード$${i}$$の新しい値$${s_i}$$は、他のすべてのノード$${j}$$の値$${s_j}$$に結合強度$${w_{ij}}$$を掛け合わせた総和の符号に基づいて決定されます。総和が正であれば$${s_i}$$は$${+1}$$、負であれば$${-1}$$に更新されます。

直感的に言うと、他の多くのノードと正の相関がある場合、そのノードは他のノードたちが取っている値(+1 または -1)に近づこうとします。逆に、負の相関がある場合は、他のノードたちが取る値とは反対の値を取るように更新されます。

よって、あるノードは、周囲のノード全体の状態に応じて「同じ値を取る」か「逆の値を取る」かを決めるということです。

なお、ホップフィールド・ネットワークでは、$${x = 0}$$の場合、$${+1}$$または$${-1}$$のどちらかにランダムに更新することが多いです(そもそも画像のピクセル値は、$${+1}$$または$${-1}$$しか想定されていないので)。

このような処理を繰り返し、各ノードの値を更新していくことで、ネットワーク全体のエネルギーを最小化し、最終的には元のパターンに収束させます。

この例では簡単な画像でしたが、より複雑で不完全な入力の場合は、元のパターンと一致するとは限りません。よって、実装にもよりますが、「エネルギーの変化がゼロになる」か「ノードの状態が変化しなくなる」などのの条件が満たされたら処理を停止します。

つまり、不完全な入力(ノイズがあるパターンや部分的な情報)を与えられた場合でも、記憶されたパターンを元に近い画像を復元することを目的としています。

次は、記憶したい画像ベクトルから画像パターンを学習する方法を解説します。

生物学的な学習手法

ヘッブ則の考え方

ホップフィールド・ネットワークの学習は、ヘッブ則(Hebbian Learning Rule)の考え方を利用します。

これは神経科学からの考え方で、ニューロン間の結合強度(シナプス重み)を調整する方法として、「一緒に発火するニューロン同士は結合強度を強くする」というルールです。

要するに、同じ刺激(入力)に対して、同じような反応をするニューロン同士の結合強度を強くすることで、似たようなパターンを持った入力に対して以前に経験したのと同じものと認識できるようになる、という原理です。

ヘッブ則の原理は、1949年にカナダの心理学者ドナルド・ヘッブ(Donald O. Hebb)によって提唱されました。

現在主流となっている誤差逆伝播法(バックプロパゲーション)では、誤差信号を逆方向に伝播させるメカニズムが、実際の脳内で観察されていません。その一方、ヘッブ則は、実際の脳内での神経可塑性のメカニズムと類似しており、生物学的に妥当性があると考えられています。

ヘッブ則は局所的な学習則であり、各ニューロンの活動のみに基づいて結合強度を調整します。

参考:https://en.wikipedia.org/wiki/Hebbian_theory

ヘッブ則による学習

ホップフィールド・ネットワークにおける、ヘッブ則に従った学習を解説します。

前提として、複数の画像パターンを学習することを念頭に置いています。よって、パターンを学習するための画像が$${P}$$個あるとします。

画像1, 画像2, ..., 画像P

この$${P}$$個の画像で代表されるパターンを認識できるように、ひとつの重み行列$${W}$$の係数$${w_{ij}}$$を調節します。

また、全ての画像は同じサイズであり、$${N}$$個のピクセルがあるとします(これはネットワーク内のノード数に対応)。

各画像を平坦化(フラット化)して、$${N}$$次元のベクトルとして定義します。例えば、パターン$${k}$$($${k=1, \ldots,P}$$)は次のようなベクトル$${\bm{s}^k}$$で表されます。

$$
\bm{s}^k = \begin{bmatrix}
s_1^k \\[1ex]
s_2^k \\[1ex]
\vdots \\[1ex]
s_N^k 
\end{bmatrix}
$$

ここで、各$${s_i^k}$$は、パターン$${k}$$におけるノード(ピクセル、ニューロン)$${i}$$の値を示します。値は$${−1}$$または$${+1}$$の二値を取ります。前述の例なら、黒を$${-1}$$、白を$${+1}$$となります。

これら全ての画像ベクトル($${\bm{s}^1, \ldots, \bm{s}^k, \ldots, \bm{s}^P}$$)のピクセル値を使って、重み行列の係数$${w_{ij}}$$を以下のように決めます。

$$
w_{ij} = \dfrac{1}{P} \sum\limits_{k=1}^P s_i^k s_j^k \quad (i \neq j)
$$

ここで、$${i = 1, \ldots, N}$$、$${j = 1, \ldots, N}$$です。また、自己結合を避けるために$${i \neq j}$$としています。$${i=j}$$の場合、$${w_{ii} = 0}$$になります。

つまり、各画像$${k}$$における異なるノードの値の積$${s_i^ks_j^k}$$を計算して、全ての画像に対してその平均を求めています。簡単に言うと、全ての画像パターンにおけるノード$${i}$$とノード$${j}$$の相関関係を重み$${w_{ij}}$$と設定しています。

これを行列とベクトルで表現すると、以下になります。

$$
\begin{align*}
W &= \dfrac{1}{P} \sum\limits_{k=1}^P \bm{s}^k {\bm{s}^k}^\top \\
&= \dfrac{1}{P} \sum\limits_{k=1}^P \begin{bmatrix}
s_1^k \\[1ex]
s_2^k \\[1ex]
\vdots \\[1ex]
s_N^k
\end{bmatrix} \begin{bmatrix}
s_1^k \ s_2^k \ \ldots \ s_N^k
\end{bmatrix} \quad \text{ただし、以下で対角成分を0とする} \\[2ex]
&=  \dfrac{1}{P} \sum\limits_{k=1}^P \begin{bmatrix}
0 & s_1^ks_2^k & s_1^ks_3^k & \cdots & s_1^ks_N^k \\[1ex]
s_2^ks_1^k & 0 & s_2^ks_3^k & \cdots & s_2^ks_N^k \\[1ex]
s_3^ks_1^k & s^k_3s_2^k & 0 & \cdots & s_3^ks_N^k \\[1ex]
\vdots & \vdots & \vdots & \ddots & \vdots \\[1ex]
s_N^ks_1^k & s_N^ks_2^k & s_N^ks_3^k & \cdots & 0
\end{bmatrix} \\[2ex]
&=  \begin{bmatrix}
0 & w_{12} & w_{13} & \cdots & w_{1N} \\[1ex]
w_{21} & 0 & w_{23} & \cdots & w_{2N} \\[1ex]
w_{31} & w_{32} & 0 & \cdots & w_{3N} \\[1ex]
\vdots & \vdots & \vdots & \ddots & \vdots \\[1ex]
w_{N1} & w_{N2} & w_{N3} & \cdots & 0
\end{bmatrix}
\end{align*}
$$

各要素$${w_{ij}}$$は、すべての画像パターンにおける$${s_i^ks_j^k}$$の積の平均値を表し、最終的に対称行列$${W}$$を構築しています。これにより、すべての画像パターンの相関を反映した重み行列が得られます。

ヘッブ則の計算は統計学でいう共分散の計算によく似ています。

ホップフィールド・ネットワークではニューロンの状態が$${+1}$$または$${-1}$$であり、平均もその範囲になります。仮に平均が0に近いとしたら、ヘッブ則は共分散的な重みを与えることになります。

ただし、常に平均が0とは限らないので共分散そのものとは言えませんが「共分散的なもの」と捉えるとイメージが湧きやすいでしょう。

具体的な計算例

簡単な例を使って説明します。

例えば、2つの画像パターン(パターン数$${P=2}$$)を学習させるとします。各画像は、3×3ピクセル(ノード数$${N=9}$$)です。

# パターン1

-1 -1 +1
+1 +1 -1
+1 -1 +1
# パターン2

+1 -1 +1
+1 -1 +1
-1 +1 -1

この二つは異なるパターンを持っています。ベクトルにすると以下になります。

$$
\bm{s}^1 = \begin{bmatrix}
-1 \\ -1 \\ +1 \\ +1 \\ +1 \\ -1 \\ +1 \\ -1 \\ +1
\end{bmatrix}, \quad \bm{s}^2 = \begin{bmatrix}
+1 \\ -1 \\ +1 \\ +1 \\ -1 \\ +1 \\ -1 \\ +1 \\ -1
\end{bmatrix}
$$

よって、重み行列は次のように計算されます。

$$
w_{ij} = \dfrac{1}{2} \sum\limits_{k=1}^2 s_i^k s_j^k = \dfrac{1}{2} \left(s_i^1 s_j^1 + s_i^2 s_j^2 \right) \quad \text{ただし、} i \neq j
$$

ここでの$${\frac{1}{2}}$$は、画像パターンが2つ($${P=2}$$)あるからです。各パターンからの$${s^k_i s^k_j}$$の平均をとっています。

例えば、ノード1とノード5に関する重み$${w_{15}}$$を計算してみます。

$$
w_{15} = \dfrac{1}{2} \left(s_1^1 s_5^1 + s_1^2 s_5^2 \right) = \dfrac{1}{2} \left[ (-1) \times (+1) + (+1) \times (-1) \right] = -1
$$

このような計算を異なるノードの組み合わせに対して行い、最終的に重み行列$${W}$$を構築します。

$$
W = \begin{bmatrix}
0 & w_{12} & w_{13} & \cdots & w_{19} \\
w_{21} & 0 & w_{23} & \cdots & w_{29} \\
w_{31} & w_{32} & 0 & \cdots & w_{39} \\
\vdots & \vdots & \vdots & \ddots & \vdots \\
w_{91} & w_{92} & w_{93} & \cdots & 0
\end{bmatrix}
$$

前述しましたが、自己結合を避けるために、対角要素$${w_{ii}}$$はすべて 0 になります。つまり、自己結合は行いません。

また、ホップフィールド・ネットワークの重み行列は対称行列($${w_{ij} = w_{ji}}$$)なので、計算する必要のあるノードの組み合わせ数は以下の通りです。

$$
\text{ノードの組み合わせの数} = \dfrac{N \times (N-1)}{2} = \dfrac{9 \times 8}{2} = 36
$$

次に、この重み行列を持って入力パターンを識別する手順を解説します。

複数画像からのパターン認識

ホップフィールド・ネットワークの学習では、ヘッブ則を利用して複数の画像パターンをひとつの重み行列に埋め込みました。このようにして構築されたひとつの重み行列を用いて、入力画像がどの画像パターンに対応するかを判定するには、以下の手順を行います。

  1. 不完全な入力画像

    • 入力画像パターンをノードの初期状態として設定します。

    • このとき、入力画像パターンは学習済みパターンと完全に一致していなくても構いません。つまり、ノイズや一部の欠損があってもよいです。

  2. 入力画像を更新する

    • 各ノードの値を、更新ルールに従って繰り返し更新します。

    • $${s_i \leftarrow \text{sign}\left( \sum\limits_{j=1}^N w_{ij} s_j \right)}$$

    • すべてのノードの値が変化しなくなるか、エネルギーが最小化された時点で更新を停止します。

  3. 出力パターンの取得

    • ノードの値が収束したときの画像が最終的な結果となります。

    • この結果として得られた画像を「出力パターン」と呼びます。

  4. 学習パターンと比較

    • 出力パターンと、学習で使用した各パターンを比較します。

    • エネルギーを使う手法:出力パターンと各パターンとのエネルギー値を計算し、最小となるパターンを選びます。

    • ハミング距離を使う手法:ハミング距離が最も小さいパターンを、入力画像に対応するパターンと判定します。

ハミング距離は、出力パターンと各パターンの間で、同じ位置で異なる値になっているのがいくつあるかを数えたものです。

以下のAとBでは、2つ違いがあるので、ハミング距離は2です。
A: +1, -1, +1, +1, +1, +1
B: +1, +1, +1, +1, -1, +1

参考:https://ja.wikipedia.org/wiki/ハミング距離

ホップフィールド・ネットワークの問題点

ここまで読んだ方ならお分かりの通り、ホップフィールド・ネットワークは連想記憶やパターン認識に効果を発揮する一方で、以下のような問題点があります。

記憶できるパターン数の制約

ホップフィールド・ネットワークが安定して記憶できるパターン数は、ノード数$${N}$$のおよそ 15% 程度です。例えば、ノード数が 100 の場合、記憶できるパターンは 15 個程度に制限されます。

パターンの記憶が曖昧になる

学習したパターン同士が似すぎていると、複数のパターンが混ざったような曖昧な記憶状態になります。この結果、ネットワークが正しいパターンに収束せず、誤ったパターンを出力することがあります。

一般化能力を獲得できない

ホップフィールド・ネットワークは、学習したパターンに基づいて記憶を想起することに特化しており、学習したことのないパターンには対応できません。そのため、学習パターンから大きく外れた入力に対しては、誤った結果を返すことになります。

局所的な最小値に陥りやすい

ノイズの多い入力パターンを与えると、学習済みパターンに収束せず、誤ったパターンに引き込まれてしまうことがあります。これは、エネルギーが真の最小値(グローバルミニマム)ではなく、途中の局所的な最小値(ローカルミニマム)に収束してしまい、そこから抜け出せなくなるためです。


要するに、異なる学習パターンは、異なる位置で異なる特徴を持つ(つまり、相関が低い)ように設計しなければ、パターン間の干渉や誤った収束、記憶の曖昧化といった問題が発生しやすくなります。

物理学的最適化の関連性

最後に、ホップフィールド・ネットワークと物理学との関連性について簡単に触れます。

ホップフィールド・ネットワークは、物理学の「エネルギー最小化」の概念を取り入れており、各ノードの状態をエネルギー関数として定義し、そのエネルギーを最小化することでパターンの復元や記憶を行います。この仕組みは、物理学の「イジング模型」(イジングモデル)と類似してます。また、イジング模型は組合せ最適化問題を解くためにも利用されています。

実際に、ホップフィールド・ネットワークも簡単な組合せ最適化問題を解くために使用することができますが、局所解に陥りやすいという課題があります。

これに対して、量子アニーリングも組合せ最適化問題を解くための手法であり、イジング模型を用いて効率的にグローバルな最小値を見つけることを目指しています。量子アニーリングは、量子力学的なトンネル効果を利用することで局所解を回避し、より低いエネルギー状態(グローバル解)を探索します。

とはいえ、量子アニーリングには量子ビットの数や安定性の制約があるため、現在は古典コンピュータを使った「量子インスパイアードなアルゴリズム」も開発され、より大規模な組合せ最適化問題への対応が進められています。

次回予告

ホップフィールド・ネットワークは、全結合によってニューロンが相互接続しています。これにより、不完全な入力画像の状態を繰り返し更新し、徐々に記憶したパターンに近づけていきます。

つまり、ネットワーク内部に状態が保持されており、一連の処理ステップを通してその状態を更新し、次のステップに渡していくことで情報を補完していくと捉えられます。

このような「状態を持って更新する仕組み」は、状態を持たず一方向に情報を伝える順伝播型ニューラルネットワーク(Feedforward Neural Network、FNN)とは大きく異なる特徴です。

再帰型ニューラルネットワーク(RNN)も、シーケンス処理を通して隠れ状態に情報を集約し、次のステップに渡すという点で、ホップフィールド・ネットワークと共通する性質を持っています。

ただし、ホップフィールド・ネットワークが全結合型である一方、RNNは入力順序に従い、情報が逐次伝達される構造を持っている点で異なります。

よって、次回は、RNNの仕組みを解説します。

お楽しみに!

いいなと思ったら応援しよう!