Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ゼロから作るDeepLearning 第6章ざっくりまとめ

dproject21
February 06, 2017

ゼロから作るDeepLearning 第6章ざっくりまとめ

「ゼロから作るDeepLearning」もくもく読書会の事前資料です。

https://deeplearning-yokohama.connpass.com/event/49840/

dproject21

February 06, 2017
Tweet

More Decks by dproject21

Other Decks in Technology

Transcript

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

    View Slide

  2. この本のざっくりまとめです
    • 「ゼロから作る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/

    View Slide

  3. パラメータの更新
    "
    #

    "
    #
    1

    ℎ( )
    勾配 : すべての変数の偏微分をベクト
    ルでまとめたもの。
    ニューラルネットワークでは、損失関
    数の値ができるかぎり⼩さくなるベク
    トルを、勾配降下法を⽤いて求め、重
    み付けを更新する。
    = −


    これが、第4章でやった「勾配降下法」
    (確率的勾配降下法:SGD)でした。

    View Slide

  4. パラメータの更新
    "
    #

    "
    #
    1

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

    View Slide

  5. パラメータの更新
    "
    #

    "
    #
    1

    ℎ( )
    SGD
    = −


    Momentum
    物理の「運動量」に関係している。
    SGDのジグザグの動きを軽減させるた
    めの”摩擦”としてを⽤いるようにした。
    ← −


    = +

    View Slide

  6. パラメータの更新
    "
    #

    "
    #
    1

    ℎ( )
    SGD
    = −


    AdaGrid
    学習係数を減衰させる、というアイデ
    アから来ている。
    ⼊⼒データのパラメータの要素ごとに
    学習係数を調整する、というもの。
    ℎ ← ℎ +





    = −
    1



    過去の勾配の⼆乗和を保持し、学習係
    数を減衰させる。

    View Slide

  7. パラメータの更新
    "
    #

    "
    #
    1

    ℎ( )
    SGD
    = −


    Adam
    AdaGrid + Momentum というような⼿
    法。詳しくは原著論⽂を読んでくださ
    い。 (と書いてあります)
    原著論⽂はこちら。
    https://arxiv.org/pdf/1412.6980v9.pdf

    View Slide

  8. パラメータの更新
    "
    #

    "
    #
    1

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

    View Slide

  9. パラメータの更新
    "
    #

    "
    #
    1

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

    View Slide

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

    View Slide

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









    View Slide

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









    View Slide

  13. アクティベーションの分布
    を強制的に調整する
    Batch Normalization (Batch Norm)









    ミニバッチごとに、データの平均が0で
    分散が1になるよう正規化を⾏う。
    ・学習を早く進⾏させることができる
    ・初期値にそれほど依存しない
    ・過学習を抑制する
    という利点がある。
    Affine → Batch Norm → ReLU となるようにする

    View Slide

  14. アクティベーションの分布
    を強制的に調整する
    Batch Normalization (Batch Norm)









    ミニバッチごとに、データの平均が0で
    分散が1になるよう正規化を⾏う。
    <

    1

    > @
    A
    @B"
    #
    <

    1

    >(@
    −<
    )#
    A
    @B"
    @
    D ←
    @
    − <
    #
    <
    +
    ミニバッチ = "
    , #
    , … , A
    を、平均
    0、分散1のデータ "
    I, #
    I, … , @
    D に変換
    する。
    Affine → Batch Norm → ReLU となるようにする

    View Slide

  15. アクティベーションの分布
    を強制的に調整する
    Batch Normalization (Batch Norm)









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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  20. ハイパーパラメータの検証
    訓練データ:パラメータの学習に⽤い

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

    View Slide

  21. ハイパーパラメータの検証
    ハイパーパラメータの最適化
    ハイパーパラメータの範囲を設定する
    (0.001〜1000という具合)

    ハイパーパラメータの範囲からランダ
    ムにサンプリング

    学習を⾏い、検証データで認識精度を
    評価する(エポックは⼩さく設定)
    100回ほど繰り返し、認識精度からハ
    イパーパラメータの範囲を狭める

    View Slide