7.1. 畳み込みニューラルネットワーク(CNN)とは:全結合層から畳み込みへ

畳み込みニューラルネットワーク(CNN: Convolutional Neural Network)とは、画像のような空間構造をもつデータに対して、平行移動不変性と局所性という事前知識(帰納バイアス)を組み込むことで、パラメータ数を大幅に削減しながら効率よく特徴を抽出する深層学習アーキテクチャである。

ここまで扱ってきたモデルは、 表形式データを扱う場合には 依然として妥当な選択肢である。 表形式データとは、 行がデータ例に、列が特徴量に対応する データ形式を指す。 この種のデータでは、 求めたいパターンが特徴量間の相互作用を 含むと見込める一方で、 それらがどのように相互作用するかという構造を あらかじめ仮定しない。

場合によっては、 より洗練されたアーキテクチャを設計するための知識が 実際に不足していることもある。 そのようなときには、MLPが 最善の選択肢かもしれない。 しかし、高次元の知覚データに対しては、 このような構造をもたないネットワークは 扱いにくくなりがちである。

たとえば、猫と犬を見分けるという これまでの例に戻ろう。 十分に注意してデータを収集し、 100万画素の写真からなる注釈付きデータセットを 用意したとする。 すると、ネットワークへの各入力は 100万次元になる。 たとえこれを1000個の隠れ次元へと 強引に圧縮するとしても、 \(10^6 \times 10^3 = 10^9\) 個のパラメータをもつ 全結合層が必要になる。 大量のGPU、分散最適化の専門知識、 そして並外れた忍耐力がなければ、 このネットワークのパラメータを学習することは 現実的ではないかもしれない。

注意深い読者は、 100万画素もの解像度は不要ではないかと 反論するかもしれない。 しかし、10万画素で十分だとしても、 サイズ1000の隠れ層では、 画像のよい表現を学習するのに必要な 隠れユニット数を大きく過小評価している。 したがって、実用的なシステムでは 依然として数十億個のパラメータが必要になるだろう。 さらに、これほど多くのパラメータをもつ分類器を学習するには、 膨大なデータセットを収集しなければならないかもしれない。 それにもかかわらず、今日では人間もコンピュータも 猫と犬をかなりうまく見分けられる。 これは一見すると、こうした直感に反している。 その理由は、画像には 人間にも機械学習モデルにも利用できる 豊かな構造があるからである。 畳み込みニューラルネットワーク(CNN)は、 自然画像に存在する既知の構造の一部を活用するために 機械学習が取り入れた巧妙な方法の一つである。

7.1.1. 不変性

画像中の物体を検出したいとしよう。 物体を認識する方法は、 画像内のどこにその物体があるかという 正確な位置に過度に依存すべきではない、 と考えるのが自然である。 理想的には、システムはこの知識を活用すべきである。 豚は通常飛ばず、飛行機は通常泳がない。 それでも、画像の上部に豚が現れたとしても、 それを豚だと認識できるべきである。 ここでは、子どもの遊び「ウォーリーをさがせ」から いくらか着想を得られる (この遊び自体も、 図 7.1.1 に示すように 現実世界の多くの模倣を生み出してきた)。 このゲームでは、さまざまな活動であふれた 雑然とした場面がいくつも並ぶ。 ウォーリーは各場面のどこかに現れ、 たいていは意外な場所に隠れている。 目標は彼を見つけることである。 特徴的な服装をしているにもかかわらず、 注意をそらす要素が多いため、 驚くほど難しいことがある。 しかし、ウォーリーがどのように見えるかは、 ウォーリーがどこにいるかには依存しない。 画像全体をウォーリー検出器で走査し、 各パッチにスコアを割り当てて、 そのパッチにウォーリーが含まれる確率を表せる。 実際、多くの物体検出やセグメンテーションのアルゴリズムは この考え方に基づいている (Long et al., 2015)。 CNNは、この空間的不変性という考えを体系化し、 より少ないパラメータで有用な表現を学習するために これを利用する。

