畳み込みニューラルネットワーク (CNN)

畳み込みニューラルネットワークとは

畳み込みニューラルネットワーク(Convolutional Neural Network: CNNまたはConvNet)とは、何段もの深い層を持つニューラルネットワークで、特に画像認識の分野で優れた性能を発揮しているネットワークです。このネットワークは「畳み込み層」や「プーリング層」などの幾つかの特徴的な機能を持った層を積み上げることで構成され、現在幅広い分野で活用されています。

畳み込みニューラルネットワーク

この畳み込みニューラルネットワークは、主に一般物体認識と呼ばれる画像認識のタスクで優れた性能を持つアルゴリズムとして使われているものですが、この圧倒的な性能の他に、転移学習による効率的なネットワークの学習方法が確立されたことなどもこの技術が普及した大きなきっかけになったと言えるでしょう。次節からは、この畳み込みニューラルネットの具体的な仕組みについてみていきます。

畳み込みニューラルネットワークの仕組み

畳み込み層

一般的なニューラルネットワークでは層状にニューロンを配置し、前後の層に含まれるニューロン同士は網羅的に結線するのが普通ですが、この畳み込みニューラルネットワークではこのニューロン同士の結合をうまく制限し、なおかつウェイト共有という手法を使うことで、画像の畳み込みに相当するような処理をニューラルネットワークの枠組みの中で表現することに成功しています。この層は「畳み込み層」と呼ばれ、この畳み込みニューラルネットワークでは特に重要な意味を持っています。

畳み込み層

プーリング層

また、この畳み込みニューラルネットワークにおいて、もうひとつ大きな存在感を発揮しているのが、「プーリング層」と呼ばれる層の存在です。畳み込みニューラルネットワークにおいて、「畳み込み層」が画像からのエッジ抽出等の特徴抽出の役割を果たしているとすると、「プーリング層」はそうした抽出された特徴が、平行移動などでも影響を受けないようにロバスト性を与える役割を果たします。畳み込みニューラルネットワークは、特に画像のカテゴリ分類(一般物体認識)で優れた性能を発揮するネットワークとして知られていますが、例えば写真に写った動物が犬か猫かをカテゴリ分類したい場合、犬と猫が正しく識別できることが重要であり、犬が左端に映っているか、右端に映っているかはあまり重要ではありません。つまり、そうした画像のカテゴリ分類というタスクにはあまり重要でない位置に関する情報を巧妙に削ぎ落としてやっているのが、この「プーリング層」と呼ばれる層の役割になります。

同じカテゴリとして識別したい2つの画像

正規化線形ユニット(Rectified Linear Unit)

また、この畳み込みニューラルネットワークには、従来のニューラルネットワークではあまり使われることのなかった区分線形な関数、正規化線形ユニット(Rectified Linear Unit)と呼ばれる関数が活性化関数として使われています。従来のニューラルネットワークでは、ステップ関数を鈍したようなロジスティックシグモイド(Logistic Sigmoid)関数などが使われることが多かったのですが、この正規化線形ユニット(Rectified Linear Unit)を使うことで、畳み込みニューラルネットワークの学習速度が6倍程度まで高速化したとの記録もあり、こうした細かな改良もこの畳み込みニューラルネットワークの発展には大きく寄与していると言えるでしょう。

代表的な活性化関数

畳み込みニューラルネットワークの発展と応用

ILSVRC (ImageNet Large Scale Visual Recognition Challenge)

この畳み込みニューラルネットワークは、近年のディープラーニング(深層学習)のブームが訪れるはるか前、1979年に発表された福島氏らのネオコグニトロンに起源を持ち、1990年代にLeCunらによって更に発展させられた技術ですが、その可能性に大きなスポットライトが当たったのは、2012年の世界的な画像認識のコンテスト ILSVRC (ImageNet Large Scale Visual Recognition Challenge)においてでした。このILSVRCではImageNetと呼ばれる大規模な画像データベースでのカテゴリ分類(一般物体認識)の精度が競われます。この2012年のILSVRCにおいて、カナダのトロント大学のヒントン氏のチームが発表したAlexNetは、既存の手法を大幅に上回る記念碑的な性能を発揮し、翌年以降にこのコンテストの上位に入賞したアルゴリズムの多くが、畳み込みニューラルネットワークの枠組に沿った手法となりました。2015年には人間の認識精度を上回る精度を叩き出すネットワークも出現しています。

GPGPU(General-purpose computing on graphics processing units)

現在の畳み込みニューラルネットワークが大きく発展するきっかけとなった要素としては、GPUの存在も欠かすことができないでしょう。CPUによる並列演算ではなかなか効率的に高速化させることができなかった畳み込みニューラルネットワークが一気に加速するきっかけとなったのは、このGPUの演算性能にあると言っても過言ではありません。とはいえ、現代の優れた演算性能を持つGPUを持ってしても、畳み込みニューラルネットワークの学習は決して簡単な計算とは言えない部分がありました。2012年にヒントン氏たちの発表したAlexNetはImageNetの100万枚以上の画像データを学習させるのに、NVIDIA® GeForce® GTX580 2機を使い、5~6日間の時間が必要だったと言われています。現在では更にGPUの性能は向上していますが、それでもゼロから畳み込みニューラルネットワークを学習させるのは決して容易いタスクとは言えません。そこで、現在畳み込みニューラルネットワークを利用する場合によく用いられる手法が、転移学習と呼ばれる手法です。

