CNN(畳み込みニューラルネットワーク) [ディープラーニング]

1. CNN(畳み込みニューラルネットワーク) とは [概要]

畳み込みニューラルネットワーク(CNN, Convolutional Neural Networks)とは,学習可能な畳み込み層を含み,構成するの数が合計4層以上の,ディープニューラルネットワークのことを指す.メインの処理が,「畳み込み層」を用いた画像の2D畳み込み(空間フィルタリング)であるニューラルネットワークであることから「畳み込みニューラルネットワーク」と呼ぶ.

この記事では,CNN(畳み込みニューラルネットワーク)の基本的な解説を行う.そして,CNNを構成する各や,学習の工夫などついて説明する.各モジュールの詳細は,小記事をたどっていただきたい.

また,この記事は,初期のCNNバックボーンを例として,ImageNetからのスクラッチからの学習をおこなう際の話にフォーカスして,記事を構成している.したがって,CNNの事前学習や,各別タスクへの転移学習(ファイン・チューニングなど)は,今後別の記事として公開したい.

CNNの畳み込み層(2D)の詳しい仕組みについても,この記事では述べないので,以下の記事を参考のこと(※ 畳み込み層(2D)で行われていることをよく把握しておき,種類やパラメータを使い分けることは,非常に重要!).

CNNは,ImageNet登場以降は,VGGNetInceptionNetなど,当初は物体認識向けに研究されはじめた.その他の画像認識系問題にもCNNバックボーンとして使用されていき,コンピュータビジョンを学習する際の根幹的道具となっていった.具体的には,物体検出セマンティックセグメンテーション人物姿勢推定や,画像の深層生成モデルや,画像対画像変換などで使用される.つまりは,ほとんどのコンピュータビジョン問題が,データドリブンにCNNへ学習するようになった.

1.1 記事の構成

CNNは各種応用や歴史があまりに多すぎるのもあり,この記事では「物体識別向けにImageNetで学習するCNNの,基本的な仕組み・と各層の要素」を整理することにのみ焦点を絞りたい.

2節以降では以下の構成で,CNNについて紹介していく:

AlexNet [Krizhevsky et al,. 2012] の登場以降,第3次AIブームの流行が開始した初期は,「CNN」と言った場合には,AlexNetのようにImageNet-1000クラスから学習する「大規模なクラス数の画像物体識別」に用いるCNNのことを主に指していた.それが,物体検出セマンティックセグメンテーションGANなど,物体識別以外の様々な問題にも,CNNが応用されるようになっていく.その際にも,ResNet ,DenseNetなどの,代表的なCNNバックボーン構造が「画像から特徴ベクトルを抽出するエンコーダ」として使用される(2.2節).

2節に入る前に,まずは1.2節でCNNの全体像について導入を行う.

1.2 CNN の 主な構成要素と特徴

畳み込みニューラルネットワーク(CNN)の基本構造
図1. 畳み込みニューラルネットワーク(CNN)の基本構造

図1は,畳み込みニューラルネットワークの基本的な層の構成例を示したものである.CNNでは,この図1のように,[ 畳み込み層 x N回 – ReLuプーリング層]を,1つのユニットとして構成して,そのユニットを繰り返すのが典型である.このユニットを繰り返すことで,特徴マップ(※ 畳み込み層の記事を参照 )を更新していき,最後は全結合層softmaxによってクラス識別確率を出力する.

1.2.1 CNNで導入された主なしかけ

CNNでは,畳み込み層をニューラルネットワークへ導入した.この恩恵により,各空間位置$(i,j)$における畳み込みで,全て同じ(重み値の)カーネルを用いて畳み込みをおこなう重み共有(weight sharing)の仕組みを採用できた.これにより過去の3層パーセプトロンの全結合層における「全ニューロン同士の接続」と比べて,省モデル化と高認識精度化を実現できている.