../_images/waldo-football.jpg

図 7.1.1 ウォーリーを見つけられるだろうか(画像提供: William Murphy (Infomatique))?

ここで、これらの直感をより具体化し、 コンピュータビジョンに適したニューラルネットワークアーキテクチャの設計を導く いくつかの要件を挙げよう。

  1. 最初の層では、画像内のどこに現れても、 同じパッチに対してネットワークは同様に反応すべきである。 この原理を平行移動不変性(あるいは平行移動等価性)と呼ぶ。

  2. ネットワークの最初の層は、画像の遠く離れた領域の内容にかかわらず、 局所領域に注目すべきである。これが局所性の原理である。 最終的には、これらの局所表現を集約して 画像全体に対する予測を行える。

  3. より深い層に進むにつれて、 自然界における高次視覚に似た形で、 画像のより長距離の特徴を捉えられるべきである。

これが数学的に何を意味するかを見ていこう。

7.1.2. MLPへの制約

まず、2次元画像 \(\mathbf{X}\) を入力とし、 その直後の隠れ表現 \(\mathbf{H}\) も同様に行列として表される (コード上では2次元テンソルである)MLPを考える。 ここで、\(\mathbf{X}\)\(\mathbf{H}\) は同じ形状をもつとする。 少し立ち止まって考えてみよう。 ここでは、入力だけでなく 隠れ表現にも空間構造があるとみなす。

\(\mathbf{X}\) の位置 \((i,j)\) にある画素と \(\mathbf{H}\) の位置 \((i,j)\) にある画素をそれぞれ \([\mathbf{X}]_{i, j}\)\([\mathbf{H}]_{i, j}\) で表す。 したがって、各隠れユニットが 各入力画素から入力を受け取るようにするには、 (これまでMLPで行ってきたように)重み行列を使う代わりに、 パラメータを4階の重みテンソル \(\mathsf{W}\) として表すことになる。 \(\mathbf{U}\) がバイアスを含むとすると、 全結合層は形式的には次のように書ける。

(7.1.1)\[\begin{split}\begin{aligned} \left[\mathbf{H}\right]_{i, j} &= [\mathbf{U}]_{i, j} + \sum_k \sum_l[\mathsf{W}]_{i, j, k, l} [\mathbf{X}]_{k, l}\\ &= [\mathbf{U}]_{i, j} + \sum_a \sum_b [\mathsf{V}]_{i, j, a, b} [\mathbf{X}]_{i+a, j+b}.\end{aligned}\end{split}\]

\(\mathsf{W}\) から \(\mathsf{V}\) への切り替えは、 現時点では単なる表記の変更にすぎない。 というのも、両者の4階テンソルの係数の間には 1対1対応があるからである。 添字 \((k, l)\)\(k = i+a\) および \(l = j+b\) となるように 付け替えただけである。 言い換えれば、 \([\mathsf{V}]_{i, j, a, b} = [\mathsf{W}]_{i, j, i+a, j+b}\) と置いている。 添字 \(a\)\(b\) は正負両方のオフセットを取り、 画像全体を覆う。 隠れ表現 \([\mathbf{H}]_{i, j}\) の任意の位置 \((i,j)\) に対して、 その値は、\((i, j)\) を中心とする \(\mathbf{X}\) の画素を \([\mathsf{V}]_{i, j, a, b}\) で重み付けして和を取ることで計算される。 先へ進む前に、このパラメータ化で 1層に必要なパラメータ総数を考えてみよう。 \(1000 \times 1000\) の画像(100万画素)が \(1000 \times 1000\) の隠れ表現へ写像されるとする。 この場合、\(10^{12}\) 個のパラメータが必要であり、 現在の計算機では到底扱えない。

7.1.2.1. 平行移動不変性

