9. 深層学習#

深層学習 とは多層のニューラルネットを用いる機械学習モデルのことである。

人工的なニューラルネット (artificial neural network)は、人間の脳におけるニューロンのシナプスを介した情報伝達網 (biological neural network)を模したモデルとして1950年代から研究されていた。

多層のニューラルネットの考え方を最初に提唱したのは、当時NHKの放送技術研究所の研究員であった福島邦彦 が提案した ネオコグニトロン (neocognitron) であると言われている。驚くべきことに、その論文は1980年に出版されている [30]

これは2024年にノーベル物理学賞を獲得したJeffery Hintonの代表研究である誤差逆伝搬の論文[31] (1986年発表) や、John HopfieldのHopfieldネットワークの論文[32] (1982年発表)よりも前である。

ただし、ネオコグニトロンが提案された1980年代は、ニューラルネットワークの持つ多数のパラメータを上手く最適化する手法がなく、その時代には今で言う深層ニューラルネットの実現は難しいと考えられていた。事実、当時のニューラルネットは入力層、隠れ層、出力層の三層から成るニューラルネットが主流であった。

しかし、2010年代に入ると、それまで下火だったニューラルネットが再び注目を集めることになる。

それまで細々と続けられていたニューラルネットワークの研究の中で、パラメータの過学習や、最適化時の勾配消失といった問題が徐々に解決されるとともに、GPUを用いた汎用計算であるGPGPU (General Purpose Computing on GPU)により並列計算の効率が大幅に上昇するなど、ニューラルネットワークを取り巻く環境が徐々に変化してくる。

ImageNetと呼ばれる大規模画像データセットの識別チャレンジであるILSVRC (ImageNet Large Scale Visual Recognition Challenge)において、トロント大学のGeoffrey Hintonらの研究チームが、AlexNet (筆頭著者のfirst nameから)と呼ばれるニューラルネットを用いて優勝する [33]

AlexNetはエラー率わずか17.0%を達成したが、その性能は2位チームのエラー率26.2%を大幅に上回るものであった。ちなみに、この時に2位に入賞したチーム(東京大学の研究グループ)が用いた手法はSIFT, Fisherベクトル, サポートベクトルマシンを組み合わせたものであった。

この優勝を皮切りに、2013年の大会ではオックスフォード大学のチームがVGGというネットワークで2位に入り、以後、2014年はGoogleのチームが GoogLeNet というネットワークで2位、2015年はMicrosoftのチームが ResNet というネットワークで優勝した。

すると、画像認識の分野では深層学習がさかんに研究されるようになり、その応用が生成モデルや強化学習など、様々な分野に広がって現在に至る。本節では、画像の認識と生成における深層学習の基礎について順を追って見ていこう。

参考資料

  • 『ディジタル画像処理 改訂第二版』 P.293 第13章 深層学習による画像認識と生成

  • 『深層学習』 編: 神嶌 敏弘, 著: 麻生 英樹ら

9.1. ニューラルネット#

本節の冒頭で述べた通り、ニューラルネットは生物の脳神経系に着想を得た計算モデルである。

生物の脳内では複数のニューロンがシナプスで結合されており、ニューロンはシナプスを介して他のニューロンと情報をやり取りしている。ニューロンは、他のニューロンからの入力信号がある閾値を超えると、活動電位と呼ばれる信号を発生させる。この活動電位は、他のニューロンに伝達され、次のニューロンの活動を引き起こす。

この活動を計算機で模倣したものが ニューラルネットワーク (artificial neural network)である。通常、生物のニューロンは多くの別のニューロンと結合していて、その結合網は複雑なグラフ構造となっているが、これを計算機上で模倣しようとすると処理が複雑になりすぎてしまう恐れがある。

そのため、現代につながるニューラルネットでは、ニューロンを層状に配置し、隣接する層と層の間での情報伝達を考える 階層的ニューラルネット を用いるのが一般的である。

9.1.1. 階層型ニューラルネット#

ここでは単純な階層型のニューラルネットとして、入力層、隠れ層、出力層の3つの層を持つモデルを考えよう。

