タダです。
今回は7章の畳み込みニューラルネットワーク(CNN)についての勉強まとめです。 社内での輪読会に備えて先行で7章のまとめを行います。
※記事は理解ができるたびに何度もアップデートしていこうと思います。 www.oreilly.co.jp
目次
なお、各章の内容は次の通りです。
- 1章 Python入門
- 2章 パーセプトロン
- 3章 ニューラルネットワーク
- 4章 ニューラルネットワークの学習
- 5章 誤差逆伝播法
- 6章 学習に関するテクニック
- 7章 畳み込みニューラルネットワーク
- 8章 ディープラーニング
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の各チャンネル間の関係性等)は無視して全ての入力データを同じ次元のニューロンとして扱う
- 画像認識の場合、入力データを3次元のデータとして受け取り、同じく3次元のデータとして次の層にデータを出力する(画像データを正しく理解出来る)
- 畳み込みそうで行うのは「畳み込み演算」
- 画像処理でいうと、「フィルター演算」に相当する
- 入力データに対してフィルターを適用する
- 入力データとフィルターの要素を乗算し、その和を求める
- 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を使用する
- LeNetは1989年に提案され、CNNの元祖になる
- ニューラルネットワークとしての変化はないが、取り巻く環境やコンピューター技術には大きな進歩があった(大量の並列計算を得意とするGPUの普及)
次は最後の8章になります。