継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

ゼロから始めるディープラーニング 7章

タダです。

今回は7章の畳み込みニューラルネットワーク(CNN)についての勉強まとめです。 社内での輪読会に備えて先行で7章のまとめを行います。

※記事は理解ができるたびに何度もアップデートしていこうと思います。 www.oreilly.co.jp

目次

なお、各章の内容は次の通りです。

7.1

  • 畳み込みニューラルネットワーク(CNN)は、画像認識や音声認識などいたるところで使われている
  • これまでのニューラルネットワークとの違いは以下の2層があること
    • Convolutionレイヤ(畳み込み層)
    • Poolingレイヤ(プーリング層)
  • これまでのニューラルネットワークは、隣接する層と全てのニューロン間での結合(全結合/Affline)があった
    • 全結合のニューラルネットワークは、Afflineレイヤの後に活性化関数のReLUレイヤもしくはSigmoidレイヤが続き、最後にSoftmaxレイヤで最終的な出力を行う
    • CNNでは、[Convolution - ReLU - Pooling]というつながりになる
      • 出力するレイヤに近づくと[Affline - ReLU]という組み合わせが使われ、出力には[Affline - Softmax]が使われる

7.2

  • 畳み込み(Convolution)層の意義は、形状を維持して扱う
    • 画像認識の場合、入力データを3次元のデータとして受け取り、同じく3次元のデータとして次の層にデータを出力する(画像データを正しく理解出来る)
      • 畳み込み層の入出力データを、特徴マップとよび、畳み込み層の入力データを入力特徴マップ、出力データを出力特徴マップと呼ぶ
    • 全結合は画像認識の場合、全てのデータを形状(空間情報、RBGの各チャンネル間の関係性等)は無視して全ての入力データを同じ次元のニューロンとして扱う
  • 畳み込みそうで行うのは「畳み込み演算」
    • 画像処理でいうと、「フィルター演算」に相当する
      • 入力データに対してフィルターを適用する
      • 入力データとフィルターの要素を乗算し、その和を求める
        • CNNでは全結合のバイアスと対応するパラメータとして重みがある
  • 畳み込み層の処理を行う前に入力データの周囲に固定のデータ(0など)を埋めることをパディングと呼ぶ
    • パディングを使う理由は、出力サイズを調整するため
  • フィルターを適用する位置の感覚をストライドと呼ぶ
  • 3次元データの畳み込み演算での注意点は、入力データとフィルターのチャンネル数は同じ値にすること
  • 3次元の畳み込み演算はデータやフィルターを直方体のブロックで考えると判りやすい

7.3

  • プーリングは、縦・横方向の空間を小さくする演算
    • Maxプーリングの手法では、ウィンドウの中で最も大きい要素を出力する
  • プーリングの層の特徴は、以下のもの
    • 学習するパラメータがない
      • 対象領域から最大値をとる(もしくは平均とる)だけの処理
    • チャンネル数は変化しない
      • チェンネルごとに独立して演算を行う
    • 微小な位置変化に対してロバスト
      • 入力データの小さなズレは、吸収する

7.4

  • CNNでは4次元のデータを演算するが、im2colを使うと簡単に扱える
    • im2colでは、フィルター(重み)に取って都合のよい入力データを展開する関数(入力データに対してフィルターを適用する場所の領域を横方向に1列に展開する)
    • im2colでは、演算に多くのメモリを使用するが、大きな行列演算が可能
  • im2colでは、フィルターサイズ、ストライド、パディングを考慮して、入力データを2次元配列に展開する
  • プーリング層の実装は次の3段階の流れで行う
    • 入力データを展開する
    • 行ごとに最大値を求める
    • 適切な出力サイズに整形する

7.5

※コード解説のため省略

7.6

  • CNNでどのようなことを行っているのか
    • 一層目では、エッジ(色が変化する境目)やブロブ(局所的に塊のある領域)などをみている
    • 上記の情報を後続の層に渡している
  • 最初は抽象的な情報の認識なるが、層が深くなると高度な情報な認識を行う

7.7

  • 代表的なCNNの例として、LeNet、AlexNetについて触れる
    • LeNetは1989年に提案され、CNNの元祖になる
      • 現在のCNNとの違いは、活性化関数にある(LeNetはSigmoid関数、現在はReLU関数)
      • LeNetでは、サブサンプリングによって中間データのサイズ縮小を行うが、現z内はMax プーリングが主流
    • AlexNetはディープラーニングブームの火付け役
      • 活性化関数はReLU
      • LRNという局所的正規化を行う
      • Dropoutを使用する
  • ニューラルネットワークとしての変化はないが、取り巻く環境やコンピューター技術には大きな進歩があった(大量の並列計算を得意とするGPUの普及)

次は最後の8章になります。