SSブログ

Batch Normalization(バッチ正規化) [学問]

 たまたまYouTubeを見ていたら、2019年センター数学の数学IA第2問の統計分野の問題が良問だということで、YouTubeにその問題の解説をアップしている人の動画がありました。見ていたら、なんとDeep Learningなどでもよく使われる機械学習のテクニックである「Batch Normalization」の基礎的な計算問題でした。

 実は、バッチ正規化は「ゼロから作るDeep Learning(オライリー・ジャパン)」の第6章「学習に関するテクニック」の中の6.3節Batch Normalizationで解説されています。今年度の出題者が統計分野の問題として、バッチ正規化の中から関係ありそうなものを選んで出題したのかどうかは分かりませんが、高校の数学も今の時代にマッチした分野はどんどん積極的に取り入れていけばいいと思います。

 バッチ正規化とは、2015年にGoogleから提案された比較的新しい手法で、学習を行う際のミニバッチを単位として、ミニバッチごとに下記式により正規化を行います。アイデアとしては、各層で適度な広がりを持つように、”強制的”にアクティベーションの分布を調整しようというものです。(イメージ的には塔を構成しているブロックが横に大きく動くと不安定なものになるのを、ブロックを真っ直ぐ上に積み上げるようなイメージ。)結果、深層学習のトレイニングの学習スピードを加速させるなどのメリットがあります。

 μB  ←  (1/m)Σi=1~mxi

    σB2    (1/m)Σi=1~m(xi - μB)2

    i    (xi - μB) / (√(σB2 + ε))

    y   γ i + β

 やっていことは、ミニバッチの入力データ{x1,x2,・・・,xm}を、平均0、分散1のデータ{1,2,・・・,m}に変換するというシンプルなものです。試験の中では、この変換後のデータの平均(0)と分散(1)の値を問うという設問になっています。上記書籍の中では、ここはもう当たり前にそうなるものだとして特に証明などはされていませんが、まだ確認されてない方はこの機会に一度計算してみるといいと思います。

 さらにバッチ正規化レイヤは、この正規化されたデータに対して、固有のスケールとシフトで変換を行います。(一番最後の式)ここで、γとβはパラメータで、初期値γ=1、β=0からスタートして、学習によって適した値に調整されていきます。学習の仕方はこの書籍で紹介されている下記の文献(1)、(2)の中の計算グラフに従って、common/layers.pyのBatchNormalizationクラスに記述されているので、インプリメンテーションに自信のない方は、一度その中に書かれてあるPythonコードを読めば何をやっているかがよく分かると思います。

 機械学習を勉強されている方で、バッチ正規化って何だったかもう忘れてしまったという方は、今年度のセンター数学の統計の問題としても出題されたので、この機会に理解を完全なものにしてみてはどうでしょうか?





nice!(0)  コメント(0) 
共通テーマ:学問

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。