畳み込みニューラルネットワーク [Convolutional Neural Network (CNN)]

1+

1. 概要

畳み込みニューラルネットワーク(Convolutional Neural Networks. 略称:CNN/ConvNet)は画像認識で用いられるDeep neural neworkの1種である,CNNでは,畳み込みカーネル(covolutional kernel)をメインの学習可能な層として用いる.

CNNは「重み共有」の仕組みを採用することで,全結合接続に比べて省モデル化を実現した,Deep Neural Networkの画像認識応用が現実的になった.また.畳み込み操作の恩恵により,画像中のどこに対象物体が登場しても認識可能である並進不変性(translation invariance)も保持している.そして,Deep Learning登場以前の画像認識システムと同様,対象物体の局所変形(local deformation)に対して頑健な学習も行うことが可能となっている.

CNNは,入力画像が各層の処理を経ていく中で,各畳み込み層の(学習済み)畳み込みカーネルが,画像の特徴を階層的にとえらえてゆく.CNNの順伝搬では,前回の$i-1$番目の畳み込み層の各カーネルに各位置が反応した結果である特徴マップ(Feature Map)に対して,次の$i$番目の畳み込みカーネル群によって畳み込みを行い,更に別の特徴マップを得る.この特徴マップの特徴マップを獲得する作業を繰り返すことにより,CNNは画像の特徴を階層的にとらえていき,教師ラベルに関連した場所の応答が強くなるように特徴マップが順に洗練されていき,最後に対象物体が識別しやすい高レベルの特徴マップが得られる.

1.1 CNNが捉えるもの:大規模データから得られる階層的な画像特徴群

1つ前の世代の画像認識システムのマルチクラスSVMやRandom Forestを用いたシステムでは,多くとも10~30クラス程度の識別モデルを学習するのが上限であった.それに対して,画像認識用のCNNでは,階層的で深い表現を学習できるようになったおかげで,例えばImageNetデータセットのような1000クラス程度の多種多様な物体クラスを(1つのネットワークだけで)識別できるようになった.

学習済みのCNNでは,順伝搬を行うと終盤の方の層の畳み込み/Poolingを終えた特徴マップほど,学習した物体全体を示す高レベル特徴(high-level feature)に応答する畳み込みカーネルが学習され,逆に序盤の層の特徴マップでは「エッジ特徴」「色特徴」などの低レベル特徴(high-level feature)のみをとらえるようになる.

畳み込み後の特徴マップ上の各位置$(x,y)$のもつ$c$(チャネル数)次元の特徴は,それまでの層の畳み込み(や他の層の処理)で獲得して収集してきた受容野(receptive field)全体の情報を収集したことに相当する.

CNNは,畳み込み層を用いたパラメータ共有(parameter sharing)まとめ重み(tied weight)にのおかげで,全結合メインの旧来の三層ニューラルネットワークと比べて,画像認識用途において「処理効率化+メモリの省力化」を実現きDeep Neural Networkの応用が現実的となった.

また,その後のResNet論文におけるResidual Connection(2.2節 B)の提案により,更に深いネットワーク(および深い表現)が学習ができるようになり,更に認識精度が向上したこともパラダイムシフトとなる.初期によく用いられてAlexNetやVGGnetなどのCNNは,「深い」と言っても,せいぜい7~10層程度の深さであったが,ResNetの登場で50層-150層にもおよぶ深いネットワークを,勾配損失しないで学習できるようになり,CNNは以前より更にデータ量もスケールできるようになっている.

1.2代表的なバックボーン構造

CNNは当初はImageNetを用いた大規模クラス識別のタスクのみに使用されていた.それが,その後はセマンティックセグメンテーションなど他のタスクにも特徴抽出部分としてAlexNetやVGGNetが使われ始め,現在では様々なタスクの前半の特徴集出部分にCNNは共通して使われるようになった.そこで,そうした種々のタスク向けに使用する意味で,CNNの構造のことを最近はバックボーン(backbone)とも呼ぶ.

