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

1. CNN の概要

畳み込みニューラルネットワーク(Convolutional Neural Networks, CNN) とは,畳み込み層(convolutional layer)もしくは全結合層を,学習可能な層として4層以上合計で用いるディープニューラルネットワークのことを指す.

この記事では,畳み込みニューラルネットワークの概要の基本的な解説を行う.CNN を構成する各モジュール(畳み込み層/Pooling層/skip接続など)と,学習方法工夫 (データ拡張/バッチ正則化)について説明する.最後に,CNN の基本的仕組みを手短に復習できるWebサイトも紹介する記事の概要を示す.

第3次ニューラルネットブーム初期の頃は「CNN」と言う場合には, ImageNet-1000クラスから学習する「画像の大規模クラス間識別」の問題に用いるCNNのことのみを主に指していた.それが,その後CNNが,物体検出セマンティックセグメンテーションなど様々な問題向けでも応用されるようになり,VGGNet, InceptionNet, ResNet などのCNN構造が,エンコーダ(Encoder)として「画像から特徴ベクトルを抽出する部分ネットワーク」に使用される.様々な問題で用いられる代表的なCNN構造のエンコーダ部分のことを(CNNの)バックボーン (背骨) 部分と呼ぶのが通例である (2.2節).

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

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

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

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

また,畳み込み操作とプーリング層の恩恵により,画像中のどこに対象物体が登場しても認識可能である平行移動不変性(translation invariance)をCNNは獲得している.そして,Deep Learning 登場以前の画像認識システムと同様に,対象物体の局所変形 (local deformation) に対する頑健な学習も行うことが可能である.(※ 正確には,局所だけでなく,中間的な大きさの各パーツの歪みにも強い)

CNNは,入力画像が各層の処理を経ていく中で,各畳み込み層の(学習済み) 畳み込みカーネル (=画像フィルタ) と活性化関数の組み合わせが,古典的な画像処理の「画像フィルタ + Non maximum supression(NMS)」の組み合わせと同様に,画像の特徴を各解像度において捉えてゆく(図1).CNNの順伝搬では,前層の$i-1$番目の畳み込み層の各カーネルで畳み込まれた応答結果である特徴マップ (feature map)に対して,また次の$i$番目の畳み込み層の畳み込みカーネル群によって畳み込みを行い,更に別の特徴マップを得る.

畳み込み,活性化関数のあとは,プーリング層(pooling layer)を用いて,代表的な特徴だけを残しながら特徴マップの空間解像度を減らし,小・中・大の画像解像度のそれぞれにおいて,畳み込みカーネルに対する平行移動不変性(Translation Invariance)を獲得していく.この「特徴マップの特徴マップを獲得する作業」を何層も繰り返すことで,CNNは画像の特徴を階層的にとらえて,クラス識別や回帰などの出力が楽に(=終盤の全結合層だけで)推定できるようにしていく.

tanh,シグモイド,ReLuなどの活性化関数は,畳み込み層で捉えた応答のうち,値の高い場所だけ強調してよりシャープにする微分可能関数を用いる.特徴マップ上の高い応答値だけを強調して活性化し,畳み込み後の表現を非線形化する.また$0~1$や $-1 ~1$の範囲に特徴マップの値を閉じ込める正規化の役割もある (そもそもこの目的で,tanh やシグモイド関数が選ばれた).

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

1.2 記事の構成

CNNは各種応用や歴史があまりに多すぎるのもあり,この記事で「CNNの基本的な仕組み・構成要素」を整理することにのみ焦点を絞りたい.

よって,2節以降では以下の構成で,CNNの仕組みと構成要素について主に紹介していく:

  • 2 CNNの直感的イメージと,代表的なバックボーン一覧.
    • 2.1 CNNが学習するもの:大規模データから得られた階層的な画像特徴群.
    • 2.2 代表的なバックボーン構造
  • 3 CNNの構成要素
    • 3.1 層の種類 (畳み込み層/全結合層/プーリング層/活性化関数)
    • 3.2 層間接続による拡張 (スキップ接続)
  • 4 CNNの学習
    • 4.1 SGDによるバッチ学習
    • 4.2 SGD最適化の改善
    • 4.3 データ拡張
    • 4.4 バッチ正規化
  • 5 まとめ および CNNに関するおすすめWeb学習教材

2CNNの直感的イメージと,代表的なバックボーン一覧.

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

2.1 CNN が学習するもの:大規模データから得られる階層的な画像特徴群

1つ前の世代の画像認識システムの代表であるSVMやRandom Forestなどを用いたシステムでは,多くとも「10~30クラスの識別モデル」を高精度に学習するのが限度であった.これは,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)のおかげで,旧来の「三層パーセプトロン」と比べると,画像認識用途において「処理効率化 + メモリの省力化」を実現できる.これによりDeep Neural Networkの応用が現実的となった.

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

また,その後,ResNet論文における 残差ブロック(2.2節 B)の提案以降「更に深いネットワーク(更に深い表現)」が学習ができるようになり,CNNの認識精度が更に向上する.初期によく用いられていたAlexNetやVGGnetなどのCNNは,深いと言えどせいぜい7~10層程度の層の深さであった.それが,ResNetでは50層-150層にもおよぶ深いネットワークをうまく学習できるようになり,AlexNetやVGGNetよりもスケールできるようになった.

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

AlexNetの登場後しばらくの間は,CNNは「ImageNetを用いた大規模クラス識別のタスク」のみに,主に使用されていた.それが,物体検出セマンティックセグメンテーションなどの他のタスク向けにも,特徴抽出部分であるCNNの背骨(バックボーン)として,VGGNet,InceptionNet,ResNet 等のCNN構造が使用されることになる.

