0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

勾配降下法

勾配降下法(Gradient Descent)は、機械学習や最適化の分野で広く用いられる最適化アルゴリズムの一つである。主な目的は、損失関数(コスト関数)を最小化するようなパラメータを見つけることである。
イメージとしてはどうすればもっと正しい答えが出るか、勉強して少しずつ正しい方向に向かうイメージ。

損失関数とは

損失関数とは、モデルの予測値と実際の正解値との差を数値化する関数である。
損失関数の値が小さいほど、予測は正解に近いことを意味する。

多くの場合、損失関数は二乗誤差などを用いた2次関数として表現される。

損失関数の値をL、調整したいパラメータを wとすると、損失関数は以下のような曲線(谷)として表される。
image.png

image.png

この「谷の一番低い点」を見つけることが、学習の目的である。

勾配降下法とは

勾配降下法とは、損失関数の勾配(傾き)を利用して、関数の値が小さくなる方向へパラメータを更新していく手法である。直感的には、「山の斜面に立って、最も急に下る方向へ一歩ずつ進む」というイメージである。

谷が1つしかない場合は最適解を見つけやすいが、実際の問題では谷が複数存在する(局所解)場合があり、必ずしも最適解にたどり着くとは限らない。

勾配降下法の基本手順

手順1:パラメータの初期値を設定する

最初にパラメータの初期値を設定する。初期値はランダムな値や0で初期化されることが多い。今回は0とする。
これは「どこから山を下り始めるか」を決める作業である。

手順2:損失関数の勾配を計算する

現在のパラメータにおける損失関数の勾配(偏微分)を計算する。
勾配は「どちらの方向に、どれくらい進めばよいか」を示す指標である。

勾配は以下のように計算する。

image.png

w=0を代入する。

image.png

image.png

勾配が 負(−4)→w を 大きくする方向(右方向) に進めばよい
これはグラフ上で見ると:w=0 は谷の左側、谷底(最小値)はw=2。つまり、w=0にいるとき、勾配降下法は右方向に進むべきだと判断する

パラメータを更新する

計算した勾配を用いて、パラメータを更新する。
一般的な更新式は以下の通りである。

新しいパラメータ = 現在のパラメータ − 学習率 × 勾配

学習率を1とすると、新しいパラメータは以下のように算出できる。
image.png

学習率(learning rate)は、1回の更新でどれだけ進むかを決めるハイパーパラメータである。

収束判定を行う

パラメータが十分に収束したかを判定する。収束していない場合は、再び勾配計算と更新を繰り返す。

収束条件の例:

  • 指定したエポック数に達した

  • 損失関数の変化量が閾値以下になった

最終的なパラメータを出力する

収束が確認できた時点のパラメータが、最適化されたパラメータである。
これをモデルの学習結果として利用する。

勾配降下法の種類

勾配降下法には、データの使い方によっていくつかの種類が存在する。

バッチ勾配降下法(Batch Gradient Descent)

バッチ勾配降下法は、データセット全体を使って勾配を計算し、パラメータを更新する手法で最も基本的な勾配降下法である。

勾配降下法の基本的な考え方

勾配降下法は、損失関数 L(w) の勾配(微分)を用いて、パラメータwを更新する最適化手法である。

基本的な更新式は以下の通りだ。

image.png
image.png

勾配は「損失が最も増加する方向」を示すため、その逆方向に進むことで損失を減少させることができる。

バッチ勾配降下法の定義

バッチ勾配降下法とは、すべての学習データを用いて勾配を計算し、その結果をもとにパラメータを更新する手法である。

訓練データが N個あるとき、損失関数は以下のように定義される。

image.png

バッチ勾配降下法では、この 全データに対する損失の平均 を用いて勾配を計算する。

アルゴリズムの流れ

バッチ勾配降下法の手順は以下の通りである。

  • パラメータwを初期化する

  • 全訓練データを用いて損失関数の勾配を計算する

  • 学習率を掛けてパラメータを更新する

  • 収束条件を満たすまで2〜3を繰り返す

このように、1回の更新につき必ず全データを使用する点が最大の特徴だ。

特徴と利点

  • 勾配が安定している