転移学習(Transfer Learning)

この手法は、畳み込みニューラルネットワークをゼロから学習させる代わりに、他のタスクで学習を行わせたネットワークを元に自分たちのタスクに適用させる(再学習させる)ことで学習のための計算コストを節約するものになります。この転移学習は、学習コストだけでなく、学習に必要なデータ点数も大幅に抑えることができるため、ディープラーニングの学習では欠くことのできない手法のひとつになっています。更に、畳み込みニューラルネットワークの再学習を行わずに、その一部だけを画像の特徴抽出器として使うような使い方もなされます。こうして畳み込みニューラルネットワークを利用することで得られる特徴量は「CNN特徴量」などとも呼ばれ、畳み込みニューラルネットワークによって計算された特徴量を別の分類器(例えば、サポートベクターマシーン: SVMなど)で分類することで画像のカテゴリ分類を非常に簡単に行うことができます。画像認識の分野では、従来からさまざまな画像特徴量が利用されてきましたが、CNN特徴量にはそのような人が人工的に作った特徴量が取り出すことのできなかったさまざまな画像の特徴を含んでいるとされています。

AlexNetとSVMの組み合わせで転移学習を実現した例

こうした転移学習によく使われるネットワークとしては、2012年にヒントン氏たちが発表したAlexNet、2014年にオックスフォード大学のチームが発表したVGGなどがありますが、MATLAB®ではアドオン機能を使って簡単にこうしたネットワークを利用することができます。

複数GPU / クラスタによる高速化

一方で、こうした転移学習などの手法を使ったとしても、依然としてネットワークの学習は必要であり、学習を高速化させることの重要性が高いことは変わりありません。そういった観点からは、現在複数のGPUやクラスタによる高速化なども行われています。MATLABでは、ネットワークの学習の際にオプションとして、'ExecutionEnvironment' というパラメータを設定することで、複数のGPUを使った学習やクラスタを使った学習等に柔軟に対応させることができるようになっています。

パラメータの最適化

また、ニューラルネットワークの扱いを難しくしている要素のひとつにそのパラメータの多さがあります。畳み込みの段数をどれくらいにするか、あるいは畳み込みのパッチの大きさをどれくらいにするか、収束計算の際の学習率をどれくらいに設定するかなど、かなりの数のパラメータが存在します。こうした学習器のパラメータの最適化は、ニューラルネットワークに限らず、機械学習の分野では非常に重要なトピックとなっていますが、学習に膨大な計算資源が必要となるニューラルネットワークでは、特にこうしたパラメータの最適化は重要となります。従来、機械学習の分野では、こうした学習器の最適化にグリッドサーチと呼ばれるシンプルな方法が取られることも多かったのですが、近年ではベイズ最適化と言われるより洗練された方法が使われることも増えてきました。ベイズ最適化は、一般的にはブラックボックス関数の最適化に使われるアルゴリズムですが、こうした最適化の手法をうまく使うことで、ニューラルネットワークの最適なパラメータを効率よく、自動的に探索するような手法も試されるようになってきています。

畳み込みニューラルネットワークによる回帰

画像のカテゴリ分類のタスクでその優れた性能を知られる畳み込みニューラルネットワークですが、画像を入力とした回帰のタスクにも畳み込みニューラルネットワークは使うことができます。画像を入力として離散値を予測するのが分類のタスクだとすると、画像を入力として連続値を予測するのが回帰のタスクになります。画像を入力として、画像に映る文字の回転角を推定したり、人間の関節の座標値を推定したりといったタスクをこなすことが可能です。

数字の画像の回転角を予測させた例

MATLABを使用した畳み込みニューラルネットワーク

Deep Learning Toolbox™を使うことで、簡単に畳み込みニューラルネットワークを試してみることができます。畳み込みニューラルネットワークをゼロから構築して学習させるだけでなく、学習済みのネットワークを利用した転移学習により、より少ないデータ点数でネットワークを学習させることや、Parallel Computing Toolbox™とNVIDIAのGPUを合わせて使うことにより、学習を高速化することも非常に簡単です。Statistics and Machine Learning Toolbox™を使えば、ベイズ最適化といった新しい機械学習の手法にも触れてみることができます。また、現在では畳み込みニューラルネットワークの技術をベースに R-CNN (Regions with CNN Features) と呼ばれる物体検出の手法も発展してきています。この R-CNN は、その高速版のアルゴリズムである Fast R-CNN, Faster R-CNN と合わせて、Computer Vision System Toolbox™で利用することができます。

参考: 物体検出, 物体認識, パターン認識, 予測分析, データアナリティクス, MATLAB GPU コンピューティング