また,プーリング層の恩恵により,画像中のどこに対象物体が登場しても認識可能であるという平行移動不変性(translation invariance)を,CNNは獲得している.すなわち,Deep Learning 登場以前の,プーリング操作を用いた画像認識システムと同様に,CNNも,対象物体の局所変形(local deformation)に対して頑健な認識を行うことができる.CNNは複数回のプーリング操作で画像ピラミッド的処理を構成するゆえ,小パーツだけでなく,各解像度における中間パーツの移動・変形についても強い.

1.2.2 CNNの主要な3種の層

CNNの順伝搬では,「(1) 畳み込み層(2)ReLU型の活性化関数」のペアの,繰り返しにより,各解像度における特徴マップのフィルタリングと活性化が行われる (図1).このペアは,古典的な画像処理の「(1) 畳込み(空間フィルタリング) – (2) 非極大値抑制(NMS)」と同じような働きにそれぞれ相当している.このペアの間に繰り返しを通じて,入力画像の特徴を,各解像度において階層的にとらえててゆく.

「畳み込み + 活性化関数」の間には,(3)プーリングを用いて解像度をダウンサンプリングする(図1).代表的な特徴だけを残しながら各チャンネルの特徴を,2D空間で集約しつつ,空間解像度を減らしてい.これにより,小・中・大の画像範囲において,平行移動不変性を獲得していく.

CNNの順伝搬では,前層の$i-1$番目の畳み込み層でフィルタリングした結果の特徴マップに対して,また次の$i$番目の畳み込み層で順伝搬し,更に新たなフィルタリングされた特徴マップを得る.これを繰り返していくことで,CNNは画像の特徴を階層的にとらえて線形識別しやすい特徴マップに変換していってくれる(もとい,そうなるように学習される).これにより,終盤の全結合層だけで,クラス識別や回帰などの出力が楽に推定できる.

1.2.3 特徴マップがとらえる特徴.

CNNの活性化関数には,畳み込み層で捉えた応答のうち,値の高い場所だけ強調してよりシャープにする微分可能な関数を用いる.特にReLU型の活性化関数を用いる.

特徴マップ上の高い応答値だけを強調して活性化し,畳み込み後の表現を非線形化する.また$0~1$や $-1 ~1$の範囲に特徴マップの値を閉じ込める正規化の役割もある (そもそもこの目的で,初期はtanh やシグモイド関数が選ばれた).

学習済みCNNの順伝搬を行うと,各クラスの教師ラベルに関連が強い(画像上の2次元)領域の応答が強くなるよう,特徴マップが各層を経るごとに叙情に洗練されていく.そして終盤の層では,「対象物体クラスの空間領域だけ畳み込み結果の重みが高くなった,高レベル特徴の特徴マップ」が得られ,終盤の線形層によって,用意に線形識別や線形回帰できるようになる.逆に言うと,終盤の線形層までで,頑張ってそういった予測が楽になる特徴マップを作成するのが,序盤から終盤の層の役割である.

2. 直感的イメージと,代表的な構造.

CNNは,初心者からすると何を狙ってどういう処理を行なっているか直感的にわかりづらい.そこで,3節で各層の詳細説明に入る前に,CNNが「学習する階層的で巨大な画像特徴空間」と,それによるCNNの性質について話しておき,CNN全体の直感的なイメージをつけてもらっておきたい(2.1節).また,同様に部品説明に入る前に,CNNの代表的なバックボーン例を先にリスト化して紹介しておく(2.2節).

2.1 CNNの学習のイメージ

1つ前の世代の,物体認識システムで予測もモデル側に使われていた,SVMやRandom Forestなどを用いたシステムでは,多くとも「10~30クラス」を識別するモデルを,高精度に学習するのが1モデルでは限度であった.これは,Pascal VOC などの当時の物体認識チャレンジで,よく取り組まれていた難易度のクラス数である.

それに対して物体認識CNNでは,階層的で深い表現を学習できるようになったおかげで,ImageNet データセットの1000クラス以上の多種多様な物体クラスを,1つの大規模CNNネットワークだけで一挙に識別できるようになった.ただし,その分,各畳み込み層に128個や256個のカーネルを持つような,パラメータ合計数が非常に多い「大規模モデル」であるので,過学習に弱く,モデルの正則化が非常に重要である.また,パラメータ数が多いので,学習の高速化・安定化も大事である.