では、先に述べた第一の原理、 平行移動不変性 (Zhang et al., 1988) を適用しよう。 これは、入力 \(\mathbf{X}\) をシフトすると 隠れ表現 \(\mathbf{H}\) も 単に同じだけシフトすべきだという意味である。 これが成り立つのは、 \(\mathsf{V}\)\(\mathbf{U}\) が実際には \((i, j)\) に依存しない場合に限られる。 したがって、 \([\mathsf{V}]_{i, j, a, b} = [\mathbf{V}]_{a, b}\) かつ \(\mathbf{U}\) は定数、たとえば \(u\) になる。 その結果、\(\mathbf{H}\) の定義は次のように簡単になる。

(7.1.2)\[[\mathbf{H}]_{i, j} = u + \sum_a\sum_b [\mathbf{V}]_{a, b} [\mathbf{X}]_{i+a, j+b}.\]

畳み込みである。 実際には、位置 \((i, j)\) の近傍にある \((i+a, j+b)\) の画素を 係数 \([\mathbf{V}]_{a, b}\) で重み付けして、 \([\mathbf{H}]_{i, j}\) の値を得ている。 \([\mathbf{V}]_{a, b}\) は画像内の位置に依存しないため、 \([\mathsf{V}]_{i, j, a, b}\) に比べて 必要な係数ははるかに少ない。 したがって、必要なパラメータ数はもはや \(10^{12}\) ではなく、 はるかに現実的な \(4 \times 10^6\) になる。 それでもなお、\(a, b \in (-1000, 1000)\) への依存は残っている。 とはいえ、大きな前進である。 時間遅延ニューラルネットワーク(TDNN)は、 この考えを利用した初期の例の一つである (Waibel et al., 1989)

7.1.2.2. 局所性

次に、第二の原理である局所性を適用しよう。 先に動機づけたように、 位置 \((i, j)\) の周囲からあまり遠くまで見なくても、 \([\mathbf{H}]_{i, j}\) で何が起きているかを評価するのに 必要な情報は得られるはずだと考える。 これは、ある範囲 \(|a|> \Delta\) または \(|b| > \Delta\) の外側では、 \([\mathbf{V}]_{a, b} = 0\) とすべきことを意味する。 同値に、\([\mathbf{H}]_{i, j}\) は次のように書き直せる。

(7.1.3)\[[\mathbf{H}]_{i, j} = u + \sum_{a = -\Delta}^{\Delta} \sum_{b = -\Delta}^{\Delta} [\mathbf{V}]_{a, b} [\mathbf{X}]_{i+a, j+b}.\]

これにより、パラメータ数は \(4 \times 10^6\) から \(4 \Delta^2\) に減る。 ここで、\(\Delta\) は通常 10 より小さい。 このようにして、さらに4桁程度パラメータ数を削減できた。 (7.1.3) は、要するに畳み込み層である。 畳み込みニューラルネットワーク(CNN)は、 畳み込み層を含むニューラルネットワークの特別な一族である。 深層学習の研究コミュニティでは、 \(\mathbf{V}\)畳み込みカーネルフィルタ、あるいは単にその層の学習可能パラメータとしての 重みと呼ぶ。

以前は、画像処理ネットワークのたった1層を表すだけでも 数十億個のパラメータが必要だったかもしれないが、 今では通常、入力や隠れ表現の次元を変えずに、 数百個程度で済む。 この劇的なパラメータ削減の代償として、 特徴は平行移動不変になり、 各隠れ活性の値を決める際に 層は局所情報しか取り込めなくなる。 あらゆる学習は、帰納バイアスを課すことに依存している。 そのバイアスが現実と一致していれば、 少ないサンプルで学習でき、 未見データにもよく一般化するモデルが得られる。 しかしもちろん、そのバイアスが現実と一致しなければ、 たとえば画像が実際には平行移動不変でなかったなら、 モデルは訓練データに対してさえ うまく適合できないかもしれない。

この劇的なパラメータ削減は、最後の要件へとつながる。 すなわち、より深い層は画像のより大きく複雑な側面を表現すべきだということである。 これは、非線形性と畳み込み層を何度も交互に重ねることで実現できる。

