ディープラーニングにおけるミニバッチごとの順伝播と逆伝播の仕組みと実行単位
こんにちは。ゆうせいです。
ディープラーニングのモデルを学習させる際、入力されたデータを先へ送って計算結果を出す「順伝播」と、その計算結果と正解とのズレを後ろへ遡って伝える「逆伝播」という2つの基本操作が存在します。膨大なデータを扱う近年のディープラーニングにおいて、この順伝播と逆伝播がどのような単位で実行されているのか、疑問を抱く学習者は少なくありません。
現代のディープラーニングにおける標準的な学習手順では、データ全体を小さなグループに分けたミニバッチごとに順伝播と逆伝播を繰り返す方法が主流となっています。なぜミニバッチという単位で計算を進めるのか、その背景や仕組みについて詳しく解説します。
ディープラーニングにおける順伝播と逆伝播の役割
ディープラーニングの学習は、問題を解いてその答え合わせをし、次の正解率を上げるために自分自身の考え方を修正する循環の繰り返しです。
高校の定期試験対策に例えて考えてみます。
問題用紙を見て最初の設問から順番に頭を働かせ、最終的な解答欄を埋めるまでの思考プロセスが順伝播に相当します。それに対して、解答と解説を見て失点の原因を突き止め、「どの計算公式の理解が足りなかったのか」と問題の最初へ向かって遡りながら復習する作業が逆伝播に相当します。
数学的には、順伝播でモデルの出力値と損失関数の値を算出し、逆伝播で各層の重みパラメータに対する損失の傾き(勾配)を連鎖律に従って逆向きに計算します。
3つの学習方式とミニバッチ処理の採用理由
順伝播と逆伝播を行うデータのまとめ方には、大きく分けて3つの方式が存在します。
- バッチ学習手元にあるすべての訓練データを一度に入力して順伝播を行い、全データの平均的な誤差を算出した上で、1回の逆伝播を行ってパラメータを更新します。
- オンライン学習(確率的勾配降下法)データを1件ずつ個別に取り出し、1件のデータに対して順伝播と逆伝播、パラメータの更新をその都度実行します。
- ミニバッチ学習データを数十件から数百件程度の小さな束(ミニバッチ)に分割し、その束に含まれるデータ群に対して順伝播と逆伝播を行い、パラメータを1回更新します。この手順を残りの束に対しても順次適用していきます。
現代の一般的なディープラーニングフレームワークでは、このミニバッチ学習が標準設定として採用されています。
ミニバッチ処理による学習のメリットとデメリット
ミニバッチ処理のメリット
- 計算機の並列処理能力の活用:GPUなどの画像処理半導体は、複数の計算を同時に処理する並列計算を得意としています。ミニバッチ単位でデータをまとめると、GPUの演算器を余すことなく稼働させることができるため、1件ずつ処理するオンライン学習に比べて全体の計算時間を大幅に短縮できます。
- メモリ容量の超過防止:数十万枚から数百万枚に及ぶ大量の画像データを一度に計算機へ読み込もうとすると、搭載メモリの容量を超えてプログラムが強制終了します。ミニバッチ単位に細かく分割することで、限られたメモリ空間の中でも安定して学習処理を実行できます。
- 局所的な停滞の回避:データ全体を一度に処理する手法に比べて、小分けにしたデータ束ごとの誤差には適度な揺らぎが生じます。この揺らぎが適度な刺激となり、関数の途中で勾配が平坦になる局所的な谷底から抜け出しやすくなる性質を持ちます。
ミニバッチ処理のデメリット
- ミニバッチサイズの設定難度:1つの束に含めるデータ数(ミニバッチサイズ)を適切に選定しなければなりません。この数値が小さすぎると計算速度が低下し、大きすぎると学習結果の汎化性能が低下する傾向があり、調整に試行錯誤を要します。
- データの端数処理の必要性:訓練データの総数がミニバッチサイズで割り切れない場合、最後の束だけデータ数が少なくなります。この端数のデータをそのまま計算に含めるか、あるいは破棄するかといった実装上の配慮が求められます。
ミニバッチごとの順伝播と逆伝播の計算手順
ミニバッチ学習における1回ごとの計算手順は、次のような順序で進められます。
- データの抽出全データの中から指定された件数(例えば32件や64件など)のデータを重複なくランダムに取り出し、1つのミニバッチを形成します。
- 順伝播の並列計算ミニバッチ内の全データをモデルへ同時に入力し、各層を行列演算によって一度に通過させて、出力値と損失値の平均を求めます。
- 逆伝播による勾配の集計ミニバッチ内の平均損失を起点として、出力層から入力層へ向けて誤差情報を逆流させ、各パラメータの勾配を計算します。
- パラメータの更新算出された勾配と学習率を用いて、モデル内部の重みとバイアスを一括して書き換えます。
この一連の流れを、手元のデータすべてを使い切るまで繰り返します。全データを1周分使い切る単位は1エポックと呼ばれ、通常は数エポックから数十エポックにわたってこのミニバッチ処理が反復されます。
まとめ
一般的なディープラーニングにおいて、順伝播と逆伝播はミニバッチごとに行われています。データ全体を一度に計算する手法のメモリ負荷と、1件ずつ計算する手法の実行効率の低さという両者の課題を解決し、GPUの計算性能を最大限に引き出すための実践的な選択肢として定着しています。
ミニバッチ学習の仕組みを段階的に修得するための順序を提示します。
- 行列演算と並列処理の関連の確認線形代数における行列同士の積を振り返り、複数のデータを並べた行列として一度に入力することで、同一の計算規則をまとめて適用できる数学的な構造を確認します。
- 小規模データによるバッチ分割の実装数十件の数値データを用意し、プログラムのループ処理を用いて指定したサイズごとに配列を切り分けてモデルへ渡す分割処理を構築します。
- エポック数とミニバッチサイズの挙動観察ミニバッチの大きさを変化させた際に、1エポックあたりの処理時間や損失の減少度合いがどのように変動するかを記録し、計算速度と学習安定性の均衡点を検証します。
セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。
投稿者プロフィール

- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
海外放浪の末、2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。