各層のニューロンは自分が発火しているのかしていないのかを表す0か1かの数値を持っている。これを数学的に表すなら、入力層、隠れ層、出力層のそれぞれがもつ情報をベクトル \(\mathbf{x} \in \{ 0, 1 \}^{N_1}\), \(\mathbf{h} \in \{ 0, 1 \}^{N_2}\), \(\mathbf{y} \in \{ 0, 1 \}^{N_3}\) で表すことになる (\(N_1\), \(N_2\), \(N_3\)はそれぞれの層のニューロン数)。

今、とある層のニューロンが次の層のニューロン全てに接続されているとすれば、そのニューロン間の接続の強さを行列で表すことができる。すなわち、入力層から隠れ層への接続の強さは \(\mathbf{W}_{1} \in \mathbb{R}^{N_2 \times N_1}\)、隠れ層から出力層への接続の強さは \(\mathbf{W}_{2} \in \mathbb{R}^{N_3 \times N_2}\) のように表すことができる。

情報を受け取った各ニューロンは、受け取った値が、あるしきい値 (例えば0.5)を超えていたら1、そうでなければ0を取るような活性化される。従って、しきい値処理を行う関数を

\[\begin{split} \sigma(x) = \begin{cases} 0 & (x < 0.5) \\ 1 & (x \geq 0.5) \end{cases} \end{split}\]

のように書くことにすると、隠れ層の各ニューロンの発火状態は、入力層のニューロンの発火状態を用いて次の式で書き表せる。

\[ \mathbf{h} = \sigma(\mathbf{W}_{1} \mathbf{x}) \]

同様に、出力層のニューロンの発火状態は、隠れ層のニューロンの発火状態を用いて次の式で書き表せる。

\[ \mathbf{y} = \sigma(\mathbf{W}_{2} \mathbf{h}) \]

このように入力から出力に向かって情報を順々に伝達する操作を フィードフォワード (feedforward)と呼ぶ。

機械学習モデルとしてのニューラルネットは、訓練データセット上で定義された入力 \(\mathbf{x}\) に対して、それにふさわしい出力 \(\mathbf{y}\) を返すように訓練される。従って、この3層のニューラルネットでは \(\mathbf{W}_{1}\), \(\mathbf{W}_{2}\)の2つの行列を訓練データに合うように最適化すれば良い。

9.1.2. 誤差逆伝播法#

誤差逆伝搬法 (backpropagation) [31] は、階層型ニューラルネットを効率的に訓練するためのテクニックの一つである。

この方法では、不連続なしきい値処理を行っていた活性化関数 \(\sigma\) を連続的な関数に置き換える。しきい値処理を滑らかな関数で置き換えたシグモイド関数

\[ \sigma(x) = \frac{1}{1 + e^{-x}} \]

を用いると、活性化関数が微分可能になる。

すると、出力層の発火状態 \(\mathbf{y}\) を、入力層の発火状態に関する連続的な関数として表すことができるようになる。具体的には、シグモイド関数 \(\sigma\) を用いて、次の関係式が得られる。

\[ \mathbf{y} = \sigma(\mathbf{W}_{2} \sigma(\mathbf{W}_{1} \mathbf{x})) \]

すると、出力 \(\mathbf{y}\) を入力や隠れ層の状態、あるいは重み行列 \(\mathbf{W}_{1}\), \(\mathbf{W}_{2}\) に関して微分できるようになる。例えば、出力 \(\mathbf{y}\) を重み行列 \(\mathbf{W}_{2}\) に関して微分すると、次のような式が得られる。

(9.1)#\[\begin{split} \begin{align*} \frac{\partial \mathbf{y}}{\partial \mathbf{W}_{2}} &= \frac{\partial \sigma(\mathbf{W}_{2} \sigma(\mathbf{W}_{1} \mathbf{x}))}{\partial \mathbf{W}_{2}} \\ &= \sigma'(\mathbf{W}_{2} \sigma(\mathbf{W}_{1} \mathbf{x})) \sigma(\mathbf{W}_{1} \mathbf{x})^\top \\ &= \sigma'(\mathbf{W}_{2} \mathbf{h}) \mathbf{h}^\top \end{align*} \end{split}\]

同様にして、出力 \(\mathbf{y}\) を重み行列 \(\mathbf{W}_{1}\) に関して微分すると、次のような式が得られる。

