Slide 1

Slide 1 text

「ゼロから作るDeepLearning」 第6章ざっくりまとめ (開催前資料) 2017.2.7 たのっち @dproject21

Slide 2

Slide 2 text

この本のざっくりまとめです • 「ゼロから作るDeepLearning」斎藤 康毅 著 オライリー・ジャパンより2016年9⽉ 発⾏ https://www.oreilly.co.jp/books/9784873117584/ • 公式サポートページ https://github.com/oreilly-japan/deep-learning-from-scratch • 今回は第6章「学習に関するテクニック」です。 https://deeplearning-yokohama.connpass.com/

Slide 3

Slide 3 text

パラメータの更新 " # " # 1 ℎ( ) 勾配 : すべての変数の偏微分をベクト ルでまとめたもの。 ニューラルネットワークでは、損失関 数の値ができるかぎり⼩さくなるベク トルを、勾配降下法を⽤いて求め、重 み付けを更新する。 = − これが、第4章でやった「勾配降下法」 (確率的勾配降下法:SGD)でした。

Slide 4

Slide 4 text

パラメータの更新 " # " # 1 ℎ( ) SGDでは、⾮効率な学習になってしま うケースがある。そこで別の⼿法によ る勾配計算を⾏う。 3種類の計算⽅法が紹介されている。 ・Momentum ・AdaGrid ・Adam

Slide 5

Slide 5 text

パラメータの更新 " # " # 1 ℎ( ) SGD = − Momentum 物理の「運動量」に関係している。 SGDのジグザグの動きを軽減させるた めの”摩擦”としてを⽤いるようにした。 ← − = +

Slide 6

Slide 6 text

パラメータの更新 " # " # 1 ℎ( ) SGD = − AdaGrid 学習係数を減衰させる、というアイデ アから来ている。 ⼊⼒データのパラメータの要素ごとに 学習係数を調整する、というもの。 ℎ ← ℎ + ⨀ = − 1 ℎ 過去の勾配の⼆乗和を保持し、学習係 数を減衰させる。

Slide 7

Slide 7 text

パラメータの更新 " # " # 1 ℎ( ) SGD = − Adam AdaGrid + Momentum というような⼿ 法。詳しくは原著論⽂を読んでくださ い。 (と書いてあります) 原著論⽂はこちら。 https://arxiv.org/pdf/1412.6980v9.pdf

Slide 8

Slide 8 text

パラメータの更新 " # " # 1 ℎ( ) どれがいいの? どれも得意な問題、不得意な問題があ る。 最近はAdamが好まれている。 多くの研究では、いまでもSGDが使わ れている。 MomentumもAdaGridも試す価値のあ る⽅法。

Slide 9

Slide 9 text

パラメータの更新 " # " # 1 ℎ( ) どれがいいの? どれも得意な問題、不得意な問題があ る。 最近はAdamが好まれている。 多くの研究では、いまでもSGDが使わ れている。 MomentumもAdaGridも試す価値のあ る⽅法。

Slide 10

Slide 10 text

重みの初期値を0にするとどうなるか? 順伝播時は2層⽬のニューロンには全て 同じ値が⼊る。 逆伝播時は全て同じ重みになる。 重みが均⼀になってしまうので、意味 がなくなる。 = 0だと、 同じ値が伝播する 重みの初期値

Slide 11

Slide 11 text

重み付けの値ごとに、 隠れ層のアクティベーション(活性化 関数の後の出⼒データ)を⾒てみると、 どの重み付けがよいかが分かる。 隠れ層の アクティベーションを⾒る 重みの初期値 … … … … … ⼊ ⼒ デ タ

Slide 12

Slide 12 text

Sigmoid関数、tanh関数の場合は 「xavierの初期値」 " : のガウシアン ReLUの場合は 「Heの初期値」 # : のガウシアン を使うのがよい。 (両⽅ともnはノードの個数) 隠れ層の アクティベーションを⾒る 重みの初期値 … … … … … ⼊ ⼒ デ タ

Slide 13

Slide 13 text

アクティベーションの分布 を強制的に調整する Batch Normalization (Batch Norm) … … … … … ⼊ ⼒ デ タ ミニバッチごとに、データの平均が0で 分散が1になるよう正規化を⾏う。 ・学習を早く進⾏させることができる ・初期値にそれほど依存しない ・過学習を抑制する という利点がある。 Affine → Batch Norm → ReLU となるようにする

Slide 14

Slide 14 text

アクティベーションの分布 を強制的に調整する Batch Normalization (Batch Norm) … … … … … ⼊ ⼒ デ タ ミニバッチごとに、データの平均が0で 分散が1になるよう正規化を⾏う。 < ← 1 > @ A @B" # < ← 1 >(@ −< )# A @B" @ D ← @ − < # < + ミニバッチ = " , # , … , A を、平均 0、分散1のデータ " I, # I, … , @ D に変換 する。 Affine → Batch Norm → ReLU となるようにする

Slide 15

Slide 15 text

アクティベーションの分布 を強制的に調整する Batch Normalization (Batch Norm) … … … … … ⼊ ⼒ デ タ ミニバッチごとに、データの平均が0で 分散が1になるよう正規化を⾏ったデー タに、固有のスケールとシフトで変換 を⾏う。 @ ← @ D + = 0, = 1の値からスタートして、学 習によって調整していく。 ここまでがニューラルネットワーク上 での順伝播。 Affine → Batch Norm → ReLU となるようにする

Slide 16

Slide 16 text

正則化 過学習(overfitting) 訓練データだけに適応しすぎてしまい、 訓練データには含まれない他のデータ に対応できない状態 過学習の原因として ・パラメータを⼤量に持ち、表現⼒の ⾼いモデルであること ・訓練データが少ないこと がある。 これを抑制する

Slide 17

Slide 17 text

正則化 Weight decay(荷重減衰) 損失関数の値を⼩さくするため、 Weight decayを損失関数に加算する。 = " , # , … , : の重みに対して、L2ノルム ( " #, # #, … , : # )のWeight decay 1 2 # を損失関数に加算する。

Slide 18

Slide 18 text

正則化 Dropout ニューラルネットワークのモデルが複 雑になり、Weight decayでは対応が困 難になったときに⽤いられる。 訓練時にランダムに選ばれたニューロ ンを消去する。 (コード上では、maskしている) ☓

Slide 19

Slide 19 text

ハイパーパラメータの検証 ハイパーパラメータの検証には、 ・訓練データ ・テストデータ ではなく「検証データ」を⽤いる。

Slide 20

Slide 20 text

ハイパーパラメータの検証 訓練データ:パラメータの学習に⽤い る 検証データ:ハイパーパラメータの性 能評価に⽤いる テストデータ:ニューラルネットワー クの汎化性能をチェックするために使 う(理想的には⼀度だけ) データの分離はユーザー側で⾏う。 (MNISTの場合、検証データは全デー タの20%)

Slide 21

Slide 21 text

ハイパーパラメータの検証 ハイパーパラメータの最適化 ハイパーパラメータの範囲を設定する (0.001〜1000という具合) ↓ ハイパーパラメータの範囲からランダ ムにサンプリング ↓ 学習を⾏い、検証データで認識精度を 評価する(エポックは⼩さく設定) 100回ほど繰り返し、認識精度からハ イパーパラメータの範囲を狭める