CNNの代表的なバックボーンとには,たとえば以下のようなものがある:

  • AlexNet
  • VGGNet
  • GoogleNet
  • ResNet
  • DenseNet
  • SENet(Squeeze-and-Exitation Networks)

これらの代表的なネットワーク構造は,手動でエンジニアリングされて設計されてきた.本記事では2節以降で,これらの代表的なバックボーン構造を構成する要素.および学習方法についてまとめていく.

※ 近年では最適なネットワーク構造を自動的に探索するニューラル構造探索(Neural Architecture Search)の研究も活発であるが,この記事では対象外とする.

2. CNNの構成要素

この2節では,1.1節で列挙したような代表的なCNNのネットワーク構造で用いられる部品として,層の種類(2.1節),層間の接続(2.2節)について,それぞれ代表的な構成要素を述べる.

2.1 層の種類

CNNでは「畳み込み層/非線形化層で得られた特徴マップをプーリングする」ことを複数回繰り返す順伝搬を行うことで,複数解像度で画像の特徴をとらえた特徴マップを計算することができ,その階層的な表現が旧来の画像認識を大きく量がすることになった.この2.1節では,そのCNNの構成要素を,機能別に簡単に紹介する.(End-to-EndにCNNをSGDで学習するためには,微分可能な関数のみが各層で使用可能である点に注意.)

A. 畳み込み層

CNNでパターンマッチングを行うための中心的な構成要素が畳み込み層(convolutional layer)である.各畳み込み層では,その時点までの順伝搬で再生された$M$チャンネル分の特徴マップに対して,畳み込みを行う$k \times k$のカーネル$N$個を用意しておく.そして,入力の$M$チャンネル分の特徴マップに対して畳み込み処理を行い,$N$個のテンプレートパターンに対する応答である出力の特徴マップを得る.

この畳み込み層は,古くからの画像処理用の2次元畳み込み操作をそのまま学習可能な層としてニューラルネット向けに用いたものである.畳み込みに用いる学習可能な$n \times n$の$2次元関数のことを,古典的な画像処理と同様にカーネル(もしくはフィルター)と呼ぶ.ただし,畳み込み層とは呼ぶものの,実際のCNNの多くでは,Cross-correlation(相互相関)を用いて畳み込み層が実装されている(相互相関は,カーネルへのアクセスを逆順にする点が,畳み込みと異なる).

ImageNetなどで学習済みのCNNでは,各畳み込み層において入力に近い方から順に,「低レベル特徴」=>「中レベル特徴(パーツ単位)」->「パーツの組み合わせに相当する特徴(モチーフ単位)」->「高レベル特徴(物体全体に対する物体検出器のような応答)」がそれぞれ学習されていることに相当する.そしてCNNを順伝搬を行うことで,これらの学習済みパターンからの応答を全て満たしたクラスが,最後に識別結果として出力される.

B. 全結合層

全ニューロン同士を線形結合でつなぐ層を,全結合層(fully connected layer)と呼ぶ.古典的な3層ニューラルネットワークの時代から用いられているもので,2層のあいだの全ニューロン同士に,重みとバイアスを用意する.

CNNにおいては,終盤の層でのみこの全結合層を用いることが多い.畳み込み層だけ繰り返していると,特徴マップが$C \times W \times H$の3階テンソルのままであり,これでは出力の$N$クラスの各確率を示すベクトルと合わないし学習のためのロスも計算できない.そこで,CNNの終盤では全結合層を利用して$C \times W \times H$から,$N$次元ベクトルへ変換する.

C. プーリング

直前までに得ている特徴量マップに対して,Max, Averageなどの操作を用いて局所範囲ごとに(例:$2 \times 2$の範囲ごとに),代表値1つだけを選ぶ処理を行うことで,局所範囲内の代表値のみからダウンサンプリングされた特徴マップを得る処理をプーリング(Pooling)とよぶ.