学習済みのCNNでは,順伝搬を行うと終盤の方の層の「畳み込み層プーリング層」の処理を何度も終えた特徴マップほど,学習した物体全体の表現である高レベル特徴(high-level feature)が,各畳み込みカーネルに学習される.逆に,序盤層の畳み込み層では,「エッジ特徴」「色特徴」などの低レベル特徴 (low-level feature)が学習されている.

畳み込み後の特徴マップ上において,各空間位置$(x,y)$の持つ$C$(チャンネル数)次元の特徴ベクトルは,それまでの畳み込み層(や他の非線形化層やプーリング層などでの処理)で獲得して収集してきた,受容野 (receptive field)の範囲全体の情報を,その座標$(x,y)$に対して集約した「周辺コンテキスト特徴ベクトル」に相当する.

CNNは,畳み込み層を利用したおかげで「パラメータ共有(parameter sharing)まとめ重み(tied weight)」の恩恵を受ける.そのおかげで,旧来の3層MLP比べると画像認識向けに「処理効率化 + メモリの省力化」を大幅に実現できる.これによりDeep Neural Networkの応用が現実的となった.

また,ドロップアウト(DropOut)バッチ正規化(Batch Normalization)などのディープニューラルネット向け正則化(Regularization)手法が発展してきた恩恵により,3層MLPのように過学習しないで済むので,深い大規模な画像識別モデルをCNNは学習できる.おかげで,大量のデータや大量のクラスに対するビッグデータ問題にも適用できるというパラダイムシフトが達成された.

更に,その後,ResNetにおける残差ブロック(3.2.2節)が提案されて以降,「更に深いネットワーク(=更に深い表現)」が学習ができるようになったことで,CNNの認識精度がもう一段階大きく向上する.初期CNNのAlexNetVGGnetなどは,深いと言っても,せいぜい7~10層程度の層の深さであった.それが,ResNetでは 50層~150層にもおよぶ深いネットワークをうまく学習できるようになり,性能劣化無しに,モデルを大きくスケールできるようになった.

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

AlexNetの登場後,しばらくの間は,まずCNNは「ImageNetを用いた大規模クラスによる物体認識」のタスクにのみ使用されていた.それが,以前からコンピュータビジョンで既に取り組まれていた他の画像認識の問題にもCNNが使われるようになる.例えば物体検出セマンティックセグメンテーション人物姿勢推定などの向けにCNNでも,VGGNetInceptionNetResNetResNext等の,物体認識むけCNNが,各タスク向けCNNの,背骨(バックボーン)として使用されはじめる.

物体検出などのタスクにCNNを学習させるには,以下のファイニンチューニングによる学習を行うことが普通であった.

  1. これらの物体認識以外のタスクのCNNを学習させる場合,スクラッチからの学習を行うことはしない.まず,ImageNetで事前学習済みのCNNバックボーンの重みを,初期重みパラメータとして用意する
  2. そして,そのImageNet事前学習済みパラメータを元に,目的である別タスクのデータセットで学習を行う「ファインチューニング(転移学習の1種)」を行うことが普通である.

ファインチューニングを行うのは,『CNNバックボーンは,新たに学習したいデータセット向けに,ある程度近い初期パラメータを備えている』という仮定のもとに,「(1)良い初期値」「(2)少ない学習時間」で,目的タスクのデータセットで学習を行いたいからである.

しかし,近年は物体検出などのタスクでも,いきなり目的タスクのデータセットからCNNをスクラッチからの学習をしても,十分な認識精度が確保できる(ResNet以降のCNNアーキテクチャが優れているためである).そのため,物体検出など主要画像認識タスク向けの(およそ2020年以降の) CNNアーキテクチャでは,事前学習・ファインチューニングの手順は行わないことも普通になっていった.古いテキストや記事だと,書いていない話題なので重要である (※ スクラッチからの学習の記事を参照のこと)..

