確率的勾配降下法(SGD) (G検定)

確率的勾配降下法(SGD)

1. 定義と概要

確率的勾配降下法(SGD)とは、訓練データの中からランダムに1件、実務では少数のまとまりであるミニバッチ(訓練データを少数ずつのまとまりに分けたもの)を選び出す最適化アルゴリズムです。選び出したデータについてその勾配(値を小さくする方向を示す傾き)を計算し、パラメータ(モデル内部の重みなど、学習によって調整される数値)を更新する操作を、1件ずつ処理する場合はデータの数だけ繰り返します。

ニューラルネットワークの学習で損失関数(モデルの予測が正解からどれだけズレているかを数値化したもの)を最小化する際の標準的な手法として使われます。パラメータの更新を1回行うたびに損失関数の値が少しずつ小さくなっていき、この繰り返しによってモデルが徐々に賢くなっていく仕組みです。

従来、ニューラルネットワークの学習では、訓練データ全件の誤差をまとめて計算してから1回だけパラメータを更新する最急降下法(バッチ勾配降下法。訓練データ全件を使ってから1回だけパラメータを更新する方法)が基本の手法でした。しかし、データ量が増えると1回の更新に必要な計算量が膨大になり、大規模なデータセットでは現実的な学習時間に収まらなくなります。そこで、1件またはミニバッチ単位で逐次パラメータを更新するSGDが、計算負荷を抑えながら学習を進める手法として使われるようになりました。

SGDは、パラメータをどれだけ動かすかを決める学習率(1回の更新でパラメータをどれだけ動かすかを決める数値。姉妹記事で扱います)という別の数値とセットで機能します。学習率の値が同じでも、SGDと最急降下法では1回の更新に使うデータ量が異なるため、更新の進み方や安定性は変わってきます。

2. 試験対策ポイント

SGDを理解するうえでの中心的な論点となるのは、訓練データからランダムに1件、実務ではミニバッチを選択し、勾配を計算してパラメータを更新するという一連の処理をデータ数だけ繰り返す、という手続きの流れそのものです。手順として並べると、次の4段階になります。

手順 行うこと
1 訓練データからランダムに1件、実務ではミニバッチを選ぶ
2 選んだデータについて勾配を計算する
3 勾配をもとにパラメータを更新する
4 手順1から3をデータの数だけ繰り返す

この手続きから生まれる利点は大きく2つあります。1つ目は計算効率です。全データを使う最急降下法と比べて1回の更新に必要な計算量が小さく、大規模なデータセットに対しても効率的に学習を進められます。訓練データが数百万件規模になっても、1件ずつあるいはミニバッチ単位で処理を進められるため、メモリの制約が厳しい環境でも学習を回しやすくなります。

2つ目は局所最適解(全体としては最良でないが、周辺だけを見ると最も良く見えてしまう答え)からの脱出しやすさです。更新のたびに使うデータが変わることで勾配の推定にばらつき、いわゆるノイズ(データのばらつきによって生じる予測しにくい揺らぎ)が生じます。このノイズが探索範囲を広げるため、一度局所的な最小値に入り込んでも次の更新で抜け出す動きにつながります。

一方で、勾配の推定にノイズが伴う分、パラメータの更新は安定せずジグザグに動きやすいという欠点があります。学習率の設定を誤ると、更新が発散したり収束が遅れたりする点も、あわせて押さえておきたい関連知識です。発散とは、パラメータの値が最適な地点に近づくどころかどんどん大きくずれていってしまう現象です。

Adam(学習率を自動調整しながら最適化を進める発展的な手法)は、SGDを土台にした発展形として位置づけられています。G検定では、数式までは踏み込まず、SGDの発展形であるという位置づけをおさえておけば足ります。

3. 関連概念との比較・相違点

SGDは、1回の更新に使うデータ量が異なる2つの手法と並べて整理される関係にあります。まずは三者の違いを、使うデータ量と更新の性格という軸で見比べておくと混同しにくくなります。

手法 1回の更新に使うデータ量 更新の性格
最急降下法(バッチ勾配降下法) 訓練データ全件 計算コストは大きいが、経路は緩やかで安定
SGD 1件 計算は軽いが、経路はジグザグになりやすい
ミニバッチ学習(ミニバッチSGD) 少数サンプルのまとまり 両者の折衷で、効率と安定性を両立しやすい