CNN向けの代表的なプーリングには平均値プーリング(Average pooling)最大値プーリング(Max pooling)がある.それぞれプーリング範囲の最大値/最小値だけを残す操作である.プーリングを行うことで特徴マップ上の各$(x,y)$がとらえる情報の元画像における対応範囲が広くなっていく(=受容野が広まる)こととなる.

ちなみに,受容野を広くするプーリング以外の方法としては,画像セグメンテーション問題向けに広範囲のコンテキストを効率よく計算する目的で用いられる膨張化畳み(Dilated Convolution)があげられる.

D. ReLU層(非線形化層)

CNNの畳み込み層や全結合層は,基本的には「重みとバイアスのみを用いた線形の変換」のみであり,これらだけでは表現力に限界がでる.そこで畳み込み/全結合層の処理のあとに,特徴マップの応答値を非線形化関数を通じて非線形化することで表現力を増すことが,ReLU(Rectified Linear Unit)に代表される非線形化層を用いて行われる.

伝統的なニューラルネットではシグモイド関数なども非線形層に使われていたがディープニューラルネットでは,汎化性能低下の悪影響をあまり受けないままに,学習も高速に行える性質をもつReLUが提案され,以後ReLU層とその拡張手法が非線形化層に用いられる.

E. ロス層

クラス識別問題のCNNでは,標準的にSoftmax層が用いられる.softmaxは $\arg \max$をソフト化して微分可能にした以下の関数である:

\begin{align}f(x_i) = \frac{e^{x_i}}{\sum_{j}^{K} e^{x_j}}\end{align}

ここで,softmax層に入力するK個のニューロンのうち,$x_i \in \mathcal{R}^K$が,$i$番目(クラス$i$)のニューロンの値であり,分母で全クラス分のexponentialの和を用いて正規化される.

これにより,各クラスの出力確率が合計で足すと1になるように調整されるので,softmax層後の出力をカテゴリカル分布として(我が1の)K次元確率値ベクトルとしてCNNが出力できるようになる.

また,SGDでCNNを学習する際のロス関数としては,Cross Entropy ロス関数が標準的に用いられる.

2.2 層間の接続による拡張

A. スキップ接続

スキップ接続(skip connection)はセマンティックセグメンテーション向けのネットワーク構造として当初提案されたFCN(Fully Convolutional Network)や,セグメンテーション目的の標準的ネットワーク構造の1つとなったUNetなどで用いられる.

「何度も畳み込み層とPooling層を経て消失してしまった低レベル特徴も,後半の層に直接移動させて生き残らせる」ことがスキップ接続の目的である.離れた層間で特徴マップをコピーして接続させ,接続したあいだの層は順伝搬と逆伝搬をスキップする.

B. 残差接続(residual connection)とResNet

ResNet [He et al, 2016]の論文では,過去のバックボーンであるVGGNetなどよりも更に多層化したCNNを学習できるようにする目的で,残差接続(residual connection)を用いた残差ブロック(residual block)が提案され,50~150層もの非常に深いCNNが初めて学習できるようになった.(Res-Net論文の残差ブロックで用いられている「identity connection」は,間の層をスキップしている「スキップ接続」であるのだが,[He et al, 2016]では別名が付けられてしまったのでややこしい)

図:Residual Block

残差ブロックは,「入力から出力への残差関数$F$」を,スキップ接続を利用することで,ブロック毎に学習できるようにしたものである.入力$\bm{x}$をそのままブロック出力へ伝えるスキップ接続を利用し,学習できる残差関数$F(\bm{x})$を学習する.ブロックの最後に,スキップ接続で到達したブロック入力$\bm{x}$と$$足し合わることで出力は$relu(F(\bm{X}) +\bm{x})$となる.

残差ブロックの導入により,ResNetは50~150層のかなり深いCNNを勾配損失は防ぎながら初めて学習できるようになり,これにより画像認識各タスクの認識精度が更に向上した.