7.1.3. 畳み込み

なぜ (7.1.3) が畳み込みと呼ばれるのかを、 簡単に復習しよう。 数学では、2つの関数 (Rudin, 1973)、 たとえば \(f, g: \mathbb{R}^d \to \mathbb{R}\) の間の畳み込みは次のように定義される。

(7.1.4)\[(f * g)(\mathbf{x}) = \int f(\mathbf{z}) g(\mathbf{x}-\mathbf{z}) d\mathbf{z}.\]

つまり、一方の関数を「反転」して \(\mathbf{x}\) だけ平行移動したときの、 \(f\)\(g\) の重なりを測っている。 離散的な対象を扱う場合には、積分は和に置き換わる。 たとえば、添字が \(\mathbb{Z}\) を走る 二乗和可能な無限次元ベクトルの集合に属するベクトルに対しては、 次の定義を得る。

(7.1.5)\[(f * g)(i) = \sum_a f(a) g(i-a).\]

2次元テンソルでは、\(f\) に対して添字 \((a, b)\)\(g\) に対して添字 \((i-a, j-b)\) を用いる対応する和になる。

(7.1.6)\[(f * g)(i, j) = \sum_a\sum_b f(a, b) g(i-a, j-b).\]

(7.1.3) に似ているが、1つ大きな違いがある。 \((i+a, j+b)\) を使う代わりに、差を使っているのである。 ただし、この違いは主として表記上のものにすぎない。 というのも、(7.1.3)(7.1.6) の間では いつでも記法を対応づけられるからである。 元の (7.1.3) の定義は、より正確には 相互相関を表している。 これについては次の節で改めて扱う。

7.1.4. チャネル

ウォーリー検出器に戻って、これがどのように見えるかを考えよう。 畳み込み層は、 図 7.1.2 に示すように、 所定の大きさの窓を取り出し、フィルタ \(\mathsf{V}\) に従って強度に重みを付ける。 すると、どこで「ウォーリーらしさ」が最も高いかに応じて、 隠れ層表現にピークが現れるようなモデルを学習したくなるかもしれない。

../_images/waldo-mask.jpg

図 7.1.2 ウォーリーを検出する(画像提供: William Murphy (Infomatique))。

この方法には1つ問題がある。 これまで、画像が3つのチャネル、 すなわち赤・緑・青から成ることを見落としていた。 要するに、画像は2次元の対象ではなく、 高さ・幅・チャネルで特徴づけられる3階テンソルであり、 たとえば \(1024 \times 1024 \times 3\) ピクセルの形状をもつ。 最初の2つの軸は空間的関係に関わるが、 3つ目の軸は各画素位置に多次元表現を割り当てるものとみなせる。 したがって、\(\mathsf{X}\)\([\mathsf{X}]_{i, j, k}\) として添字付けする。 畳み込みフィルタもそれに応じて適応しなければならない。 \([\mathbf{V}]_{a,b}\) の代わりに、今度は \([\mathsf{V}]_{a,b,c}\) を用いる。

さらに、入力が3階テンソルであるのと同様に、 隠れ表現も3階テンソル \(\mathsf{H}\) として定式化するのが 自然であることがわかる。 言い換えれば、各空間位置に対応する単一の隠れ表現ではなく、 各空間位置に対応する隠れ表現ベクトル全体を もちたいのである。 隠れ表現は、複数の2次元グリッドを 積み重ねたものと考えられる。 入力と同様に、これらはしばしばチャネルと呼ばれる。 また、各層が次の層のために学習された特徴の 空間化された集合を提供することから、 特徴マップとも呼ばれる。 直感的には、入力に近い浅い層では、 あるチャネルはエッジの認識に特化し、 別のチャネルはテクスチャの認識に特化する、と考えられる。

入力(\(\mathsf{X}\))と隠れ表現(\(\mathsf{H}\))の両方で複数チャネルを扱うために、 \(\mathsf{V}\) に4つ目の座標を追加できる: \([\mathsf{V}]_{a, b, c, d}\)。 すべてをまとめると、次のようになる。

