勾配降下法とは

こうばいこうかほう

損失関数の勾配(各パラメータについての偏微分)を求め、勾配と逆の向きにパラメータを少しずつ動かすことを繰り返して、損失が小さくなるパラメータを探す最適化の方法。更新は w ← w − η∇L で表され、ηを学習率と呼ぶ。データの一部(ミニバッチ)で求めた勾配を使う確率的勾配降下法(SGD)や、その改良であるモメンタムやAdamが、ニューラルネットワークの学習に広く使われる。

「勾配降下法」は、1分野の1問の練習問題に出てきます(機械学習の基礎など)。

この用語の分野: 機械学習の基礎

更新の式と学習率

損失Lを重みwの関数とみると、勾配∂L/∂wは、wを少し増やしたときにLが増える向きと大きさを表します。そこで w ← w − η × ∂L/∂w と、勾配と逆の向きにwを動かします。例えば L = (w − 3)² で w = 0 から始めると、勾配は 2 × (0 − 3) = −6 なので、η = 0.1 では w は0.6に進みます。この例でηを0.1にすると、最小点 w = 3 までの残りの距離は1回の更新ごとに0.8倍になって縮みますが、ηを1.1にすると更新のたびに最小点を飛び越え、距離が1.2倍ずつ広がって発散します。

バッチ、ミニバッチ、確率的勾配降下法

学習用データ全体で損失の勾配を正確に求めてから1回更新する方法をバッチ勾配降下法と呼びますが、データが多いと1回の更新に時間がかかります。そこで、データから選んだ一部(ミニバッチ)だけで勾配を求めて更新を繰り返す確率的勾配降下法が使われます。勾配には雑音が混じりますが、更新の回数を多くでき、GPUで並列に計算しやすい大きさにまとめられます。学習用データ全体をひと通り使い終わるまでを1エポックと呼びます。

改良された方法

単純なSGDは、細長い谷のような形の損失では、谷を横切る向きに行ったり来たりして進みが遅くなります。モメンタムは、過去の更新の向きを慣性のように引き継いで、この振動を抑えます。AdamやRMSPropは、パラメータごとに勾配の大きさの履歴から更新の幅を自動で調整します。学習の初めに学習率を徐々に上げるウォームアップや、学習が進むにつれて学習率を下げるスケジュールもよく使われます。

勾配降下法の練習問題に挑戦

勾配降下法で、重み w = 2.0 における損失の勾配 ∂L/∂w が0.5、学習率が0.1のとき、1回の更新後の重みはどれか。

  1. A1.5
  2. B1.95
  3. C2.05
答えと解説を見る

正解:B. 1.95

勾配降下法では、損失が小さくなる向き、つまり勾配と逆の向きに重みを動かし、w ← w − η × ∂L/∂w と更新します(ηは学習率)。この問いでは、w = 2.0 − 0.1 × 0.5 = 1.95です。学習率が大きすぎると損失の谷を飛び越えて振動したり発散したりし、小さすぎると学習がなかなか進みません。実際の学習では、データの一部(ミニバッチ)で求めた勾配で更新を繰り返す確率的勾配降下法(SGD)や、その改良であるAdamなどが使われます。

よくある質問

勾配降下法と誤差逆伝播法はどう違いますか?

誤差逆伝播法は、ニューラルネットワークのすべての重みについて損失の勾配を効率よく計算する方法です。勾配降下法は、その勾配を使って重みを更新する方法です。学習では、順伝播で損失を求め、逆伝播で勾配を求め、勾配降下法で重みを更新する、という流れを繰り返します。

勾配降下法で最もよい解が見つかりますか?

損失関数が凸(谷が1つだけ)なら、学習率を適切に選べば最小点に近づけます。ニューラルネットワークの損失は凸ではないので、見つかるのは局所的な解であることが多いですが、パラメータの多いネットワークでは、それでも実用上十分な性能が得られることが多いと経験的に知られています。

解説の中の「勾配降下法」

「勾配降下法」が出てくる問題(1問)

  1. 勾配降下法で、重み w = 2.0 における損失の勾配 ∂L/∂w が0.5、学習率が0.1のとき、1回の更新後の重みはどれか。

機械学習の基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

関連する用語

過学習 活性化関数 強化学習 教師あり学習 教師なし学習 k平均法 交差検証 混同行列 再帰型ニューラルネットワーク(RNN) 主成分分析(PCA)

用語集の一覧へ