C. 更に「長い」スキップ接続

ResNetのスキップ接続は,残差ブロック単位で「短い」スキップ接続であるが,もっと「長い」スキップ接続を利用したCNNの提案がその後続いた.Highway Network[Srivastava et al. 2015] では長いスキップ接続でり,ResnetはこのHighwayNetの特殊系と捉えることができる.また,Resnetの拡張モデルがたくさん提案された中で,DenseNet(Densely connected CNN)ではあらゆる長さのスキップ接続で全部の層の間を互いに接続することが提案された.

また,画像セグメンテーション向けのFCNでも,U-Netなどのように,序盤の層と終盤の層をつなぐ,長いスキップ接続を使用するネットワークが提案されよく用いられている.U-Netはセグメンテーション向けのアーキテクチャだが,その後,pix2pixなどの画像変換モデルでも使用されている.

3. CNNの学習

CNNの学習は,伝統的なニューラルネットである3層パーセプロンと同様,フィードフォーワード型のニューラルネットワークに対して,ロス関数から得られる誤差を逆伝搬(back propagation)することで行う.しかし3層パーセプトロンの過去の時代とは異なり,CNNは4層以上の多層モデルであり,パラメータ数も多く学習データセットも巨大である.したがって,学習サンプル全てを同時にメモリ上にロードし勾配降下法により学習することは,計算資源的に無理がある.

そこで,CNNや深層学習全般では確率的勾配降下法(Stochastic Gradient Descent: SGD)を用いて,バッチ毎の勾配でオンライン学習を行うバッチ学習を標準的に用いる.SGDでは学習データからランダムサンプリングしたN= 8 ~ 64個ほどのサンプル(この塊$N$個をバッチと呼ぶ)のみを用いて,少しずつ学習を行う.

3.1 SGD最適化の改善の工夫

ディープニューラルネットをSGDでバッチ学習する際の問題として,狭い谷にはまると勢いが徐々になくなって谷から抜けられなくなり局所最小解で学習が終わってしまう点がある.

そこで,1つ前ステップにおける重み更新幅 (=速度)の$\delta w^(t))$も勾配更新時に使用するモーメンタム項(慣性項)も,SDGの更新時に追加して用いることが標準的である.モーメンタム項を用いると,まず目的関数の更新が速くなり,収束までのステップ数が減ることになる.加えて,狭い谷に一度はまったときも,勢い(慣性力)を失わずに谷から抜け出て大域解探索を継続することが可能となる.

また,モーメント項の係数$\mu$は固定値で経験的に手動で決めるものであったが,そのモーメント係数を適応的に推定しながらSGDを行うADAM (ADapitve Moment Estimation)アルゴリズムが提案された[Kingma+ 2014].現在ではこのADAMが,適応的SGDアルゴリズムとしてSGDでの学習時に標準的に使用される.

3.3. データ拡張

ディープニューラルネットワークは,パラメータが大量にある大規模モデルであり,これによって深く階層的な表現を学習できるのが利点であるのだが,その反面,データ量/分布に対してパラメータが多すぎて(Overparametarized)になってしまい過学習しがちである欠点も持つ.

ディープニューラルネットのパラメータを減らすことはなかなかできないので,過学習を防ぐには少しでも多くのデータが必要である.しかし,現実には教師あり学習で画像認識CNNを学習する時には,最低でも数万枚の画像を用意する手間が発生するのでラベル付けのコストが非常に高い.

そこでよく行われるのが,データ拡張(Data Augmentation)である.データ拡張では,データセットの各(画像,ラベル)のペアに対して,画像側を画像処理をもちいて複数枚ランダムに変形(Transform)させた画像を新たに作成する.たとえば,<ライオン画像, “ライオン”>という学習サンプルペアに対して,ライオン画像を左右反転させた画像を作ったり,アフィン変換で少しライオン領域を変形させたり,画像にランダムなノイズを加えりするなどの「画像処理」を行う.こうして,追加のラベル付けは行わずにサンプル画像を人工的にランダムに増やすことでデータセットのサンプル数合計を増やすわけである.

