WHAT'S UP?

New post every sometimes. Here's OKKAH NET.

ゼロから作るDeep Learning学習備忘録(5〜8章)

ゼロから作るDeep Learning学習備忘録(1〜4章) - OKKAH NETの続きです。


5章 誤差逆伝播
順伝播: 入力→出力へと計算 ・逆伝播: 出力→入力へと計算
誤差逆伝播法(Backpropagation): 損失関数を誤差と見立てて、
 逆伝播によって重みとバイアスを修正していくアルゴリズム
 連鎖律で逆伝播を行い、最急降下法で誤差を最小にする。
 ・連鎖律(chain rule): 合成関数の微分はそれぞれの導関数の積で与えられる。
 ・最急降下法(gradient discent): 関数の傾きのみから関数の最小値を探索する。
勾配確認: 数値微分誤差逆伝播法の結果を比較することで、
 誤差逆伝播法の実装に謝りがないことを確認できる。


6章 学習に関するテクニック
・パラメータの更新: 4章のSGD(確率的勾配降下法)の欠点を改善する手法3つ。
 ・Momentum: 慣性力を利用。関連性のある方向へSGDを加速させ振動を抑制する。
 ・AdaGrad: 学習係数を各パラメータ毎にその勾配の大きさに従って減らしていく。
  ・RMSProp: 過去の更新を徐々に忘れることで、いずれ更新量が0になる点を補う。
 ・Adam: MomentumとAdaGradの融合。
Batch Normalization: NNの学習を加速させる汎用的で強力な手法。
 2015年にGoogleのLoffeさんらによって提案された。
 各層でのアクティベーションの分布を、適度な広がりを持つように調整する。
 具体的には、各ミニバッチごとにデータ分布を平均0、分散1になるように正規化。
 これにより、学習効率が上がり、初期値依存性も小さく、かつ過学習を抑制する。
・正規化: モデルの表現力が高い時、訓練データが少ない時は、過学習の対策が必要。
 ・Weight decay(荷重減衰): 大きな重みを持つことに対してペナルティを課す。
  L2正則化。複雑なニューラルネットワークには対応しきれない。
 ・Dropout: ニューロンをランダムに消去しながら学習する。
  Weight decayだけでは対応が困難なときに使用する。
ハイパーパラメータ: 学習を行う際に人が予め設定しておく必要のあるパラメータ。
 例)ニューロンの数、バッチサイズ、学習係数、Weight decay
 ・検証データ: ハイパーパラメータの調整用のデータ。
 ・ハイパーパラメータの最適化
 ⑴ハイパーパラメータの範囲を指定する。
 ⑵指定した範囲から、ランダムにサンプリングする。
 ⑶学習を行い、検証データで認識精度を評価(epochは小さく設定)。
 ⑷⑵⑶をある程度繰り返し、認識精度からハイパーパラメータの範囲を狭める。
 他にはベイズの最適化で行う方法もある。


7章 畳み込みニューラルネットワーク
全結合: 隣接する層の全てのニューロン間で結合がある。
 問題点はデータの形状が無視されてしまう点。
畳み込みニューラルネットワーク(CNN):
 これまでの全結合のネットワークに畳み込み層プーリング層が加わる。
 画像処理や音声認識など至るところで使われている。
畳み込み層(Convolutionレイヤ): データの形状を維持することができる。
 ・特徴マップ: 畳み込み層の入出力データ。
 ・畳み込み演算: 画像処理でいうところのフィルター演算
  フィルターという用語はカーネルという言葉で表現されることもある。
  フィルターのウィンドウを一定の感覚でスライドさせながら適用していく。
  それぞれで、フィルターと入力の対応する要素を乗算し、その和を求める。
  バイアス項の加算は、フィルター適用後のデータに対して行われる。
 ・パディング: 入力データの周囲に固定データ(例えば0)を埋めること。
 ・ストライド: フィルターを適用する位置の間隔。
  例)ストライド=2 → フィルターを適用する窓の間隔が2要素ごとになる。
 ・3次元の畳み込み演算→直方体のブロックで考えるとわかりやすい。
 ・バッチ処理→N回分の処理を1回にまとめて行う。
プーリング層(poolingレイヤ): 縦・横方向の空間を小さくする演算。
 学習するパラメータがない、チャンネル数不変、
 微小な位置変化に対してロバスト、といった特徴がある。
 例) 領域の最大値をとるMaxプーリング、平均値をとるavarageプーリング
im2col(image to column):
 フィルター(重み)によって都合の良いように入力データを展開する関数。
・代表的なCNN
 ・LeNet: 最初のCNN。手書き数字認識を行うネットワーク。
  シグモイド関数、サブサンプリングによる中間データの縮小を採用。
  (現在はReLU、Maxプーリングが主流)
 ・AlexNet: ディープラーニング・ブームの火付け役。
  ReLU、LRN、Dropoutを採用している点以外はLeNetとあまり変わらず。
ディープラーニングの発展に、ビッグデータGPUが大きく貢献している。    


8章 ディープラーニング
Data Augmentation: 訓練画像を回転、平行移動、切り出し(crop)、
 左右反転(flip)、輝度変化などによって、人工的に増やす手法。
・ネットワークを深くすることの利点
 ・より少ないパラメータで同レベル以上の表現力を達成できる。
 ・各層がより簡単なタスクに取り組むことになるので効率的。
ImageNet: ILSVRC(2012)で使われた100万枚を超える画像データセット
ディープラーニングフレームワーク
 ・VGG(2014):
  畳み込み層とプーリング層から構成される基本的なCNN。
  3x3の小さなフィルターによる畳み込み層を連続して行い、
  重みのある層(畳み込み層や全結合層)は16~19層。
 ・GoogLeNet(2015):
  ネットワークが横方向にも幅を持つインセプション構造
  サイズの違うフィルター(とプーリング)を複数適用し、その結果を適合。
  1x1のフィルターの畳み込み層を多くの場所で使用する事で、
  チャンネル方向にサイズを減らし、パラメータを削減。
 ・ResNet(2015):
  畳み込み層の一部をまたぐスキップ構造(ショートカット、バイパス)
  学習時のBPの勾配消失問題を軽減できる(微分が1に近くなる)。
  これにより150層以上を繋げることができるようになった。
転移学習: 学習済みの重み(の一部)を別のNNにコピーして再学習を行う。
 手元にあるデータセットが少ない場合において特に有効な手法。
GPUや分散学習、ビット精度の削減などによって学習の高速化を実現。
ディープラーニングの実用事例
 ・物体検出: 画像中から物体の位置の特定を含めてクラス分類を行う。
  R-CNN、Faster R-CNNの手法が有名。
 ・セグメンテーション: 画像のピクセルレベルでのクラス分類を行う。
  FCNという全てが畳み込み層からなるネットワークが使われる。
 ・画像キャプション設定: 入力画像の説明文を自動で生成する。
  代表的な手法はNIC(画像を理解するディープなCNNと、
  自然言語や時系列データを扱うRNNから構成)と呼ばれる。
 ・画像スタイル変換: アーティストのような画像を描かせる。
 ・画像生成: 画像をゼロから生成。DCGAN。
 ・自動運転: SegNet(CNNベース)
 ・強化学習: Deep Q-Network。最適価値行動関数。


github.com