※ ちなみにCNNの後継として2020以降研究されている「大規模モデル」のVision TransformerやMLP-Mixerなどに物体認識を学習する場合は,ImageNet-21Kで事前学習をしたあと,ImageNet-1Kでファイニンチューニングするのが定番手順である.

LeNetの構造
図2. LeNet の構造

LeNet(図2)を大規模化することに成功した「AlexNet(2012)」の登場を皮切りに,代表的な物体認識のためのCNNバックボーンとして,以下のようなアーキテクチャが提案されてきた:

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

近年では,最適なネットワーク構造自体を,強化学習などで自動的に探索するニューラル構造探索(Neural Architecture Search)の研究も活発である.

3. CNN の構成要素

3節では,2.1節で列挙したような代表的なCNNバックボーンで用いられる部品として,層の種類 (3.1節),層間の接続 (3.2節)について述べる.

3.1 層の種類

すでに1節などで述べてきたように,CNNは「畳み込み層 – 非線形化層 」で得られた特徴マップを,プーリングにより解像度を落とす」処理を,複数回繰り返すというのが標準的なネットワーク設計である.

畳み込み層において,複数の視覚野領域で画像の特徴をとらえた特徴マップ(feature map)を計算することができる.AlexNetが,大規模画像認識において,旧来の手法の性能を大きく凌駕したところから,コンピュータビジョン業界界隈でのCNNの流行が始まった.

このCNNを構成する「」について,3.1節ではそれぞれ概要を紹介する(End-to-EndにCNNを逆伝播で学習するために,微分可能な層(関数)のみでCNNを構成する必要がある点に注意).

3.1.1 畳み込み層

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

畳み込み層は,古くからの画像処理用の2次元畳み込み操作(=空間フィルタリング)をそのまま学習可能な層としてニューラルネット向けに用いたものである.畳み込みに用いる学習可能な$n \times n$の$2次元関数のことを,古典的な画像処理と同様にフィルタと呼ぶ (※ ただし,畳み込み層の記事書いたように,実際のCNNでは相互相関で代わりに実装されていることが多い).

ImageNetなどから学習した物体認識CNNでは,(1,2 節でも既に述べたように) 入力に近い方から順に,各畳み込み層のフィルタに,それぞれ以下の画像特徴が学習されていることに(おおよそ)相当する:

  • 低レベル特徴(コーナーやエッジや色など)
  • 中レベル特徴(小さなパーツ単位)
  • パーツの組み合わせに相当する大きさの中レベル特徴(モチーフ単位)
  • 高レベル特徴(物体全体を表現する,物体検出器のような応答)

CNNを順伝搬すると,これら「階層的な学習済みフィルタの応答」が,順に各層で組み合わされていき,最終的に終盤の層で,各物体クラスが応答として出現する.

3.1.2. 全結合層

全ニューロン同士を線形結合でつなぐ層を,全結合層(fully connected layer)もしくは線形層(Linear layer)と呼ぶ.2層間の全ニューロン同士に,重みスカラーとバイアスを用意する.古典的な3層MLPの時代から用いられている層である.

画像認識CNNにおいては,終盤の識別器部分の層でのみ,この全結合層を用いることが多い(LeNetAlexNetを参照).畳み込み層だけ繰り返していると,特徴マップが$C \times W \times H$の3階テンソルのままであり,これでは出力の$N$クラスの各確率を示すベクトルと次元数が合わないし,学習のためのロスも計算できない.そこで,CNNの終盤では全結合層を利用して平坦化することで,$C \times W \times H$のテンソルの特徴マップから$N$次元ベクトルへと変換し,最後の出力層との次元調整を行う.

3.1.3 プーリング層

最大値プーリング(Max Pooling)
図3 最大値プーリング(Max Pooling))