また,他のデータ拡張の手段としては,(クラスごとに)深層生成モデルを学習し,その生成モデルが生成したサンプル画像をデータ拡張を行ったデータとして識別器の学習に用いることもできる(※ Few-shot Learningなどでよく見られるアプローチである).

3.4 バッチ正則化(batch normalization)

CNNの学習時には正規化および学習の高速化の目的で,バッチ正規化(Batch Normalizaiton)を行うことが多い.これもDropoutなどと同じで過学習を防いで,汎化性能を高めるテクニックの1つである.バッチ正則化は,学習時間の短縮目的と表現の正則化が達成できるので,好んで用いらている.

バッチ正規化「層」は,学習中のSGD中に得る毎回のミニバッチ毎に,各層の出力でチャネル単位でミニバッチ全体の平均・分散を用いた正規化を行い,その正規化値をスケーリングする$\gamma$とシフトするバイアス項$\beta$の2つをパラメータとして学習する層である.

このバッチ正則化層は,活性化関数(ReLUなど)の手前に毎回配置し,その配置場所でベクトル表現$\bm{x}$に対してチャネル毎のバッチ正規化を行った表現を学習することができる.

本来は訓練サンプル全体の白色化と同様に,各層の入力でもそれぞれ白色化しておきたいが,その場合SVDを学習中に毎回解くことになってしまう.そこで,バッチ正則化層を用いて,ネットワークの途中の中間表現$\bm{x}$で何度も正則化を行うことなり,過学習を抑制する効果を得ることができ,旧来使われていたDropoutの必要性が減ることとなった.また,最適化中に解が過度な発散をすることがなくなるので,高速に収束できる効果も得られる.

オリジナルのバッチ正規化では,バッチ数$N$が小さいほど精度が落ちる.我々のように画像を用いる深層学習では,あまり大きなバッチ数は用いることができない.そこで,バッチ数が少なめでも安定した正規化が行いやすい,Group Normalizationなどの改善手法がのちに提案されている.また,条件付きGANを用いたスタイル変換などでは,1サンプル(インスタンス)単位で正規化するInstance Normalizaitonが効果が高いのでよく利用されている.

4. まとめ

この記事では,CNNの代表的なバックボーン構造の構成要素と,その学習方法について簡単にまとめた.

DenseNetやSE-Netあたりの,2017~2018以降の代表的なバックボーン技術については,この記事では触れていない.

個人的には,以下のお馴染み「Karpathy氏がStanfordの授業でTAだったころに作ったCNNのチュートリアルページ」が初心者にはすごく参考になると思う.CNNの詳細な挙動を簡潔に知れるし,このページのわかりやすい「特徴マップ計算の可視化」はその後いろいろなところで見かける.

Convolutional Neural Networks (CNNs / ConvNets)

正直なところ「CNNの畳み込みや特徴マップの図解」についてはこのページを読んで学んでもらった方が早いので,この記事でもCNNについては独自に図を作らなかった.

また,こちらも少し古いが,2017年のStanfordのComputer Visionの授業はYoutubeに動画がアップロードされており(当時はメインの講師がKarpathy氏とJustin Johnson氏)2020年現在でも初心者は参考になる.

Lecture 1 | Introduction to Convolutional Neural Networks for Visual Recognition

References

  • [Kingma et al. 2014] Kingma, Diederik P., and Jimmy Ba. “Adam: A method or stochastic optimization.” arXiv preprint arXiv:1412.6980 (2014).
  • [He et al. 2016] He, Kaiming, et al. “Deep residual learning for image recognition.” In, CVPR 2016.
  • [Srivastava et al. 2015] Srivastava, Rupesh Kumar, Klaus Greff, and Jürgen Schmidhuber. “Highway networks.” arXiv preprint arXiv:1505.00387 (2015).

外部サイト

1+