また,「CNNバックボーンは,新たに学習したいデータセット向けに,ある程度近い初期パラメータを備えている」という前提で,学習済みバックボーンを初期重みパラメータとして用い,そのCNNを他タスクのラベルを教師として転移学習させることが多い.

LeNetの構造
図2 LeNetの構造

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

また,モデル軽量化路線での代表的バックボーンには例えば以下のようなものがある

  • MobileNet (2017)
  • MobileNet v2 (2018)
  • ShuffleNet
  • EfficientNet

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

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

3. CNN の構成要素

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

3.1 層の種類

標準的なCNNでは「畳み込み層 – 非線形化層で得られた特徴マップを,プーリングして解像度を落とす」処理を,複数回繰り返す設計となっている.各畳み込み層において,複数の視覚野領域で画像の特徴をとらえた特徴マップ(feature map)を計算することができる.AlexNetが,大規模画像認識において,旧来の手法の性能を大きく凌駕したところから,コンピュータビジョン業界界隈でのCNNの流行が始まった.

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

3.1.1 畳み込み層

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

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

ImageNetなどで学習したCNNでは,(既に述べたように) 各畳み込み層において入力に近い方から順に,「低レベル特徴(コーナーやエッジや色など)」=>「中レベル特徴(パーツ単位)」=>「パーツの組み合わせに相当する特徴(モチーフ単位)」=>「高レベル特徴(物体全体に対する物体検出器のような応答)」がそれぞれ学習されていることに(おおよそ)相当する.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向けの代表的なプーリングには,平均値プーリング(Average pooling)最大値プーリング(Max pooling) (図3)がある.プーリングを行うことで,特徴マップ上の各$(x,y)$がとらえる情報の元画像における対応範囲が広くなっていく(= 受容野が広まる).

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

3.1.4 活性化関数層

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

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

ReLU
図4 ReLU

ReLU (Rectified Linear Unit)は,汎化性能低下の悪影響をあまり受けないままに,高速に学習を行える活性化関数である(図4).ReLUは勾配消失問題(banishing gradient problem)を回避でき,それでいて旧来のニューラルネットワークのシグモイド関数やtanhを予測精度でも上回ることができる.ReLUやその発展型は,CNNやRNNにTransformerなどの各隠れ層の活性化関数として用いられる.

3.1.5 損失層

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

SoftMax関数

クラス識別問題のCNNの出力直前では,Softmax関数を用いたクラス識別値の確率化 (全体の合計を1にする)が行われる.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$)のニューロンの値であり,分母の「全クラス分の指数和」を用いて分子の合計1となるよう正規化される.この結果CNNの最終出力として,softmax後のカテゴリカル分布として(全要素の和が1である)$K$次元確率値ベクトルを出力できる.

3.2 CNN の層間接続による拡張

3.2.1 スキップ接続

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

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

3.2.2 残差接続 (residual connection) と ResNet

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

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

この残差ブロックを連続的に直列したネットワーク構成により,ResNetでは各残差関数に少しずつだけ誤差を逆伝播できるようになり,高い識別精度を保ちながらのすごく深いCNN(50層~150層ほど)の学習を初めて実現できた.

(※ ResNet論文で用いられている残差ブロック内の「identity connection (恒等関数接続)」という呼び方は,間の層をスキップして繋げる「スキップ接続」と同一のものを指しているのだが,[He et al., 2016] では別名が付けられてしまっているのでややこしい.また,ResNetの文脈ではスキップ接続のことを「ショートカット(shortcut)」と呼ぶことも多い)

3.2.3 更に長いスキップ接続

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

ResNetと同時期に行われた並行研究である Highway Network [Srivastava et al., 2015]は,層間の長い「スキップ接続 + ゲート機構」の構成のCNNである.このHighway Networkを一般系とみなすと,ResNetはその特殊系の1つであると捉えることもできる.また,DenseNet (Densely connected CNN)では,全ての層間を互いにスキップ接続するCNNバックボーン構造が提案された.

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

4. CNNの学習

4.1 SGDによるバッチ学習

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

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

4.1.1 損失関数

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

4.2 SGD最適化の改善

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

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

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

4.3 データ拡張

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

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

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

4.4 バッチ正規化 (batch normalization)

バッチ正規化
図5 バッチ正規化

CNNの学習時には正規化および学習の高速・化の目的で,バッチ正規化 (Batch Normalization)層を用いることが多い(図5).バッチ正則化は,学習時間の短縮目的と安定した収束が達成できるので,好んで用いられている.

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

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

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

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

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

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

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

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

4.4.3 バッチ正規化の発展型

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

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

また,RNNやLSTMやTransformer・BERTなど,可変長系列で正規化を行う必要のある自然言語処理向けには,レイヤー正規化(Layer Normalization)が標準的に用いられている.

5. まとめ

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

DenseNet や SE-Networkなど,2017~2018年の時期以降の代表的なバックボーンに用いる技術や構成要素については,この記事ではあまり触れていない.すなわち,それ以前の時期の「ResNet」や「バッチ正則化」が登場した2015~2016年のあたりまでのCNNに関する基本事項をこの記事では紹介した.

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

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

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

CS231n: Convolutional Neural Networks (CNNs / ConvNets)

CNNの詳細な挙動を簡潔に知れる上に,このページのわかりやすい「特徴マップ計算の可視化図」は,その後いろいろなところで見かける.正直なところ「CNNの畳み込みや特徴マップの図解」については,このKarpathy氏が書いたページの各図解で学んで頂いた方が早い.この記事でも,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).

外部参考サイト

関連記事