局所範囲内の代表値のみからダウンサンプリングされた特徴マップを得る処理をプーリング(Pooling)と呼ぶ.プーリング層は,そのプーリング処理を用いてサブサンプリング(subsampling)を行い,特徴マップの解像度を下げる層である.前層の畳み込みで得た特徴量マップに対して,Max, Averageなどの操作を用いて,特徴マップの縦横の局所範囲ごとに(例:$2 \times 2$ごとに) 代表値1つだけを選んで,局所空間範囲ごとの特徴集約を行い,新しい特徴マップを取得する.

CNN向けの代表的な局所プーリング層は,平均プーリング層と最大値プーリング 層(図3)である.プーリングを行うことで,特徴マップ上の各$(x,y)$がとらえる情報の元画像における対応範囲が広くなっていく(= 受容野が広まる).

ちなみに,プーリング以外の需要野拡大方法としては,セグメンテーション問題向けの膨張化畳み可変畳み込みなども使われている.

3.1.4 活性化関数層

畳み込み層と全結合層は,「重みとバイアス」を用いた線形(アフィン)変換を行う.従って,これら線形の部品だけでCNNを構成するだけだと,線形のままなので表現力に限界が出てしまう.

そこで,畳み込み層・全結合層の出力の各ニューロンに対して,tanh や ReLU などの活性化関数が適用される.ここでの活性化関数は,各フィルタの応答が強かった空間領域をより強調しながら,なおかつそれ以外の小さい応答は抑えて調整する検出器目的で用いられる.また,ReLUなどを導入すると,各隠れ層において非線形の表現を得ることができ,線形層だけでは解けない問題も,ネットワーク全体で複雑な(その問題を解くのに)良い表現を学習しやすくなる.

ReLU 【活性化関数】
ReLU系の活性化関数.ReLUとその発展型(SwishとMish)
図4 ReLU

ReLU (Rectified Linear Unit)は,$g = max\{0,x\}$で表される,CNNやその他DNNでよく用いられる活性化関数である(図4).前世代の3層MLP向け活性化関数と比べて,ReLUだと,勾配消失問題を回避して,深いモデルをきちんと学習させやすい.よって,ReLU型の活性化関数は,多くのCNNで使用される.

また,ReLU型の関数は系列モデルのRNNや,系列対系列変換モデルseq2seq with attentionやその後の Transformer)でも,隠れ層向けの活性化関数として用いらている.

2017年頃までは(改善手法は提案されるものの)ReLUが人気であったが,2018年以降はReLUの代わりに,「ReLUの発展型」が使われることが増えてきた.たとえば,BERTで採用されたgeLU(Gaussian Error Linear Unit)や,Swishなどがよく使われはじめている.

3.1.5 損失層

識別CNNでは,最終出力として「クラス確率」を出力したい.そこで,直前の全結合層でクラス数$C$個のニューロンの出力になっているものを,softmax 関数などの確率的正規化を用いて,$C$個の出力の合計が1となるようにする層を用いる.また交差エントロピー損失関数などを用いて,学習データとの損失を計算するのも,この損失層が担当する.

SoftMax関数

関連記事:softmax 関数 [活性化関数]

クラス識別問題のCNNの出力直前では,softmax関数を用いて,クラス識別値の確率分布化される(出力ベクトル全体の合計を1にする).softmaxは $\arg \max$処理をソフト化する.これにより,CNNの最終出力として,softmax後のカテゴリカル分布として,(全要素の和が1の)$K$次元確率値ベクトルを出力できる.

3.2 層間接続

3.2.1 スキップ接続

スキップ接続(skip connection)
図 スキップ接続(skip connection)

スキップ接続 (skip connection)は,ショートカットして離れた層間を迂回経路で接続して,遠くの層へ特徴マップをコピーできるようにする接続である.セマンティックセグメンテーション向けのネットワーク構造として当初提案されたFCN(Fully Convolutional Network) や,医用画像向けのU-Netなどで,効果を初めて確認された仕組みである.

スキップ接続の目的は「何度も畳み込み層プーリング層を経て消失してしまう低レベル特徴も,後半の層に直接伝えてしまえば,生き残らせることができる」点にある.

3.2.2 ResNetと残差接続