全データを使用するため、計算される勾配は真の勾配に近く、更新方向が安定している。
その結果、損失関数は単調に減少しやすく、理論的に収束性が高い。

  • 理論解析が容易

ノイズの少ない勾配を用いるため、凸最適化問題においては最適解への収束が理論的に保証される。
この性質から、最適化理論の説明や教育用途でもよく用いられる。

  • 実装が単純

ミニバッチ分割やランダムサンプリングを必要とせず、実装が非常にシンプルである。
勾配降下法の概念を理解する上では最適な手法だ。

欠点と限界

  • 計算コストが非常に大きい

データ数Nが大きい場合、1回の更新で全データ分の計算が必要となる。
そのため、データが数十万〜数百万規模になると、1ステップの更新自体が現実的でなくなる。

  • メモリ使用量が大きい

全データを一度に扱うため、メモリ消費が大きく、GPUや一般的なPC環境では扱えない場合がある。

  • 学習が遅い

更新頻度が低く、1回の更新に時間がかかるため、学習全体に要する時間が長くなる。
実務ではこの点が致命的となることが多い。

ミニバッチ勾配降下法(Mini-batch Gradient Descent)

ミニバッチ勾配降下法(Mini-batch Gradient Descent)とは、深層学習モデルの訓練において、データセット全体ではなく、その一部ミニバッチ)を用いて勾配を計算し、モデルのパラメータを更新する最適化アルゴリズムである。

本手法は、バッチ勾配降下法と確率的勾配降下法(SGD)の中間に位置するアプローチであり、計算効率と学習の安定性を両立できることから、現代の深層学習における事実上の標準手法となっている。

ミニバッチ勾配降下法の仕組み

ミニバッチ勾配降下法は、バッチ勾配降下法、確率的勾配降下法の折衷案である。
訓練データを小さなグループ(ミニバッチ)に分割し、そのミニバッチごとに勾配を計算して更新を行う。

学習の流れは以下の通りである。

  • 訓練データを固定サイズのミニバッチに分割する

  • 各ミニバッチに対してモデルの予測を行う

  • 損失関数を計算する

  • 勾配を計算する

  • 学習率を用いてパラメータを更新する

更新式は次のように書ける。

image.png

ミニバッチサイズの重要性

ミニバッチサイズは、ミニバッチ勾配降下法における重要なハイパーパラメータである。
一般的には、32、64、128、256などの2の累乗がよく用いられる。

小さいミニバッチサイズ

  • SGDに近い挙動

  • 勾配のノイズが大きい

  • 更新回数が多い

  • 汎化性能が高い傾向

大きいミニバッチサイズ

  • バッチ勾配降下法に近い挙動

  • 勾配が安定

  • GPU並列計算を効率的に利用可能

  • 局所最小値に陥りやすい可能性

実務では、計算資源と学習の安定性を考慮してバッチサイズを調整することが重要である。

ミニバッチ勾配降下法の利点

  • 計算効率の向上

全データを用いるバッチ勾配降下法と比べ、1回あたりの計算量が大幅に削減される。
GPUなどの並列計算資源を最大限に活用できる。

  • 学習の安定性

SGDほど勾配ノイズが大きくなく、比較的安定した収束が期待できる。

  • 局所最小値からの脱出

ミニバッチごとの勾配のばらつきが、非凸最適化において局所的最小値や鞍点からの脱出を助けることがある。

課題と対策

  • 勾配ノイズの存在

完全なバッチ学習と比べると、勾配には依然としてノイズが含まれる。そのため、以下の手法と併用されることが多い。

  • 学習率スケジューリング

Adam、RMSprop、Adagradなどの適応的最適化手法

  • Batch Normalization

これらは、ミニバッチ勾配降下法の性能をさらに引き出すための重要な要素である。

確率的勾配降下法(SGD: Stochastic Gradient Descent)

確率的勾配降下法(SGD: Stochastic Gradient Descent)は、機械学習および深層学習において広く用いられている最適化アルゴリズムの一つである。
特に、大規模なデータセットを扱う場面において、計算効率の高さから実用上非常に重要な役割を果たしている。

