ミニバッチ学習における重み更新
機械学習モデルの学習では、多くの場合、データセット全体を一度に使うのではなく、小さな「ミニバッチ」に分割してパラメータ(重み)を更新します。これにより、計算効率と学習の安定性のバランスを取ります。
ミニバッチ学習の更新プロセス
- ミニバッチの選択: データセットからランダムに N 個のサンプルを選び、ミニバッチを形成します。
- 勾配の計算: ミニバッチ内の各サンプル \(i\) について、現在のパラメータ \(w\) における損失関数の勾配 \(g_i = \nabla L_i(w)\) を計算します。
- 勾配の平均化: ミニバッチ全体の平均勾配 \(\bar{g}\) を計算します。\(\bar{g} = \frac{1}{N} \sum_{i=1}^{N} g_i\)
- パラメータ更新: 平均勾配 \(\bar{g}\) と学習率 \(\eta\) を用いて、パラメータを更新します。
この問題で求められているのは、ステップ4における重みの更新量 \(\Delta w\) です。
$\Delta w = -\eta \times \bar{g} = -\eta \times \left( \frac{1}{N} \sum_{i=1}^{N} g_i \right)$
更新量 \(\Delta w\) は、パラメータをどれだけ変化させるかを示す値です。実際のパラメータ更新は \(w_{new} = w_{old} + \Delta w\) となります。
今回の問題における計算
与えられた値は以下の通りです。
- ミニバッチ内の各サンプルの勾配: \(g_1 = 2.0, g_2 = 1.5, g_3 = 2.5\)
- ミニバッチサイズ: \(N = 3\)
- 学習率: \(\eta = 0.05\)
ステップ1: ミニバッチ内の勾配の合計を計算
$ \sum_{i=1}^{3} g_i = 2.0 + 1.5 + 2.5 = 6.0$
ステップ2: ミニバッチ内の勾配の平均を計算
$\bar{g} = \frac{1}{N} \sum_{i=1}^{N} g_i = \frac{6.0}{3} = 2.0$
ステップ3: 重みの更新量 \(\Delta w\) を計算
$\Delta w = -\eta \times \bar{g} \\\\
\Delta w = -0.05 \times 2.0 \\\\
\Delta w = -0.1$
したがって、このミニバッチに対する重みの更新量 \(\Delta w\) は -0.1 です。
ミニバッチ学習 vs 他の学習方法
- バッチ学習 (Batch GD): 全データを使用。更新は安定するが、大規模データでは計算コスト大。
- 確率的勾配降下法 (SGD): サンプル1つずつ使用。計算は速いが、更新ノイズが大きい。
- ミニバッチ学習: 両者の中間。計算効率と安定性のバランスが良い。GPUによる並列計算にも適しているため、ディープラーニングで広く使われる。