Deep Learning(An MIT Press book) 6.3.1

Deep Learning(An MIT Press book) の要点メモシリーズ。

今日の範囲は隠れ層の前半。ReLU つよいという話と、その一般化の話。

Chapter 6 Deep Feedforward Networks

6.3 Hidden Units

  • ReLU がデフォルトの選択肢として最も良い
  • 事前にどの units がよいかはわからないので trial and error をする
  • ReLU のようないくつかの units は微分できない点がある
    • 勾配法は勾配を小さくしていく手法なので、いくつか点で微分できなくても問題ない
    • ある点で微分できない時は、その点の右もしくは左微分係数を使う
      • コンピュータの場合、ある点での微分は実際にはある点 ±e のどこかの点での微分になっているので問題ない
  • 多くの hidden units は入力 x のアフィン変換 z=W^{\mathrm{T}}x+b に要素ごとの非線型変換 g(z) を適用したものになっている
    • units の違いは活性化関数 g(z) の違い

6.3.1 Rectified Linear Units and Their Generalizations

  • ReLU: g(z)=max\{0,z\}
  • 線形ユニットに似ているので最適化しやすい
    • 2階微分よりも勾配の向きが最適化には大切
  • z=W^{\mathrm{T}}x+b の b は小さな正の値がよい(例: 0.1)
    • ReLU は z が負だと0になるので、正の値を与えて勾配を持たせる
  • ReLU の一般化
    • h_i=g(z,\alpha)_i=max(0,z_i)+\alpha_i min(0,z_i)
    • Absolute value rectification: \alpha_i=-1
    • leaky ReLU: αが小さな値(例: \alpha_i=0.01
    • parametric ReLU: αをパラメータとして学習
  • Maxout units
    • ReLU のさらなる一般化
    • g(z) を要素ごとではなく、 k 個ごとのグループに対して適用する
    • g(z) はグループ内の最大値を返す関数
    • グループに対して区間ごとに線形な凸関数を学習する(活性化関数の形そのものの学習)
    • k を大きくすれば任意の凸関数を近似できる
    • k=2 の場合、 ReLU やその一般化した関数を学習する
    • 1つのユニットが k 個の重みベクトルを扱うので正則化が重要
      • ReLU は element-wise なので各ユニットは重み行列 W の1つの行(=重みベクトル)を使うが、 maxout の各ユニットは k 個の要素を持つグループを扱うので W の k 行ぶんを使う
    • maxout を通過することで変数が1/kになるという統計的、計算量的利点
    • catastrophic forgetting(昔学習したことを忘れる)に耐性がある
      • multiple filter によって冗長性がある
      • (メモ: グループ内の各zは maxout より前の層を通過しているので、maxout 通過後の変数は k 個の層の効果が重なっている?)