1. CNN (畳み込みニューラルネットワーク) とは [概要]
CNN (Convolutional Neural Network, 畳み込みニューラルネットワーク)とは,学習可能な畳み込み層を含んだ4層以上から構成されるディープニューラルネットワークのことで,画像認識タスクの多くに用いられる.CNNの主な処理が畳み込み層を用いた画像の2D畳み込み(空間フィルタリング)であることから,畳み込み(ディープ)ニューラルネットワークと呼ぶ.
この記事では,わかりやすく,CNNの基本的な構造と各部品の紹介を行う.そして,CNNを構成する各層(layers)や,学習の工夫などついて説明する.各モジュールの詳細は,小記事をたどっていただきたい.
また,この記事は,初期のCNNバックボーンを例として,ImageNetからのスクラッチからの学習をおこなう際の話にフォーカスした記事として構成している.したがって,CNNの事前学習や,各別タスクへのファイン・チューニングについても,各記事を参考していただきたい.
CNNの畳み込み層(2D)の詳しい仕組みもこの記事中では述べないので,以下の記事を参考のこと:
CNNは,ImageNet登場以降は,VGGNetやInceptionNetなど,当初は物体認識向けに研究されはじめた.その他の画像認識タスク系の各ネットワークでもバックボーンとして使用されていった.具体的には,物体検出やセマンティックセグメンテーションに人物姿勢推定や,画像の深層生成モデルや,画像対画像変換などの,様々な画像認識・画像生成系のタスクでResNet系のバックボーンが使用されるようになった.つまりは,ほとんどのコンピュータビジョン問題に対して,CNNは根幹的なネットワーク構造(あるいは構成パターン)となっていった.
1.1 記事の構成
CNNは各種応用や歴史があまりに多すぎるのもあり,この記事では「物体識別向けにImageNetで学習するCNNの,基本的な仕組み・と各層の要素」を整理することにのみ焦点を絞りたい.
以降では以下の構成で,CNNを紹介していく:
- 1 概要
- 1.2 主な構成要素と特徴
- 2 CNNの直感的説明と,代表的な構造
- 2.1 CNNが学習するもの
- 2.2 代表的なCNNバックボーン構造
- 3 CNNの構成要素
- 4 CNNの学習
- 5 まとめ および おすすめWeb学習教材
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 主な構成要素と特徴
図1は,CNNの基本的な層の構成例 [旧式] を,特徴マップの変化とともに示したものである.CNNでは図1のように [畳み込み層 x N回 – ReLu – プーリング層] を1ブロックとして構成する.この基本ブロックを(直列的もしくは並列的に別ブランチにわけて)繰り返しつなげる構造が,典型的である.
CNNの処理(順伝搬)の手順
- 入力:3チャンネルカラー画像
- 序盤層から中盤層(バックボーン):上記ブロックの繰り返し順伝搬により特徴マップ(※ 畳み込み層の記事を参照 )を徐々に更新し,画像から特徴抽出を行う.
- 終盤層 (ヘッド): 全結合層とsoftmax
- 出力:クラス識別確率をone-hotベクトルで出力する.
1.2.1 導入された主なしかけ
CNNでは,畳み込み層をDNNへ導入した.この恩恵により,画像/特徴マップの各空間位置$(i,j)$における畳み込みで,「全て同じ(重み値の)カーネルを用いて畳み込みをおこなう」重み共有(weight sharing)の仕組みを採用できた.おかげで従来の3層パーセプトロン(全結合層がメインの層)と比べて,CNNは「省モデル化」と「高い物体認識精度」を実現できるようになった.
また,プーリング層の恩恵により「画像中のどこに対象物体が登場しても認識可能である」という平行移動不変性を獲得した.これにより,以前の画像認識モデルと同様に,CNNも対象物体の(各スケールにおける)局所変形に対して頑健な認識を行える.
1.2.2 主要な3種の層
CNNの順伝搬では,「(1) 畳み込み層 – (2)ReLU型の非線形活性化関数」の,繰り返しにより,各解像度での,特徴マップの(1)フィルタリングと(2)活性化が行われる (図1).このペアは,古典的な画像処理の「(1) 畳込み(空間フィルタリング) – (2) 非極大値抑制(NMS)」と同じような働きに,それぞれ対応していおり,入力画像の特徴を,各解像度において階層的に捉えることができる.
また(1),(2)の間には,(3)プーリングを用いて解像度をダウンサンプリングする(図1).代表的な特徴だけを残しながら各チャンネルの特徴を,2D空間で集約しつつ,空間解像度を減らしてい.これにより,小・中・大の各画像範囲で平行移動不変性を獲得できる.
CNNの順伝搬では,前層の$i-1$番目の畳み込み層でフィルタリングした結果の特徴マップに対して,また次の$i$番目の畳み込み層で順伝搬し,更に新たなフィルタリングされた特徴マップを得る.この繰り返しにより,画像特徴を階層的にとらえて線形識別しやすい特徴マップに変換していってくれる(もとい,そうなるようCNN全体がEnd-to-End学習される).
1.2.3 特徴マップが捉える物
CNNの活性化関数には,畳み込み層で捉えた応答のうち,値の高い場所だけ強調してよりシャープにする微分可能な関数を用いる.特にReLU型の活性化関数を用いる.
特徴マップ上の,高い応答値だけを強調して活性化することで,畳み込み層で畳み込んだ後の表現をReLU系関数で非線形化するわけである.また,これには,0〜1や -1 〜1の範囲に特徴マップの値を閉じ込める正規化の役割も兼ねている (そもそも,以前はこの目的でtanh やシグモイド関数が選ばれていた).
学習済みCNNの順伝搬を行うと,各クラスの教師ラベルに関連が強い(画像上の2次元)領域の応答が強くなるよう,各層を経るごとに徐々に特徴マップが洗練されていく.そして,終盤では全結合層やグローバル平均プーリングを用いて容易に識別・回帰できる.
2. 直感的説明と代表的構造.
CNNは,初心者からすると何を狙って,どのような処理を行なっているかが,直感的にわかりづらい.
そこで,3節の「層の詳細説明」に入る前に,CNNが学習する「階層的で巨大な画像特徴空間」と,CNNの性質について話しておき,直感的なイメージしやすくする(2.1節).また,CNNの代表的なバックボーン例も,先にリスト化して概要紹介する(2.2節).
2.1 CNNの学習のイメージ
1つ前の世代の物体認識システム(予測モデルにはSVMやRandom Forestsなどを使用)では,多くとも「10~30クラス」を識別するモデルを,高精度に学習するのが(1モデルでは)限度であった.これは,Pascal VOC 2007 などの当時の物体認識チャレンジで,よく取り組まれていた難易度のクラス数である(古典的な単一クラス物体検出 の記事も参考になる).
それに対して,物体認識CNNでは,ImageNet データセットの1000クラス以上の多種多様な物体クラスを,1つの大規模CNNで一挙に識別できるようになった.ただし,その分,各畳み込み層に128個や256個のカーネルを持つような,パラメータ合計数が非常に多い.よって,過学習に弱く,モデルの正則化(ドロップアウトや,データ拡張,バッチ正規化など)が非常に重要である.また,パラメータ数が多いので,学習の高速化・安定化も大事である.
学習済みのCNNでは,終盤層の特徴マップほど,高レベル特徴(物体全体領域のクラスごとの特徴)が,畳み込み層に学習される.逆に,序盤層の特徴マップでは,など低レベル特徴(エッジ・色など)が畳み込み層へ学習される.
順伝搬中の,各特徴マップにおいて,,各空間位置$(x,y)$の持つ$C$(チャンネル数)次元の特徴ベクトルができる.これらのベクトルは,特徴マップ上の各$(x,y)$周辺の受容野の情報を集約した「周辺コンテキスト特徴ベクトル」に相当する.
2.1.1 深くできる理由:正規化と残差接続
また,ドロップアウトやバッチ正規化に,データ拡張などのディープニューラルネット向け正則化が発展してきた恩恵により,過学習せずに深い大規模CNNを学習できる.おかげで,大量のデータや大量のクラスに対するビッグデータ問題にも適用できるというパラダイムシフトが達成された.
更にその後,ResNetおよび残差ブロック(3.2.2節)が提案されて以降,更に深いネットワーク(=更に深い表現)が学習ができるようになり,CNNの認識精度がもう一段階大きく向上していく.初期CNNのAlexNetやVGGnetなどは,深いと言ってもせいぜい7~10層程度の層の深さであったのが,ResNetでは 50層~150層にもおよぶ深いネットワークを性能劣化無しに学習できるようになった.
2.2 代表的なバックボーン構造
AlexNetの登場後,しばらくの間は,まずCNNは「ImageNetを用いた大規模クラスによる物体認識」のタスクにのみ使用されていた.それが,以前からコンピュータビジョンで既に取り組まれていた他の画像認識の問題にもCNNが使われるようになる.例えば物体検出,セマンティックセグメンテーション,人物姿勢推定などの向けにCNNでも,VGGNet,InceptionNet,ResNet・ResNext等の,物体認識むけCNNが,各タスク向けCNNの背骨(バックボーン)として使用され始めた.
物体検出などのタスクむけのデータセットにCNNを学習させるには,以下の「ファイン・チューニングを使用した転移学習 」(ImageNetで事前学習→精密調整 )を実施する「2段階学習」が通例であった:
しかし,ResNetだと物体検出などのタスクでも,いきなり目的タスクのデータでスクラッチからの学習しても,画像認識精度を十分確保できることが判明してきた (※ 詳しくはスクラッチからの学習の記事後半を参照).
そのため,上記のような「事前学習→精密調整」の手順を行わないCNN学習も,各タスクでは普通になっていった.(これは古いテキストや記事だと触れられていないので,かなり重要点でもある)
※ CNNの後継候補として,2020年ごろ以降よく研究されている大規模モデルの「ViT (Vision Transformer)やMLP-Mixerなどで物体認識モデルを学習する場合は,ImageNet-21Kで事前学習をしたあと,ImageNet-1Kでファイン・チューニングするのが定番手順である.
LeNet(図2)の大規模化に成功した「AlexNet(2012)」の登場以降,初期は以下のCNNバックボーンが提案されていく:
- AlexNet (2012)
- VGGNet (2014)
- Inception v1 (GoogleNet) (2014) Inception v2 (2015), Inception v3 (2015)
- ResNet (2015) [※ 超重要]
- DenseNet (2016)
- ResNeXt (2017)
これらの代表的なネットワーク構造は「手動で」設計されてきた.また,最適なネットワーク構造自体を,強化学習などで自動探索するニューラル構造探索(Neural Architecture Search)の研究も活発になるる.
3節以降,これらの代表的なバックボーン構造を構成する要素.および学習方法について,簡単にだけまとめていく.
3. CNN の構成要素
3節では,2.1節で列挙したような代表的なCNNバックボーンで用いられる部品として,層の種類 (3.1節),層間の接続 (3.2節)について述べる.
3.1 層の種類
CNNの「層」について,それぞれ概要を紹介する.
※ End-to-EndにCNNを逆伝播で学習するために,微分可能な層(関数)のみでCNNを構成する必要がある点に注意.
3.1.1 畳み込み層
畳み込み層(convolutional layer)は,CNNやFCNの中心要素である.各畳み込み層では,その時点までの順伝搬で生成された$M$チャンネル分の特徴マップに対して,畳み込みを行う$k \times k$のカーネル$N$個を用意しておく.そして,入力の$M$チャンネル分の特徴マップに対して空間フィルタリング(畳み込み)処理を行い,$N$個のテンプレートパターン(カーネル)に応答した特徴マップを,出力として得る.畳み込みに用いる学習可能な$n \times n$の$2次元関数を,古典的な画像処理と同様にフィルタもしくはカーネルと呼ぶ
※ ただし,畳み込み層の記事書いたように,実際のCNNでは相互相関で代わりに実装されていることが多い.
物体認識CNNでは,(1,2 節でも既に述べたように) 入力に近い方から順に,バックボーン中の各畳み込み層のフィルタに,それぞれ以下の画像特徴が学習されていることに(おおよそ)相当する:
- 低レベル特徴:コーナーやエッジや色など.
- 低~中レベル特徴:小さなパーツ単位.
- 中~高レベル特徴:小パーツの中レベル特徴(モチーフ単位)
- 高レベル特徴:物体全体を表現する,物体検出器のような応答.
CNNを順伝搬すると,これら「階層的な学習済みフィルタの応答」が,順に組み合わされていき,最終的に終盤ヘッド層手前で,各物体クラスに相当する応答が出現する.
3.1.2. 全結合層
関連記事:全結合層 (fully connected layer)
全ニューロン同士を線形結合で接続(connect)している層を全結合層と呼ぶ.2層間の全ニューロン同士に,重みスカラーとバイアスを用意する.
画像認識CNNにおいては,終盤ヘッド層でのみ全結合層を用いることが多い.畳み込み層だけ繰り返していると,特徴マップが$C \times W \times H$の3階テンソルのままであり,出力の$N$クラスの各確率を示すsoftmaxベクトルと次元数が一致せず,「正解データとの識別の損失」も計算できない.そこで,CNNの終盤ヘッドでは,全結合層(やグローバル平均プーリング層)を利用して(平坦化された)$N$次元ベクトルへと変換することで,最後の出力層との次元調整を行う.
3.1.3 プーリング層
局所範囲内の代表値のみから,ダウンサンプリングして集約した特徴マップを得る処理をプーリング(Pooling)と呼ぶ.プーリング層は,そのプーリング処理を用いてサブサンプリングを行い,特徴マップの解像度を下げる層である.
前層の畳み込みで得た特徴量マップに対して,空間的局所範囲ごとに(例:$2 \times 2$ごとに) Max(最大値プーリング) or Average(平均プーリング)操作で,代表値1つだけを選び特徴集約を行い「ダウンサンプリングされた(集約済み)特徴マップ」を取得できる.この(局所)プーリングを行うことで,特徴マップ上の各$(x,y)$がとらえる情報の元画像における対応範囲が広くなっていく(= 受容野が広まる).
その後,プーリングの代わりに,膨張畳み込みや深さ単位分解可能畳み込みなども,効率的な受容野の拡大に使用されていった.
3.1.4 活性化関数層
線形層(畳み込み層と全結合層)とプーリング層だけでCNNを構成すると,全体表現も線形なので,非線形がなく表現力に限界が出てしまう.そこで,線形層の出力後に,後処理としてtanh や ReLU などの活性化関数が適用され,活性化が行われる.各フィルタの応答が強かった空間領域をより強調しながら,それ以外の小さい応答は抑えて調整する検出器(NMS)目的で用いられる.
また非線形型のReLUとその発展型の活性化関数を導入すると,各隠れ層において非線形の表現を得ることができ,全結合層だけでは表現できない予測問題を学習しやすくなる.
ReLUとその発展型
ReLU (Rectified Linear Unit) は,$g = max\{0,x\}$ で表される活性化関数である.CNN・DNN向けによく使われ,その後はTransformer系ネットワークでもGELUなどの「ReLU改善型」がよく使用されている(勾配爆発・勾配消失問題を回避して,深いモデルを学習できるからである).
2017年頃までは(改善手法は提案されるものの)ReLUが人気であったが,2018年以降はReLUの代わりに,各「ReLUの発展型」が使われることが増えてきた.たとえば,BERTで採用されたGELUや,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)は,離れた層間を迂回経路で接続し,遠くの層へと特徴マップを「間の層をスキップして直接コピー」できるようにする接続である.その目的は「何度も畳み込み層とプーリング層を経て消失してしまう低レベル特徴」も,後半の層に直接コピーしていまえば,生き残らせることができる点にある.
スキップ接続は,セマンティックセグメンテーション向けのネットワーク構造として当初提案されたFCN(Fully Convolutional Network) や,医用画像向けのU-Netなどで,効果を初めて確認された.
3.2.2 ResNetと残差接続
ResNet [He et al., 2016] の論文では,過去のバックボーンであるVGGNetなどよりも更に多層化したCNNを学習できるようにする目的で,残差接続(=スキップ接続)を用いた残差ブロックが提案された(図5).残差ブロックを直列に多数接続したResNetでは,スキップ経路を多数経てスキップを続けることで,奥の方の層にも誤差をたくさん逆伝播できる.よって,非常に深い50~150層のCNNを,短時間かつうまく最適化できるようになった.
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の学習可能な各層のパラメータ学習は,損失関数から得られる誤差をその層まで逆伝搬することで行う.これは,伝統的な3層パーセプロンと同様である.しかし,CNNは4層以上の多層モデルでありパラメータ数も膨大であり,学習対象のデータセットのデータ量も巨大であので,学習サンプル全てを同時にメモリ上にロードしておき,一気に学習する事は,計算資源的に不可能である.
そこで,CNNや深層学習全般では確率的勾配降下法 (Stochastic Gradient Descent: SGD)を用いて,ミニバッチ毎の勾配でオンライン学習を行う,バッチ学習を標準的に使用する.SGDでは,学習データからランダムサンプリングした N= 8 ~ 128 個ほどのサンプルの塊 (=ミニバッチ)を用いて,近似パラメータ更新を繰り返し,CNNの最適化を行う.
4.2.1 損失関数
CNNをクラス識別ラベルからSGDで学習する際は,その損失関数として交差エントロピー損失(Cross Entropy Loss)が標準的に用いられる.
また,回帰CNNの場合は,平均二乗誤差(MSE: Mean Squared Error)が損失関数として用いられる.
4.3 SGD最適化の改善
ディープニューラルネットをSGDでバッチ学習では,もしパラメータ空間中の狭い谷にはまると,ロスが低い方向にしか移動できないので,ハマった谷の谷底にある局所的最小解で収束して抜けられなくなり,それ以上は最適化が進まない課題があった.
そこで,1つ前ステップにおける重み更新幅(=速度)の$\delta w^(t)$も,勾配更新時に加えたモーメンタム項(慣性項)もSGD時に用いるのが標準的である.これにより,目的関数の更新が速くなって収束までのステップ数が減ることに加えて,狭い局所解の谷に一度ハマった際も,勢い(慣性力)を失わずに谷から抜け出て,大域解探索を継続することが可能になる.
当初,モーメント項の係数$\mu$は固定値で,経験的に手動で決めるものであったが,モーメント係数を適応的に推定しながらSGDを実施する ADAM (ADapitve Moment Estimation)アルゴリズムが提案された [Kingma+ 2014].以降は,ADAMやその発展型がよく使用される.
4.4 データ拡張
DNNは,深く階層的な表現を学習できる反面,データ量・分布に対してパラメータが過剰すぎるので,データセットの規模がよほど大規模でないかぎり過学習しがちである欠点がある.DNN自体のパラメータを更に減らすことは難しいので,過学習を防ぐためには,より多くの学習データとそのラベルを収集したい.しかし,ラベル付けのコストが非常に高く,それは限度がある.
そこでよく行われるのが,データ拡張 (Data Augmentation)を用いた正則化である.データ拡張では,データセットの各 <画像,ラベル>のペアに対して,各画像を複数枚ランダムに変換させた画像を新たに作成して新たなペアを作ることで,データセットを拡大させる.たとえば,<ライオン画像, “ライオン”>という学習サンプルペアに対して,ライオン画像を左右反転させた画像を作ったり,アフィン変換で少しライオン領域を変形させたり,画像にランダムなノイズを加えりするなどの,画像処理を行う.こうして,追加のラベル付けは行わずとも,サンプル画像を人工的に増やすことで,データセットのサンプル数合計を増やし,学習時の正則化の効果を「追加のデータ収集やアノテーションは行わずに,手持ちのデータセットのみから」狙う.
また,他のデータ拡張の手段として,(クラスごとに)深層生成モデルを学習し,その生成モデルが生成したサンプル画像をデータ拡張を行ったデータとして識別器の学習に用いることもできる(※ Few-shot Learningなどでよく見られるアプローチ).
4.5 バッチ正規化 (batch normalization)
![バッチ正規化 (batch normalization) [物体認識CNN] | CVMLエキスパートガイド バッチ正規化 (batch normalization) [物体認識CNN]](https://cvml-expertguide.net/wp-content/uploads/2023/04/17939eb1b61085c4abacda43be8b6cea.png)
CNNの学習時には正規化および学習の高速・化の目的で,バッチ正規化 (Batch Normalization)層を用いることが多い(図6).バッチ正規化を用いると,CNNの学習時間の短縮ができ,安定した収束も達成できる.AlexNetで提案された局所応答正規化が,CNN初期では層ごとの出力の正規化に用いられてたが,途中からバッチ正規化型の層が好んで用いられている.
4.5.1 バッチ正規化の目的と挿入箇所
本来は入力訓練サンプル全体の白色化と同様に,各隠れ層の入力もそれぞれ白色化して統一しておけば,SGD学習は安定・高速に進むはずである.しかし,その場合はデータセット全体からの行列の固有値計算を,学習中の各中間層で解くはめになり,計算コストが高く現実的ではない.
そこで,各隠れ層にバッチ正規化層を挿入すると,隠れ層の出力表現 $\bm{x}^{(t)}$を,学習中にオンラインで正規化することができる.各隠れ層の各特徴の分布が,各チャンネルで揃っていくおかげで,深いCNNでも安定・高速なSGD学習をおこなうことができる.また,バッチ正規化を用いると,大雑把なパラメータ初期値からも収束できるようになるので,ネットワーク初期化の難しさ・煩わしさからも解放された.加えて,バッチ分布がランダム化されていることにより,(多少の)正則化効果も得ることができる.これにより,バッチ正規化登場まで正則化目的で標準的に用いられていたドロップアウトの必須性が無くなり,CNNではバッチ正規化で代替されることが多くなった.
4.5.2 CNNのブロック構造 (バッチ正規化の登場以降)
バッチ正規化層は,畳み込み層の後,ReLUの手前の場所に毎回配置する.従って,バッチ正規化層が登場して以降は,1.1節で述べたCNNの基本繰り返しが「畳み込み層-バッチ正規化-ReLU-プーリング」へと変わり,バッチ正規化層が追加された形が標準的になった..
またResNetの改善では,先頭にReLUを持ってくるPre-Activation (先に活性化)の「ReLU-他の層」の組み合わせも性能が良いことがわかり,残差ブロック内で使われるようになっていった.
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 チートシートへのリンクを追加しておいた.(※ このリンク集ウィジェットには,厳選した使用頻度の高そうなリンクを集めているので,普段から有効活用していただければと思う).
関連書籍
- 深層学習 改訂第2版 (機械学習プロフェッショナルシリーズ) 岡谷貴之,講談社,2022.
- 5章 畳み込みニューラルネットワーク (p77)
- 画像認識(機械学習プロフェッショナルシリーズ),原田達也,講談社,2017.
- 6章 畳み込みニューラルネットワーク (p156)
- Probabilistic Machine Learning: An Introduction, Kevin Patrick Murphy , MIT Press, 2022.
- 14 CNN
- 14.2 Common layers
- 14 CNN
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.