ResNetの残差ブロック
図5 ResNetの残差ブロック

ResNet [He et al., 2016] の論文では,過去のバックボーンであるVGGNetなどよりも更に多層化したCNNを学習できるようにする目的で,残差接続(=スキップ接続)を用いた残差ブロックが提案された(図5).残差ブロックを直列に多数接続したResNetでは,スキップ経路(図5の右側 Identity mapping)を多数経てスキップを続けることで,奥の方の層にも誤差をたくさん逆伝播できる.よって,非常に深い50~150層のCNNを,短時間かつうまく最適化できるようになった(詳しくはResNetの記事を参照).

ResNet論文 [He et al., 2016] での,「identity connection (恒等関数接続)」という呼び方は,間の層をスキップして繋げるより一般的なスキップ接続(3.2.1)と,実質同一の仕組みを指している.しかし,ResNetでは,残差ブロックで,残差関数とペアで使われるスキップ接続について「残差接続」という別の呼び名が付けられてしまっており,理解していないと少し呼びワケがややこしい.

一方,ResNetや3.2.3節の文脈では,「たくさんの層を一気にスキップして後半の層に繋ぐ」ようなスキップ接続は「ショートカット接続」と呼ぶことも多い

3.2.3 更に長いスキップ接続

ResNet のスキップ接続は,残差ブロック単位での「短い」スキップ接続の連続であるが,更に「長い」層間をスキップ接続する提案も,その後続いた.

HighWayNetworkやDenseNetでの使用

ResNetの同時研究である Highway Network [Srivastava et al., 2015]は,層間を「長いスキップ接続 + ゲート機構」を用いてショートカットする構成のCNNである.Highway Networkを一般系とみなすと,ResNetは「Highway Networkの特殊系の1つ」と捉えることもできる.

また,DenseNetでは,Denseブロック内の各残差サブブロック間を,全てスキップ接続した「ブロック構造」を採用したことで,残差ブロックの改善が提案された.これにより,序盤の層が混ざらずにそのままブロック最後まで直接伝搬できるので,識別能力が向上する.学習時もいっきに序盤層までスキップ接続でショートカットして勾配が伝わるので,勾配消失を避けることができるようになり,学習の安定性・高速性の向上につながった.

U-Net以降の「砂時計型構造+スキップ接続」

医用画像向けセマンティックセグメンテーション向けに当初提案されたU-Net でも,序盤の層と終盤の層をつなぐ,長いスキップ接続を,各解像度で使用するネットワーク構造「砂時計型構造+同解像度同士のスキップ接続」が提案された.

また,pix2pixでも U-Net構造が採用されて以降,画像対画像変換(Image-to-Image Translation)モデルでも広く使用され,多くの画像Encoder-Decoderの基盤アーキテクチャとなったといえる.人物姿勢推定で提案された Stacked Hourglass Networkも,(名前の通り)U-Net的な残差付きブロックの繰り返し構造である.

※ [2022年2月追記].ただし,2018年頃以降は,物体検出向けのDeep Layer Aggregationや,人物姿勢推定向けのHigh Resolution Network(HRNet)など,階層化とスキップ接続の2つを組み合わせたバックボーンが,各タスクむけに多く用いられる.U-Netのように「U型とスキップ接続」だけで頑張ることは少なくなった.

4. CNNの最適化

4.1 重みと入力の初期化

学習をSGDで行う前に,CNNでは各線形層(畳み込み層+全結合層)の重みパラメータの初期化を,よく使われる「He初期化」で行う.よい初期化値からスタートしないと,深いCNNは勾配損失などで止まってしまいがちで,うまく最適解近くまで学習できないからである.

また,入力の初期化として,ImageNetで(事前学習)する場合には,ZCAアルゴリズムによる白色化を行い,全ての入力画像の画素値を,統計的に中心とスケールを揃えておくことを行う.バッチ正規化が登場以降は,学習中に各バッチ正規化層でもスケールの調整が行われるのでよいが,初期のCNNでは,ZCAでスケール調整しておくことが,安定した学習には重要であった.

