O'Reilly Japan - ゼロから作るDeep Learning
パラメータ更新手法
- SGD
- 確率的勾配降下法
- 単純
- やみくもにパラメータを探すよりは賢い
- optimizer
- SGDというクラスを作り、パラメータの更新はそこでやる
- 入れ替え可能に
- SGDの欠点
- 関数によっては勾配方向に進むのがかなり非効率な場合がある
- 等方的でない関数
- Momentum
- 運動量
- 速度という概念を使い、物理法則に準じる動き
- 等方的でない関数も効率的に
- AdaGrad
- パラメータの減衰
- Adaptive、適応的
- 学習係数をパラメータごとに調整
- よく変化した要素は学習係数が小さくなっていく
- Adam
- Momentum x AdaGrad
- どの更新手法がいい?
- 得意な問題が違う
- SGDはよく使われる
- 最近はAdamが人気
- MNISTの学習はAdaGradが得意
重みの初期値
- 重みの初期値で学習の成否が分かれる
- 小さい方がいい
- 0にすればいい?
- 重みが均一だと意味がない
- 標準偏差1のガウス分布
- 勾配消失
- 標準偏差 0.01のガウス分布
- 勾配消失は起きないが、偏りがある
- シグモイド関数の表現力に制限
- 複数のニューロンが存在する意味が薄れる
- Xavierの初期値
- 適度な広がり
- 線形関数向け
- Heの初期値
- 非線形なReLU向け
Batch Norm
- Batch Normalization
- 各層のアクティベーションの分布を強制的に広がりを持つように焼成する
- メリット
- 学習が速い(学習係数を大きくできる)
- 初期値にあまり依存しない
- 過学習を抑制できる
正則化
- 過学習の原因
- パラメータが大量で、表現力の高いモデル
- 訓練データが少ない
- Weight decay
- 荷重減衰
- 大きな重みにペナルティを課すことで過学習を抑制
- Dropout
- Weight decayは実装簡単だが、複雑なモデルへの対応は困難
- 訓練時にランダムにニューロンを消去
- テスト次じ消去した割合を乗算
ハイパーパラメータの検証
- テストデータで調整してはダメ
- テストデータで過学習してしまう
- 検証データ
- ハイパーパラメータの良さを評価するためのデータ
- MNISTの場合は訓練データから20%ぐらい先に分離しておく
- データに偏りが出ないようにシャッフルしておく
TODO
- SGDを別クラス化 → 済
- ハイパーパラメータの検証