【DeepLeaning】ニューラルネットワークにおける勾配とは?バッチ学習とは?

Deep Learning とは何なのか・・・まったく知らない状態から挑戦してみたいと思います!

正規化

正規化(Normalization)はモデルの学習をより安定させ汎化性能を向上させるための技術です。
一般的には、データのスケールを変換して入力を正規化することが含まれます。

一般的に、正規化は次の2つの方法で行われます。

  1. バッチ正規化(Batch Normalization):
    バッチ正規化はデータの分布を平均0、分散1に調整することで各層の出力のスケールを調整することを目的としています。
    各バッチの統計量を計算して各入力に対して異なる正規化を行います。
  2. 層正規化(Layer Normalization):
    層正規化は、バッチ正規化と同様の効果を持ちながらバッチサイズに依存しないことが特徴です。
    各層の統計量を計算して、各入力に対して異なる正規化を行います。

これらの正規化の手法は、ニューラルネットワークの学習を加速し、収束の速度を向上させるために広く使用されています。

モデルの学習が安定している状態とは?

以下のような状態を指すそうです。

  1. 勾配の消失または爆発の回避:
    層が深いネットワークで学習を行う場合、勾配が急激に消失したり爆発(ドカーン!?9したりすることがあります。
    これは、勾配が小さくなりすぎたり大きすぎたりすることによって学習が不安定になることが原因です。
    正規化は勾配を適切な範囲に制限することでこの問題を解決します。
  2. 過学習の抑制:
    過学習は訓練データに過剰に適合して未知のデータに対する汎化性能が低下する現象です。
    正規化は、過学習を抑制することができます。
    バッチ正規化はドロップアウトと組み合わせて使用することができ、層正規化はより安定した学習により過学習を抑制することができます。
  3. 学習率の制御:
    正規化により勾配の分散が抑制され(学習がより安定になる)、最適な学習率を見つけることがより容易になります。

バッチ?

夜間、定期的に動作するスクリプトのこと・・・ではなく!

ここで言う「バッチ (batch)」は、データ処理において複数のデータをまとめて一括で処理する単位を指します。
ニューラルネットワークにおいては、バッチ学習という概念があり訓練データを複数のバッチに分割しそれらを順番に学習させることでモデルを更新します。

訓練データを全て一度に学習させるのではなく、例えば1000個の訓練データを100個のバッチに分割しそれぞれのバッチに対して順番にモデルを学習させます。
これにより、一度に処理するデータ数を減らすことでメモリ使用量を削減することができ、また更新の頻度を増やすことができるため学習効率を向上させることができます。

バッチ学習においては、バッチサイズというパラメータがありこれは一度に学習させるデータの数を指します。
バッチサイズが大きすぎるとメモリ不足に陥ったり学習が遅くなることがありますが、逆に小さすぎると更新の頻度が高くなりすぎて学習効率が悪化することがあります。
適切なバッチサイズを選択することがモデルの学習性能を向上させるために重要なんですね🤔