(9.2)#\[\begin{split} \begin{align*} \frac{\partial \mathbf{y}}{\partial \mathbf{W}_{1}} &= \frac{\partial \sigma(\mathbf{W}_{2} \sigma(\mathbf{W}_{1} \mathbf{x}))}{\partial \mathbf{W}_{1}} \\ &= \sigma'(\mathbf{W}_{2} \sigma(\mathbf{W}_{1} \mathbf{x})) \frac{\partial \sigma(\mathbf{W}_{1} \mathbf{x})}{\partial \mathbf{W}_{1}} \\ &= \sigma'(\mathbf{W}_{2} \mathbf{h}) \sigma'(\mathbf{W}_{1} \mathbf{x}) \mathbf{x}^\top \\ &= \sigma'(\mathbf{W}_{2} \mathbf{h}) \sigma'(\mathbf{W}_{1} \mathbf{x}) \mathbf{x}^\top \end{align*} \end{split}\]

ここで大事なことは、(9.1)(9.2)は一部の項 (\(\sigma'(\mathbf{W}_{2} \mathbf{h})\))が共通しているという点である。

実は、階層型ニューラルネットの入力に近い方の層の変数による微分は、出力に近い方の変数による微分の値を用いて、出力に近い方から順に計算できる。これは、ニューラルネットが複数の関数の合成となっているためで、合成関数の微分の 連鎖律 (chain rule)が利用できるためである。

この連鎖律を利用して、出力に近い方の層から順に微分を計算していく手法を 誤差逆伝播法 と呼ぶ。

まとめ: ニューラルネット

  • ニューラルネットは元々、生物の脳神経系に着想を得た計算モデルであった

  • 現在は複数の層を持つ階層型ニューラルネットが主流である

  • ニューラルネットのパラメータの最適化は誤差逆伝搬法を用いて効率化できる

9.2. 深層学習への歩み#

ニューラルネットに関する研究において、今日の深層学習に大きな影響を与えたものはいくつもあるが、その中でも特に重要なものとして、2024年にノーベル物理学賞を受賞したJohn Hopfieldの Hopfieldネットワーク [32]、Geoffrey Hintonの 制限Boltzmannマシン (Restricted Boltzmann Machine, RBM) [34] について紹介しよう。

これら2つの技術は、ニューラルネットに与えられた複数の情報を記憶させる 連想記憶 のための手法である。考えてみると、ものごとの認識や生成というのは、人間の場合も何らかの過去の記憶を頼りにしていることが多い。その意味で、これらの2つの研究が提案した連想記憶の技術は、今日の深層学習モデルが行う認識や生成の基礎であるとも言える。

9.2.1. Hopfieldネットワーク#

Hopfieldネットワークは、1982年にJohn Hopfield氏が提唱した、連想記憶 (associative memory)のためのニューラルネットである。

Hopfieldネットワークは、複数のニューロンを持ち、全てのニューロンがその他の全てのニューロンと結合している。各ニューロンは自分以外のニューロンに情報を伝達して、次の状態へと遷移する。

この時、Hopfieldネットワークの各ニューロンは、生物のニューロンにおける学習則の一つである Hebb則 (Hebbian rule)に着想を得た情報の伝達を行う。

Hebb則とは、シナプスにおいて情報を発出する側の前細胞と、情報を受け取る側の後細胞の間での結合の強化に関する学習則である。具体的には次のようなものである。

とある前細胞Aが後細胞Bに情報を伝達し、結果として後細胞Bが発火した場合、前細胞Aと後細胞Bの間の結合が強化される。

Hebb則を数学的に表現すると、\(n\)個の前細胞の発火状態 \(\mathbf{x} \in \{ 0, 1 \}^n\) と、\(m\)個の後細胞の発火状態 \(\mathbf{y} \in \{ 0, 1 \}^m\) の間で、情報の伝達を表す行列 \(\mathbf{W} \in \mathbb{R}^{m \times n}\) が次のように変化する。

(9.3)#\[ \frac{\partial \mathbf{W}}{\partial t} = \mathbf{y} \mathbf{x}^\top \]

一方で、Hopfieldネットワークには前細胞や後細胞などの区別はなく、(9.3)を簡易化した次のような式を用いる。

\[ \frac{\partial \mathbf{W}}{\partial t} = \mathbf{x} \mathbf{x}^\top \]

ただし、Hopfieldネットワークで扱う発火状態は-1か+1のいずれかの値をとる (つまり \(\mathbf{x} \in \{ -1, +1 \}^n\)) 。また、各ニューロンは自分自身には情報伝達をしないので、 \(\mathbf{W}\) の対角成分は常に0であるとする。

Hopfieldネットワークは複数の-1と+1からなるパターンを記憶することができ、そのパターンに似たノイズを含む入力を与えると、ニューロンの発火状態が記憶したパターンに収束するという性質を持つ。

実際に、Hopfieldネットワークに0, 1, 2の数字を模した5×5のパターンを記憶させ、その後、ノイズ付きの入力を与えて得られた画像を以下に示す。

../_images/ac915e3b0136736dfa8d3b4a24a99c9a9729052861e864e7beadca59e39d434f.png

図 9.1 Hopfieldネットワークによる数字の想起結果#

このように記憶するデータの数が比較的少数で、なおかつノイズの量が少ない場合については、Hopfieldネットワークが正しくパターンを記憶できていることが分かる。

9.2.2. 制限Boltzmannマシン (RBM)#

制限Boltzmannマシン (Restricted Boltzmann Machine, RBM) は、1986年にGeoffrey Hinton氏が提唱した、確率的な連想記憶モデルであり、Hopfieldネットワークを確率的な表現を用いて拡張したものと位置づけられる。

RBMの前身であるBoltzmannマシンは、Hopfieldネットワークと同様に、全てのニューロンが他の全てのニューロンと結合しているニューラルネットであった。一方で、「制限」Boltzmannマシンのニューラルネットは、可視層 (visible layer)と隠れ層 (hidden layer)の2つの層を持ち、可視層と隠れ層のニューロンは互いに結合したような階層的ニューラルネットになっている。

今、RBMの可視層が持つニューロンの状態を \(\mathbf{x} \in \{ 0, 1 \}^{N_1}\)、隠れ層が持つニューロンの状態を \(\mathbf{h} \in \{ 0, 1 \}^{N_2}\) と表す。この際、ニューロンの状態を-1か+1かで表していたHopfieldネットワークと異なり、ニューロンの状態が0か1かで表されていることに注意してほしい。

RBMは可視層で情報を受け取ると、それを重み行列 \(\mathbf{W} \in \mathbb{R}^{N_2 \times N_1}\) とバイアスベクトル \(\mathbf{c} \in \mathbb{R}^{N_2}\) に基づいて用いて隠れ層に伝達する。

(9.4)#\[ \mathbf{h} = \sigma(\mathbf{W} \mathbf{x} + \mathbf{c}) \]

RBMは、Hopfieldネットワークと異なり、隠れ層に伝達された情報が、シグモイド関数 \(\sigma\) を使って確率的に発火するようなモデルになっている。そのため、隠れ層に伝達された情報は0から1の間の実数値で、各ニューロンの発火確率を表す。

隠れ層のニューロンは、さらにその情報を可視層に伝達する。重み行列 \(\mathbf{W}\) が再利用され、バイアスベクトルとしては別の \(\mathbf{b} \in \mathbb{R}^{N_1}\) を用いる。

(9.5)#\[ \mathbf{y} = \sigma(\mathbf{W}^\top \mathbf{h} + \mathbf{b}) \]

可視層ではシグモイド関数を用いて各ニューロンの発火確率が計算される。最終的に、この発火確率が0.5より大きければ、そのニューロンが発火しているとみなして出力を得る。

RBMは連想記憶のモデルであるので、入力された画像がパラメータ \(\Theta = \{ \mathbf{W}\), \(\mathbf{b}\), \(\mathbf{c} \}\) によって再現されることを期待している。

この際、ある入力画像 \(\mathbf{v}\) に対して、RBMは次の同次分布を考える。

(9.6)#\[\begin{split} \begin{gather*} p(\mathbf{v}, \mathbf{h}) = \frac{1}{Z(\Theta)} \exp\left(-E(\mathbf{v}, \mathbf{h} \mid \Theta)\right) \\ E(\mathbf{v}, \mathbf{h} \mid \Theta) = -\mathbf{v}^\top \mathbf{W} \mathbf{h} - \mathbf{b}^\top \mathbf{v} - \mathbf{c}^\top \mathbf{h} \end{gather*} \end{split}\]

ただし、\(Z(\Theta)\)\(p(\mathbf{v}, \mathbf{h} \mid \Theta)\) を正規化するための規格化定数で

(9.7)#\[ Z(\Theta) = \sum_{\mathbf{v}, \mathbf{h}} \exp\left(- E(\mathbf{v}, \mathbf{h} \mid \Theta)\right) \]

とする。

この確率密度関数の定義には \(\mathbf{v}\) 同士または \(\mathbf{h}\) 同士の積は存在せず、これはRBMの構造において、可視層と隠れ層の間でだけ結合が存在することを示している。

このことから、一度、可視層が固定されれば、隠れ層のニューロン同士は独立に発火状態が決まるため、事後分布 \(p(\mathbf{h} \mid \mathbf{v}, \Theta)\) は次のように書ける。

\[ p(\mathbf{h} \mid \mathbf{v}, \Theta) = \prod_{i=1}^{N_2} p(h_i \mid \mathbf{v}, \Theta) = \prod_{i=1}^{N_2} \sigma\left( \sum_{j=1}^{N_1} W_{ij} v_j + c_i \right) \]

同様に、事後分布 \(p(\mathbf{v} \mid \mathbf{h}, \Theta)\) も次のように書ける。

\[ p(\mathbf{v} \mid \mathbf{h}, \Theta) = \prod_{i=1}^{N_1} p(v_i \mid \mathbf{h}, \Theta) = \prod_{i=1}^{N_1} \sigma\left( \sum_{j=1}^{N_2} W_{ji} h_j + b_i \right) \]

RBMでは、パラメータ \(\Theta = \{ \mathbf{W}, \mathbf{b}, \mathbf{c} \}\) に関する出力画像 \(\mathbf{v}\) の事後確率 \(p(\mathbf{v} \mid \Theta)\) を考え、この事後確率が真の確率密度分布 \(q(\mathbf{v})\) に近づくように、パラメータ \(\Theta\) する問題を考える。

ここで、確率密度分布同士の近さを図るために、次のKulback-Leiblerダイバージェンス (KLダイバージェンス)を導入する。

(9.8)#\[\begin{split} \begin{align*} D_\text{KL}\left(q(\mathbf{v}) \mid\mid p(\mathbf{v} \mid \Theta) \right) &= \sum_{\mathbf{v}} q(\mathbf{v}) \log \frac{q(\mathbf{v})}{p(\mathbf{v} \mid \Theta)} \\ &= \mathbb{E}_{\mathbf{v} \sim q(\mathbf{v})}\left[ \log q(\mathbf{v})\right] - \mathbb{E}_{\mathbf{v} \sim q(\mathbf{v})} \left[\log p(\mathbf{v} \mid \Theta) \right] \end{align*} \end{split}\]

ここで、最適化するパラメータ \(W_{ij}\), \(b_i\), \(c_i\) のいずれかを表す変数として \(\theta\) を使い、(9.8)\(\theta\) で微分する。 (9.8)の第1項はパラメータ \(\theta\) に依存しないので、次のように書ける。

\[ \frac{\partial D_\text{KL}\left(q(\mathbf{v}) \mid\mid p(\mathbf{v} \mid \Theta) \right)}{\partial \theta} = - \mathbb{E}_{\mathbf{v} \sim q(\mathbf{v})}\left[ \frac{\partial \log p(\mathbf{v} \mid \Theta)}{\partial \theta} \right] \]

これに (9.6) を代入して式を整理したい。まず、 (9.6) を周辺化して変数 \(\mathbf{h}\) を消去する。

(9.9)#\[ p(\mathbf{v} \mid \Theta) = \sum_{\mathbf{h}} p(\mathbf{v}, \mathbf{h}) = \frac{1}{Z(\Theta)} \sum_{\mathbf{h}} \exp\left( -E(\mathbf{v}, \mathbf{h} \mid \Theta) \right) \]

(9.8)に、(9.9)(9.7)を代入すると、次の式が得られる。

(9.10)#\[\begin{split} \begin{align*} \frac{\partial D_\text{KL}\left(q(\mathbf{v}) \mid\mid p(\mathbf{v} \mid \Theta) \right)}{\partial \theta} &= - \mathbb{E}_{\mathbf{v} \sim q(\mathbf{v})}\left[ \frac{1}{\sum_{\mathbf{h}'} \exp\left( -E(\mathbf{v}, \mathbf{h}' \mid \Theta) \right)} \sum_{\mathbf{h}} \frac{\partial}{\partial\theta} \exp\left(-E(\mathbf{v}, \mathbf{h} \mid \Theta)\right) \right] \\ & \quad+ \sum_{\mathbf{v}, \mathbf{h}} \frac{\partial}{\partial \theta} \exp\left( - E(\mathbf{v}, \mathbf{h} \mid \Theta) \right) \\ &= \mathbb{E}_{\mathbf{v} \sim q(\mathbf{v})} \left[ \sum_{\mathbf{h}} \frac{\exp\left(-E(\mathbf{v}, \mathbf{h} \mid \Theta)\right)}{\sum_{\mathbf{h}'} \exp\left( -E(\mathbf{v}, \mathbf{h}') \right)} \frac{\partial E(\mathbf{v}, \mathbf{h})}{\partial \theta} \right] \\ & \quad- \sum_{\mathbf{v}, \mathbf{h}} \frac{\exp \left( -E(\mathbf{v}, \mathbf{h} \mid \Theta) \right)}{\sum_{\mathbf{v}', \mathbf{h}'} \exp\left( -E(\mathbf{v}', \mathbf{h}') \right)} \frac{\partial E(\mathbf{v}, \mathbf{h})}{\partial \theta} \\ &= \mathbb{E}_{\mathbf{v} \sim q(\mathbf{v}),~\mathbf{h} \sim p(\mathbf{h} \mid \mathbf{v}, \Theta)} \left[ \frac{\partial E(\mathbf{v}, \mathbf{h} \mid \Theta)}{\partial\Theta} \right] - \mathbb{E}_{\mathbf{v},~\mathbf{h} \sim p(\mathbf{v}, \mathbf{h} \mid \Theta)} \left[ \frac{\partial E(\mathbf{v}, \mathbf{h} \mid \Theta)}{\partial\Theta} \right] \end{align*} \end{split}\]

この式のようにKLダイバージェンスのパラメータ \(\theta\)に関する勾配が求まったら、あとは最急降下法の要領でパラメータを更新すればよいのだが、ここで一つ問題がある。それは第2項の期待値を解析的にも数値的にも計算することが困難、という点である。

この点を少し詳しく見ていこう。

まず、第1項は訓練データに含まれる画像を \(\mathbf{v}\) とすれば、\(q(\mathbf{v})\) は訓練データの分布そのものなので問題ない。また \(p(\mathbf{h} \mid \mathbf{v}, \Theta)\) についても、パラメータ \(\Theta\) が与えられれば、(9.4) を用いて計算できる。

従って、これらのサンプルに感する期待値は、訓練データからのサンプルを用いて計算可能である。

一方で、第2項の期待値計算のために用いる \(p(\mathbf{v}, \mathbf{h} \mid \Theta)\) を評価するには、任意の \(\mathbf{h}\) を考える必要があるため、この確率に関する期待値を求めるのは実質的に不可能である。

ここで、(9.6)\(p(\mathbf{v}, \mathbf{h} \mid \Theta)\) の定義に話を戻そう。前述の通り、この定義では、\(\mathbf{v}\) 同士、または \(\mathbf{h}\) 同士の結合は存在せず、(9.4)(9.5) を用いて 確率密度分布 \(p(\mathbf{h} \mid \mathbf{v}, \Theta)\)\(p(\mathbf{v} \mid \mathbf{h}, \Theta)\) に従うサンプルを得ることはできる。

このようなケースでは、Gibbsサンプリングと呼ばれる手法をもちいて、 \(p(\mathbf{v}, \mathbf{h} \mid \Theta)\) に従うサンプルを近似的に取得することができる。Gibbsサンプリングの詳細については割愛するが、以下の操作によって、\(p(\mathbf{v}, \mathbf{h} \mid \Theta)\) に従うサンプルを得ることができる。

  1. 可視層のニューロンの状態を \(\mathbf{v}\) として与える。

  2. (9.4) を用いて、隠れ層のニューロンの状態 \(\mathbf{h}\) を計算する。

  3. (9.5) を用いて、可視層のニューロンの状態 \(\mathbf{y}\) を計算する。

  4. \(\mathbf{y}\) の値を \(\mathbf{v}\) として2.に戻る。

  5. ある回数だけ3.と4.を繰り返す。

このようにして得られた \(\mathbf{v}\)\(\mathbf{h}\) の組み合わせは、\(p(\mathbf{v}, \mathbf{h} \mid \Theta)\) に従うサンプルとなるので、これを用いて(9.10)の第2項の期待値を近似的に計算すれば良さそうだ。

通常、Gibbsサンプリングによって十分な数のサンプルを取得して(9.10)の第2項の期待値を求める必要がありそうだが、RBMではこのサンプリングを少ない回数 \(k\) 回だけ行って近似する。

このようにして得られたサンプルを用いた勾配の近似法を コントラストダイバージェンス法 (Contrastive Divergence, CD) と呼ぶ。興味深いことに、RBMの文脈では \(k = 1\) でも十分に良い学習が行えることが分かっている。

制限Boltzmannマシンに、先ほどと同様に0-9の数字を模した5×5のパターンを記憶させてみた結果が以下である。

以下の結果では、上の行にノイズ付の入力画像を、下の行に制限Boltzmannマシンによる出力画像を示した。

../_images/c40c9f39aa8281b72d62e8f6ef61eec1e327eb29fe1d22e455182d0bf20b4829.png

図 9.2 RBMによる画像の再構成結果#

今回はスペースの都合上、学習した画像は示していないが、RBMが学習したパターンを完璧に再現できていることを付け加えておく。

これら、HopfieldネットワークやRBMの考え方が基礎となり、深層Boltzmannマシン (Deep Boltzmann Machine, DBM) や深層信念ネットワーク (Deep Belief Network, DBN) といった、より深い階層を持つニューラルネットの研究が行われ、今日の深層学習へと繋がっていく。

まとめ: 深層学習への歩み

  • Hopfieldネットワークは、Hebb則に着想を得た連想記憶モデルである

  • RBMは可視層と隠れ層からなり、その間の情報伝達を確率的に表現した連想記憶モデルである

  • HopfieldネットワークやRBMは連想記憶のための古典的手法で、今日の深層学習の基礎を築いた

9.3. 深層学習モデルと画像認識#

ここまでの流れのなかで発展した深層学習だが、初期の深層学習モデルはどのような構造だったのかを見ていこう。

本項ではまず、画像認識を主として提案された深層学習モデルについて見ていく (ただし、その用途を画像認識に限っているわけではない)。

9.3.1. LeNet-5#

LeNet-5 は1998年にYann LeCunらが手書き数字認識のために開発した5層の階層的ニューラルネットである。

LeNet-5は複数の 畳み込み層プーリング層 を持ち、最後に全結合層を持つという今日の畳み込みニューラルネット (CNN)の典型的な構造を持つ。

しかし、この当時はプーリング層として平均プーリング (現在は最大プーリングが一般的)、活性化関数に双曲線余接 (tanh)関数 (現在はReLUが一般的)を使っているなど、今日の一般的なニューラルネットと異なる部分も多かった。

LeNet-5

図 9.3 LeNet-5の構造 (c) CC BY-SA 4.0 Wikipedia Commons#

LeNet-5の構造で興味深いのは、最後の全結合層が完全な全結合ではなく、ニューロン間の結合の一部が断ち切られている点である。

この構造は今日で言うところのドロップアウトと似た考え方であり、過学習を防ぐために一部のニューロンの結合を制限しているのだと捉えられる。

9.3.2. AlexNet#

AlexNetは、2012年にILSVRCで優勝した深層学習モデルである [33]。AlexNetは、LeNet-5を改良したもので、以下のような特徴を持つ。

  • 5層の畳み込み層と3層の全結合層からなる (LeNet-5より層の数が多い)

  • 活性化関数にReLUを採用

  • 過学習を抑制するためにドロップアウトを採用

LeNet5から10年以上の時を経て提案されたAlexNetは、これらの現在では一般的になっている多くの特徴を階層型ニューラルネットに取り込んでいる。

特に注目すべきは、これまでシグモイド関数は双曲線余接関数が一般的であった活性化関数に ReLU (rectified linear unit)を採用した点である。

ReLUは、入力が0以下のときは0を出力し、入力が0より大きいときはそのまま出力するという単純な関数であるが、シグモイド関数を用いる場合に問題であった 勾配消失 を防ぐことができる。

シグモイド関数は、入力の値の絶対値が大きい場合にその微分の値がほとんど0になる。数学的には、それほど問題には思えないかもしれないが、有限の解像度でしか数値を表現できないコンピュータにとっては、この小さな差が致命的なのである。すなわち、誤差逆伝播の過程において、シグモイド関数の微分が何度も掛け合わされると、最終的に勾配がほとんど0になってしまい、パラメータの更新が行われなくなってしまうのである。

一方で、ReLUの微分は言うまでもなく0か1のいずれかであるため、勾配消失の問題は起こらない。これにより、AlexNetは、より深い階層を持つニューラルネットの学習に成功した。

9.3.3. より大規模な畳み込みニューラルネット#

AlexNet以降、VGG-16/19やGoogLeNet (Inception v3), ResNetなど、様々な深層学習モデルが提案された。

VGG-16/19 は、Visual Geometry Group (VGG)というオックスフォード大学の研究グループが提案したニューラルネットで、画像認識の性能改善のために、どのような構造が重要なのかを検討した結果を反映したものである。

VGGの研究では、AlexNetに用いられたLocal Response Normalization (LRN)が多層のニューラルネットでは、あまり効果がないことや、畳み込み層の数を増やせば増やすほど認識精度が向上することなどを示した。

しかし、19層からなるVGG-19よりも層を増やすと、性能が頭打ちになり、時には性能が低下することも分かった。そこで GoogLeNet では、層を枝分かれさせて、異なるサイズの畳み込みそうで特徴を抽出するInceptionモジュールを導入した。これによりGoogLeNetは22層のニューラルネットの学習を可能にした [35]

さらに、Microsoftの研究チームが発表したResNetは、残差学習と呼ばれる機構を用いて、実に50層以上の深いニューラルネットの学習に成功した [36]

こうして、ニューラルネットは様々な工夫を得ながら層の数を増やすことで性能の向上を続けた。

9.3.4. Vision Transformer (ViT)#

Vision Transformer (ViT)は、それまで自然言語処理の分野で広く用いられていたTransformerと呼ばれるニューラルネットワークを画像向けに改良したモデルである [37]

ViTは、入力の画像を小さなパッチに分割し、各パッチからCNN等を用いて何らかの特徴ベクトルを抽出する。

最初の論文で提案されたViTは、画像を16×16のタイルに区切って、合計256個の画像パッチから特徴ベクトルを抽出しているのだが、各画像パッチをCNNに通さずに、単なる全結合層によって特徴ベクトルに変換している。

その後、抽出された特徴ベクトルを1つの配列上に並べて、Transformerに入力する。この際、オリジナルのTransformerと同様に、 位置エンコーディング (positional encoding) と呼ばれる手法を用いて、画像パッチの位置の情報を追加情報としてTransformerに与える。

その後、Transformerは、自己注意機構 (self attention module)を用いて、各パッチの特徴のうち、画像の認識に有効な特徴を強化するような操作を繰り返し行う。

このような操作を行うと、多層のCNNに比べて少ない層を持つTransformerであっても、十分な画像認識性能が得られることが実験的に示されている。

まとめ: 深層学習と画像認識

  • 画像認識における深層学習モデルはLeNet-5を始めとして、畳み込みニューラルネットが主流となってきた

  • AlexNet以降、徐々にニューラルネットの層の数を増やすことで認識精度を高めてきた

  • 今日では、Vision Transformer (ViT)のように、CNN以外のニューラルネットにも注目が集まっている