4.2 SGDによるバッチ学習

CNNの学習可能な各層のパラメータ学習は,損失関数から得られる誤差をその層まで逆伝搬 (back propagation)することで行う.これは,伝統的な3層パーセプロンと同様である.しかしその過去の3層時代のニューラルネットとは異なり,CNNは4層以上の多層モデルでありパラメータ数も膨大であり,モデルの学習対象の学習データセットも巨大である.したがって,学習サンプル全てを同時にメモリ上にロードしておき,一気に勾配降下法により学習を行うことは,計算資源的に不可能である.

そこで,CNNや深層学習全般では確率的勾配降下法 (Stochastic Gradient Descent: SGD)を用いて,ミニバッチ毎の勾配でオンライン学習を行うバッチ学習を標準的に使用する.SGDでは,学習データからランダムサンプリングした N= 8 ~ 128 個ほどのサンプルの塊 (この$N$個のサンプルの塊をミニバッチと呼ぶ)を用いて,近似パラメータ更新を繰り返すことによりCNNの最適化を行う.

4.2.1 損失関数

CNNをクラス識別ラベルからSGDで学習する際は,その損失関数として交差エントロピー損失(Cross Entropy Loss)が標準的に用いられる.また,回帰CNNの場合は,平均二乗誤差(MSE: Mean Squared Error)が損失関数として用いられる.

4.3 SGD最適化の改善

ディープニューラルネットをSGDでバッチ学習では,もしパラメータ空間中の狭い谷にはまると,ロスが低い方向にしか移動できないので,ハマった谷の谷底にある局所的最小解で収束して抜けられなくなり,学習がそれ以上進まない課題があった.

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

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

4.4 データ拡張

ディープニューラルネットワークは,深く階層的な表現を学習できるのが利点である.その反面,データ量・分布に対してパラメータが過剰に多すぎるモデルあるので,データセットの規模がよっぽど大きくないと過学習しがちである欠点も持つ.CNN自体のパラメータを更に減らすことは難しいので,過学習を防ぐには少しでも多くのデータが欲しい.しかし,現実には教師あり学習で画像認識CNNを学習する際は,最低でも数万枚の画像を用意する手間が発生するので,ラベル付けのコストが非常に高い.

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

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

4.5 バッチ正規化 (batch normalization)

バッチ正規化
図6 バッチ正規化

CNNの学習時には正規化および学習の高速・化の目的で,バッチ正規化 (Batch Normalization)層を用いることが多い(図6).バッチ正規化を用いると,CNNの学習時間の短縮ができ,安定した収束も達成できる.AlexNetで提案された局所応答正規化が,CNN初期では層ごとの出力の正規化に用いられてたが,バッチ正規化登場以降はバッチ正規化が好んで用いられている.

バッチ正規化層では,学習中のSGD中に得るミニバッチの特徴マップ群$\mathcal{B}= \{x_i\}^{m}_{i=1}$に対し,「チャンネル単位」でミニバッチ全体の平均・分散を用いたニューロン値$x_i^(c)$の正規化を行い(平均0, 分散1にするので,統計の用語で言う「標準化」),その後に全体をスケーリングする$\gamma$でシフトする.

4.5.1 バッチ正規化の目的と挿入箇所

本来は入力訓練サンプル全体の白色化と同様に,各隠れ層の入力もそれぞれ白色化して統一しておけば,SGD学習は安定・高速に進むはずである.しかし,その場合はデータセット全体からの行列の固有値計算を,学習中の各中間層で解くはめになり,計算コストが高く現実的ではない.

そこで,各隠れ層にバッチ正規化層を挿入すると,隠れ層の出力表現 $\bm{x}^{(t)}$を,学習中にオンラインで正規化することができる.各隠れ層の各特徴の分布が,各チャンネルで揃っていくおかげで,深いCNNでも安定・高速なSGD学習をおこなうことができる.また,バッチ正規化を用いると,大雑把なパラメータ初期値からも収束できるようになるので,ネットワーク初期化の難しさや煩わしさからも解放される.