(7.1.7)\[[\mathsf{H}]_{i,j,d} = \sum_{a = -\Delta}^{\Delta} \sum_{b = -\Delta}^{\Delta} \sum_c [\mathsf{V}]_{a, b, c, d} [\mathsf{X}]_{i+a, j+b, c},\]

ここで \(d\) は隠れ表現 \(\mathsf{H}\) における出力チャネルを表す。続く畳み込み層は、3階テンソル \(\mathsf{H}\) を入力として受け取る。 一般性のために、 (7.1.7) を 複数チャネルに対する畳み込み層の定義とみなし、 \(\mathsf{V}\) をその層のカーネルまたはフィルタとする。

まだ扱うべき操作は数多く残っている。 たとえば、すべての隠れ表現を どのように1つの出力へまとめるか、 画像のどこかにウォーリーがいるかどうかを どう判定するかを考える必要がある。 また、どのように効率よく計算するか、 複数層をどう組み合わせるか、 適切な活性化関数は何か、 そして実際に有効なネットワークを得るために どのような設計選択が妥当かも決めなければならない。 これらの問題については、本章の残りで扱う。

7.1.5. 要約と考察

この節では、畳み込みニューラルネットワークの構造を 第一原理から導いた。 これがCNNの発明に至った実際の経路だったかは不明だが、 少なくとも低いレベルでは、 画像処理やコンピュータビジョンのアルゴリズムが どのように動作すべきかについて妥当な原理を適用すると、 CNNが正しい選択であるとわかるのは興味深い。 特に、画像における平行移動不変性は、 画像のすべてのパッチを同じように扱うことを意味する。 局所性とは、対応する隠れ表現を計算するために 画素の小さな近傍だけを使うことを意味する。 CNNに関する最も初期の文献の一部は、 ネオコグニトロンという形で現れている (Fukushima, 1982)

推論の中で現れた第二の原理は、 ある仮定がモデルに成り立つ限り、 表現力を制限せずに関数クラスのパラメータ数を どのように減らすかということであった。 この制約の結果として複雑さが劇的に減少し、 計算的にも統計的にも実行不可能だった問題が 扱えるモデルへと変わった。

チャネルを追加することで、 局所性と平行移動不変性によって 畳み込みカーネルに課された制約のために失われた 複雑さの一部を取り戻せた。 赤・緑・青以外のチャネルを追加するのは ごく自然である。 特に農業や気象学で用いられる多くの衛星画像は、 数十から数百のチャネルをもち、 ハイパースペクトル画像を生成する。 すなわち、多くの異なる波長に関するデータを記録する。 以下では、畳み込みを効果的に用いて それが作用する画像の次元を操作する方法、 位置ベースの表現からチャネルベースの表現へ移る方法、 そして多数のカテゴリを効率よく扱う方法を見ていく。

7.1.6. 演習

  1. 畳み込みカーネルのサイズが \(\Delta = 0\) であると仮定する。 このとき、畳み込みカーネルが 各チャネル集合ごとに独立にMLPを実装することを示せ。 Network in Network アーキテクチャにつながる (Lin et al., 2013)

  2. 音声データはしばしば1次元の系列として表される。

    1. 音声に対して局所性と平行移動不変性を課したいのは、どのような場合だろうか。

    2. 音声に対する畳み込み演算を導出せよ。

    3. コンピュータビジョンと同じ道具で音声を扱えるだろうか。ヒント: スペクトログラムを使え。

  3. 平行移動不変性は、結局のところ良い考えではないかもしれない。なぜだろうか。例を挙げよ。

  4. 畳み込み層はテキストデータにも適用できると思うか? 言語ではどのような問題に直面するだろうか。

  5. 物体が画像の境界にあるとき、畳み込みでは何が起こるだろうか。

  6. 畳み込みが対称、すなわち \(f * g = g * f\) であることを証明せよ。