ゼロからAI理論を再構築する

ー 文系エンジニアがAIの内部構造をゼロから理解する記録 ー

畳み込みニューラルネットワーク(CNN):画像の構造を活かす

これまでの全結合ネットワークは、画像を1本の長いベクトルに変換してから処理していました。縦横の並びもピクセル同士の隣接関係もすべて捨てて、ただの数値の列として扱う。人間が画像を見るときは隣り合うピクセルの関係からエッジや形を読み取っているのに、全結合層はそれを無視しています。

畳み込みニューラルネットワーク(CNN)は、画像の空間的な構造を保ったまま特徴を抽出するモデルです。

畳み込み層:小さなフィルターをスライドさせる

CNNの基本は畳み込み層です。小さなフィルター(カーネル、たとえば3x3)を画像の上でスライドさせて、フィルターと重なった部分の要素積の和を計算します。

\[ y_{i,j} = \sum_{m} \sum_{n} X_{i+m, j+n} \cdot K_{m,n} \]

全結合層では全ピクセルに個別の重みが必要でしたが、畳み込みでは同じフィルターを画像全体に使い回します。パラメータ共有と呼ばれるこの仕組みで、パラメータ数が大幅に減る。さらに、同じフィルターを使い回すので、画像のどこに特徴があっても検出できます(並進不変性)。

たとえば「縦のエッジを検出するフィルター」が1つあれば、画像の左端でも右端でも同じように縦エッジを拾える。全結合層だと場所ごとに別々の重みでエッジ検出を覚え直す必要があるので、効率が全然違います。

プーリング層:情報をあえて間引く

畳み込みの後にはプーリング層が入ることが多いです。Max Poolingなら、たとえば2x2の領域内の最大値だけを取って残りは捨てます。

情報を捨てて何が嬉しいかというと、物体が数ピクセルずれただけで別物扱いされるのを防げる点です。位置のズレに鈍感になることで、「猫がどこにいても猫と判定する」頑健さが得られます。特徴マップのサイズも小さくなるので計算量が減るという副次的なメリットもあります。

層を重ねると受容野が広がる

CNNを深くすると、後ろの層のニューロンほど入力画像の広い範囲(受容野)を見るようになります。浅い層はエッジや色の変化のような局所的な特徴を捉え、深い層はそれらを組み合わせて目や鼻のようなパーツを認識し、さらに深い層で顔全体や物体を識別する。

前回の多層パーセプトロンの話で「層ごとに抽象度が上がる」と書きましたが、CNNではそれが空間的なスケールの変化としてはっきり見えます。この階層的な特徴抽出が、CNNの画像認識精度が高い理由です。

余談ですが、学習済みのCNNの各層が何を捉えているかを可視化する研究があって、実際に浅い層ではエッジ、深い層ではテクスチャや物体の一部が浮かび上がります。数式だけだと抽象的な話ですが、可視化を見ると「本当に階層的に特徴を捉えている」のが実感できます。

まとめ

CNNは画像の空間構造を壊さずに処理するモデルです。フィルターで局所特徴を抽出し、プーリングで位置ズレへの耐性を持たせ、層を重ねて受容野を広げていく。パラメータ共有のおかげで全結合層よりはるかに効率がいい。

画像以外にも、音声や1次元の系列データにも畳み込みは使われています。次回はCNNとは別のアプローチで系列データを扱うRNNについて書きます。


参考文献