また,バッチ学習では正規化するためのバッチ分布がランダム化されていることにより,(多少の)正則化効果も得ることができる.これにより,バッチ正規化登場までCNNには正則化目的で標準的に用いられていたDropoutの必須性が無くなり,バッチ正規化で代替されることとなった.

4.5.2 CNNのブロック構造 (バッチ正規化の登場以降)

CNNの基本構造(バッチ正規化あり)
図7 バッチ正規化登場後の,CNNのブロック構造

バッチ正規化層は,畳み込み層の後,ReLUの手前の場所に毎回配置する.従って,バッチ正規化層が登場して以降は,1.1節で述べたCNNの基本的な層順「畳み込み層-ReLU-プーリング」にバッチ正規化層も加わり「畳み込み層-バッチ正規化-ReLU-プーリング」のブロック構造へと変わった(図7).

4.5.3 バッチ正規化の発展型

オリジナルのバッチ正規化では,バッチ数$N$が小さいほど精度が落ちる.しかし,画像入力を用いる深層学習では,GPUメモリー量的にバッチサイズの限界があるゆえ,あまり大きなサイズのバッチ数を用いることはできない.

そこで,バッチ数が少なめのサイズでも,安定したバッチ正規化が行いやすいグループ正規化が提案されて,物体検出やセマンティックセグメンテーションなどで使用される.

また自然言語処理では,RNNLMや,seq2seqTransformerなどでは,可変長系列において正規化を行う必要があるゆえ,レイヤー正規化がよく用いられる.同様に,音声認識やTTSなどの音声合成でも,可変長系列データなので,レイヤー正規化に頼ることとなる.

5. まとめ

この記事では,CNNの代表的な構成要素と,その学習方法についてまとめた. より具体的には,ResNetバッチ正規化が登場して,その後のCNNの基本形が固まったといえる「2015~2016年ごろ」あたりまでのCNNに関する基本事項を紹介した.

一方,冒頭の繰り返しであるが,この記事は,物体認識CNNのスクラッチからの学習に限定して構成した.事前学習や,転移学習(ファイニンチューニング)などの話については,この記事では述べていない点に注意されたい.

この記事では,CNNの全体像を,コンパクトに1つの記事だけにまとめておくことで,いつもこの記事に戻って全体像を俯瞰・復習できることを重視した.従って,個別の構成要素の詳細については,このサイトの各子記事をたどってもらうか,もしくは書籍やWebなどで他の学習教材で詳細を確認していただきたい.以下,便利なCNNの学習教材を少しだけ紹介しておく.

[オマケ] Web上のCNN学習教材

お馴染みの資料の「A. Karpathy 氏が Stanfordの授業のTAだったころに作った,CNNのチュートリアルページ」が,初心者にはとても参考になる:

CS231n: Convolutional Neural Networks (CNNs / ConvNets)

CNNの詳細な挙動を1ページにまとめてあり簡潔に知れる.その上,このページのわかりやすい「特徴マップ計算の可視化図」は,その後いろいろなところで見かける.

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

Lecture 1 | Introduction to Convolutional Neural Networks for Visual Recognition

更に,右側サイドバーのリンク集には,おなじみのCS230 CNNチートシート/ RNN チートシートへのリンクを追加しておいた.(※ このリンク集ウィジェットには,厳選した使用頻度の高そうなリンクを集めているので,普段から有効活用していただければと思う).

関連書籍

References

  • [Kingma et al., 2014] Kingma, Diederik P., and Jimmy Ba. “Adam: A method or stochastic optimization.” arXiv preprint arXiv:1412.6980 (2014).
  • [Krizhevsky et al,. 2012] Krizhevsky A, Sutskever I, Hinton GE. ImageNet classification with deep convolutional neural networks. NeurIPS. 2012
  • [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).
  • [Zeiler et al., 2014] Zeiler, Matthew D., and Rob Fergus. “Visualizing and understanding convolutional networks.” In , ECCV 2014.

参考外部サイト