まったりAI勉強記

AI(人工知能)について、特にゆかりがあるわけでもない社会人が、まったりとAIについて勉強していく勉強日記です。

【G検定】畳み込みニューラルネットワーク その2

どうも、カタミチです。

今日は、畳み込みニューラルネットワークの続きですね。行ってみましょう〜

データ拡張

畳み込み層とプーリング層を繰り返し重ねることで画像認識の精度が高まることは分かりましたが、まだ課題があります。

・同じ物体でも、角度が異なれば画像としては全く見え方が異なる。
・同じ物体でも、拡大縮小によって見え方が全く異なる。
・同じ物体でも、光の当たり方によって全く見え方が異なる。

なるほど、確かにそうですね。

つまり、これらを網羅したパターンが必要になるわけですが、現実にはあらゆるパターンを想定した画像を準備することは不可能です。

そこで、手元にある画像から擬似的に別の画像を生成するという、データ拡張というアプローチが取られるようです。ランダムに以下のようないくつかの処理をして新しい画像を作ります。

・上下左右にずらす
・上下左右を反転する
・拡大・縮小する
・回転する
・斜めに歪める
・一部を切り取る
コントラストを変える

なるほどー。こうやって入力データを水増しするんですねー。他にも、画像の一部分に対して画素値を0またはランダムにするCutoutや、Random Erasing、2枚の画像を合成するMixupがあります。さらに、CutoutとMixupを組み合わせたCutmixなんてのもあるみたいですね。

データ拡張の効果は大きく、画像認識を行う場合は必須のようです。ただ、これまでの処理にもあったように、闇雲にデータを増やせばいいってもんでもない…というのはここでもあるようです。

CNNの発展形

CNNの仕組みはだいたいそんなところのようですので、続いては具体例ですね。

まずは、以前の章で画像認識コンペティションILSVRCで大差で勝利したAlexNet。これは…

畳み込み層→プーリング層→畳み込み層→プーリング層→畳み込み層→畳み込み層→畳み込み層→プーリング層→全結合層(3層)

という構造をしています。なるほどー。必ずしも、畳み込み層とプーリング層が交互に来るわけではないんですね。途中、畳み込み層が畳み掛けてきてますね。

以降、より深いネットワークのモデルが次々と登場しました。VGGGoogLeNetというモデルは、記録をさらに大きく塗り替えています。GoogLeNetは、ネーミング的にGoogleと関係してそうですね(ふむ)

VGGは16層まで積層してますし、GoogLeNetは同時に異なるフィルタサイズの畳み込み処理を行うInceptionモジュールを導入しています。

10から20層あたりまでは調子良かった深層化ですが、さらに超深層になると識別精度が落ちるという問題に直面しました。

そこで、更に深いネットワークを実現するために考えられたのがSkip connectionと呼ばれる、層を飛び越えた結合が導入されたネットワーク、ResNetです。現在では、100層以上のネットワークが構築されることも珍しくないそうです。

全然関係ない余談ですが、私が昔ハマったゲームに風来のシレンというゲームがあります(唐突)。敵と戦いながら1階からどんどんダンジョンを降りていくゲームなんですが、知識が増えれば増えるほど深い階層に降りるテクニックが磨かれていき、最終的には99階層にまで到達する…という感じなのですが、まさに人類の知識が増えて深い階層にたどり着いていったんだろうなぁ、と感じました。

さて、話を戻しましょう。

ネットワークの層数を深くすると畳み込み層のフィルタや全結合層の重みなどのパラメータ数は増加しますが、モバイル端末などのメモリ量が限られる環境でも利用できるよう、畳み込み層のパラメータ数を削減するために畳み込み処理の代わりにDepthwise Separable Convolutionを用いたMobileNetなどのモデルも登場しています。

Depthwise Separable Convolutionでは、空間方向とチャネル方向で独立に畳み込み処理を行うことで計算量の削減を実現しています。しかしこれ、通常の畳み込み処理の近似計算なので、精度は一致しないことに注意は必要ですね。

CNNのネットワーク構造には、層数だけでなく、フィルタのサイズやフィルタ数、特徴マップの連結方法…など、決めるべき項目がたくさんあります。となると、人が最適なネットワーク構造を探し出すことは不可能になります。そこで、学習により準最適なネットワーク構造の探索を行うことが注目されています。

Neural Architecture Search(NASでは、リカレントニューラルネットワークと深層強化学習を用いてネットワーク構造を探索します。…リカレントニューラルネットワークって初出じゃね?(汗)

…ともあれ、この構造を基にしたNASNetや、モバイル端末での計算量も考慮する工夫をしたMnasNetなどが生まれました。

さらにさらに、EfficientNetという、単に高精度なだけでなく、転移学習に有用なモデルも出てきています。ん?転移学習??…次の節で出てきます、はい。

それにしても、用語がほとんど英語になってきましたねー。個人的には、下手に日本語に訳して言葉が揺れるよりは、英語で統一してもらった方が分かりやすいです。直感性が薄れるので、覚えるのにちょっと骨が折れますが…(汗)

転移学習とファインチューニング

これまで見てきたとおり、現在では「超」深層なネットワークを学習することが可能になりましたが、それに伴い膨大な計算が必要になります。GPUマシン1台や2台では、とても太刀打ちできないそうです。

しかし、ニューラルネットワークによる予測を行いたい時に必要なのは、あくまでも最適化されたネットワークの重みであり、多大な時間が必要な学習は、あくまでもそのステップです。つまり、学習済みのネットワークがあるのであれば、それでいい…という事になります。

これまで述べたネットワークはいずれも、ImageNetで学習済みのモデルが公開されています。ただ、実際に予測したいタスクに対して少し物足りない時もあるでしょう。そんな時に転移学習です。既に学習済みのモデルに、新たに何層か自分で付け足してその層を学習すると言うもので、かなり高性能なネットワークが得られると言うのです。また、付け足した層だけでなく、ネットワーク全体を学習する方法をファインチューニングと言います。これは前にも出てきましたね。

なるほどなー、便利でいいですね!

ということで

畳み込みニューラルネットワークについては以上ですかね。途中にも書きましたが、用語が英語だらけになってきましたね。何度も見返さないと覚えられそうにありません(汗)。

ま、とりあえず薄らとは画像認識についての手法が分かったかなー、という感じですかね。

ではまた。

勉強に使ってる書籍はこちら↓
深層学習教科書 ディープラーニング G検定(ジェネラリスト)公式テキスト 第2版