一方で、勾配にランダム性が含まれるため挙動が直感的に理解しにくく、初学者にとっては難解に感じられることも多い。

確率的勾配降下法(SGD)の動作原理

確率的勾配降下法は、データセット全体を用いず、ランダムに選ばれた1サンプル(または小規模なサンプル集合)を用いて勾配を推定し、パラメータを更新する手法である。

通常の勾配降下法では、すべての訓練データに対する平均勾配を計算する必要がある。一方、SGDでは以下のような流れで学習が進む。

  • 訓練データからランダムに1サンプルを選択する

  • そのサンプルに対する損失と勾配を計算する

  • 勾配に基づいて即座にパラメータを更新する

このように、1ステップごとの計算量が小さいため、大規模データセットに対しても高速に学習を進められる点が大きな特徴である。

SGDのランダム性とその意味

SGDの最大の特徴は、勾配推定にランダム性が含まれる点にある。
各更新で異なるサンプルを用いるため、勾配は常に正確な方向を指すとは限らず、ノイズを含む。

しかし、このノイズは必ずしも欠点ではない。
非凸最適化問題においては、局所最小値や鞍点に陥ることがあるが、SGDのランダムな揺らぎは、こうした停滞点から脱出する助けになることがある。

確率的勾配降下法(SGD)のメリット

  • 大規模データセットに対応できる

SGDは全データを一度に扱わないため、メモリ消費が少なく、大規模データセットに適している。

  • 収束速度が速い

1回あたりの計算が軽いため、パラメータ更新を高速に繰り返すことができる。

  • オンライン学習に適している

データが逐次到着する環境でも、その都度モデルを更新できる。

  • 局所最適解から脱出できる可能性がある

勾配のノイズにより、局所最小値に固定されにくい。

確率的勾配降下法(SGD)のデメリット

  • 最適解の質が低下する可能性

損失関数の最小値近傍で振動し、厳密な最小値に到達しないことがある。

  • ハイパーパラメータに敏感

学習率やバッチサイズの設定次第で、性能が大きく変わる。

  • 収束判定が難しい

損失が上下に振動するため、「十分に収束したか」の判断が困難である。

  • 勾配分散が大きいと不安定

サンプルのばらつきが大きい場合、学習が不安定になる。

3つの手法の比較配下

手法 勾配計算に使うデータ量 計算コスト 学習の安定性 ノイズの大きさ 主な特徴
バッチ勾配降下法 全データ 高い 非常に高い 小さい 正確だが大規模データに不向き
確率的勾配降下法(SGD) 1サンプル 非常に低い 低い 大きい 高速だが不安定
ミニバッチ勾配降下法 一部のデータ 中程度 高い 中程度 実用上の標準手法

その他の手法

手法名 概要 学習率の調整方法 長所 短所 向いている場面
AdaGrad SGDを改良し、過去の勾配の大きさに応じてパラメータごとに学習率を調整する手法である 勾配の二乗を累積し、学習率を単調に減少させる ・パラメータごとに学習率を自動調整できる
・初期学習が安定しやすい
・学習が進むと学習率が極端に小さくなる
・プラトー(停留点)から抜けにくい
疎な特徴量を持つ問題(例:自然言語処理の一部タスク)
RMSProp AdaGradの欠点を改善し、勾配の二乗の移動平均を用いる手法である 勾配二乗の指数移動平均により学習率を調整 ・AdaGradより長期学習に強い
・プラトーから抜けやすい
・ハイパーパラメータ(減衰率)の設定が必要 非定常な問題、深層学習全般
Adam MomentumとRMSPropを組み合わせた手法である 勾配の平均(1次モーメント)と分散(2次モーメント)を同時に利用 ・収束が速い
・安定性が高い
・初期設定のままでも動きやすい
・理論的な最適性に議論がある
・場合によっては過学習気味になる
深層学習全般(デフォルトの最適化手法として使われることが多い)

AdaGrad
→ 「学習率をどんどん小さくする堅実型」

RMSProp
→ 「最近の勾配を重視する改良型AdaGrad」

Adam
→ 「方向(Momentum)+大きさ(RMSProp)を同時に考える万能型」

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?