最急降下法との最大の違いは、1回の更新に使うデータ量です。最急降下法は訓練データ全件を使ってから1回更新するため計算コストが大きく、更新の経路は緩やかで安定していますが、SGDは1件のみで逐次更新するため計算は軽い一方、経路がジグザグになりやすいという関係にあります。同じ訓練データを学習させても、最急降下法は1回の更新に長い時間がかかる代わりに歩みが確実で、SGDは短時間で多くの更新を重ねる代わりに歩みが揺れやすい、という対照的な性格を持ちます。

もう1つの重要な対比が、ミニバッチ学習(ミニバッチSGD)です。これは1件ではなく少数サンプルのまとまりであるミニバッチごとに勾配を計算して更新する手法で、SGDと最急降下法の折衷にあたります。SGDの計算効率とバッチ学習の安定性を両立できるため、実務のディープラーニング学習ではミニバッチSGDが標準的に使われています。

G検定では、最急降下法・SGD・ミニバッチ学習の3つを、1回の更新に使うデータ量が「全件・1件・少数件」と並ぶ関係として整理して覚えておく必要があります。三者の名前だけを暗記するより、この数量の並びに紐づけて覚えるほうが、取り違えを防ぎやすくなります。

4. ビジネス・実務での活用シナリオ

製造業の画像検査AIでは、数十万枚規模の検査画像を使ってCNN(画像の特徴を捉えるのに強いニューラルネットワークの一種)を学習する際に、ミニバッチSGDが計算時間とメモリ使用量を現実的な範囲に収める土台になっています。バッチサイズ(1回の更新に使うミニバッチの件数)の調整が、学習速度と安定性のバランスを左右します。バッチサイズを大きくすると更新は安定しやすくなりますが、その分メモリの使用量も増えるため、現場では計算資源との兼ね合いで調整されています。

ECサイトのレコメンドシステムでは、日々追加される購買ログを都度モデルへ反映する運用が一般的です。データが届くたびに小刻みにパラメータを更新するSGDの逐次更新の枠組みが、この運用を支えています。新しい購買データが発生するたびに全件を再学習し直す方式では計算量が膨らみ続けるため、逐次的に更新できるSGDの枠組みが実運用に向いています。

自然言語処理(コンピュータに人間の言葉を扱わせる技術分野)の大規模モデル学習でも、SGDの考え方は欠かせません。膨大なコーパス(学習に使う大量の文章データ)を一度にメモリへ載せず、ミニバッチ単位で処理することで、限られた計算資源でも言語モデルの学習を進められます。

5. 要点まとめ

  • SGDは訓練データからランダムに1件、実務ではミニバッチを選んで勾配を計算し、パラメータ更新をデータ数だけ繰り返す最適化手法です。
  • 全データを使う最急降下法に比べて1回の更新の計算量が小さく大規模データに向いており、更新のばらつきが局所最適解からの脱出を助けます。
  • 一方で更新が不安定になりやすく学習率の設定が重要であり、実務ではSGDとバッチ学習の折衷であるミニバッチSGDが標準として使われています。

6. 確認問題

問1確率的勾配降下法は、訓練データの中からランダムに選んだ一部のデータのみを用いて勾配を計算し、パラメータを更新する処理を繰り返す手法である。

解答・解説をみる

○ 正しい

定義そのものです。厳密には1件ずつ処理しますが、実務ではミニバッチ単位で行うミニバッチSGDが標準として使われます。

問2確率的勾配降下法は訓練データ全件を用いて勾配を計算してからパラメータを更新するため、最急降下法よりも1回の更新にかかる計算量が大きい。

解答・解説をみる

× 誤り

正しくは、訓練データ全件を用いてから1回更新するのは最急降下法です。SGDは一部のデータのみを使うため、1回の更新にかかる計算量は最急降下法より小さくなります。両者の説明を入れ替えた記述は取り違えやすい点です。

問3確率的勾配降下法では、パラメータ更新のたびに用いるデータがランダムに変わることで勾配の推定にばらつきが生じ、これが局所的な最小値から抜け出す助けになる場合がある。

解答・解説をみる

○ 正しい

更新ごとに生じるノイズが探索範囲を広げ、局所最適解への収束を回避しやすくする効果として説明されます。