1. 定義と概要
勾配爆発問題とは、誤差逆伝播法によって出力層側から入力層側へ向けて勾配を計算していく過程で生じる現象です。層を遡るごとに勾配の値が掛け算的に大きくなりすぎると、発散が起こります。その結果、パラメータ(モデルの内部で学習によって少しずつ調整される数値)の一種である重み(各層の入力に掛け合わされる値)の更新量が異常に大きくなり、学習が続けられなくなります。
具体例として、RNN(再帰型ニューラルネットワーク。時系列データを扱うために同じ重みを繰り返し使って過去の情報を引き継ぐ構造)のように、同じ重み行列を時間方向へ繰り返し掛け合わせる構造で顕著に起こりやすい現象です。
誤差逆伝播法は連鎖律(微分をチェーン状に掛け合わせて求める数学のルール)に基づき、出力層側の誤差を入力層側に向かって順に掛け算しながら伝えます。層が深くなる、あるいは時系列が長くなるほど、勾配を構成する重みや活性化関数の微分値(入力の変化に対する出力の変化の割合を示す値)が繰り返し掛け合わされます。
この積が1を超える状態が続くと、勾配の値は指数関数的に増大します。その結果として重みの更新量が発散し、損失がNaN(計算結果が数値として定まらなくなった状態を示す値)になるなどして、学習が続けられなくなるという流れをたどります。
2. 試験対策ポイント
まず整理しておきたいのは、勾配爆発問題と勾配消失問題(勾配が層を遡るごとに小さくなりすぎて、入力層側の重みがほとんど更新されなくなる現象)との向きの違いです。どちらも誤差逆伝播法の連鎖律による掛け算の繰り返しから生じる表裏の現象であり、掛け合わされる値が1より大きい状態が続くと爆発へ、1より小さい状態が続くと消失へ向かいます。
勾配消失問題そのものの発生メカニズムは別のテーマとして扱われるため、ここでは向きの違いにとどめて押さえておきたいところです。
対処法は、大きく3つに整理できます。
| 対処法 | ねらい |
|---|---|
| 勾配クリッピング(勾配の大きさが一定の値を超えたら、その大きさを抑える処理) | 勾配の大きさに上限を設けて、更新が発散するのを抑える |
| 重み初期化(学習を始める前に、ネットワークの重みへ最初に与える値の設定) | 重みの初期値を適切に設定して、発散しにくい状態から学習を始める |
| 学習率(1回の更新でパラメータをどれだけ動かすかを決める値)の調整 | 学習率を小さくして、1回あたりの更新幅を抑える |
このうち代表的なのが勾配クリッピングで、重み初期化と学習率の調整は、あわせて確認しておきたい2点になります。勾配クリッピングには方式の違いもあり、勾配ベクトル全体の大きさ(ノルム)を基準に比率を保ったまま縮小する方式をノルムクリッピングと呼び、要素ごとに閾値(判断の基準となる値)で抑える方式もあります。
RNNは同じ重み行列を時間ステップごとに繰り返し掛け合わせる構造のため、勾配爆発・勾配消失の双方が起こりやすい構造です。LSTM(ゲート付きの構造を持つモデル)は、主に勾配消失問題への対処を目的として考案されており、勾配爆発そのものへの中心的な対処法は、先に触れた勾配クリッピングです。
3. 関連概念との比較・相違点
勾配消失問題との最大の違いは、誤差逆伝播法での掛け算が繰り返されるたびに勾配が大きくなりすぎるか、小さくなりすぎて消えるかという向きにあります。観点ごとに並べると、次のように整理できます。
| 観点 | 勾配爆発問題 | 勾配消失問題 |
|---|---|---|
| 勾配の変化の向き | 層を遡るごとに大きくなりすぎて発散する | 層を遡るごとに小さくなりすぎて消える |
| 掛け合わされる値 | 1より大きい状態が続く | 1より小さい状態が続く |
| 症状の現れ方 | 損失の発散やNaNとして急激に表面化する | 入力層側の重みがほとんど更新されず、学習が緩やかに停滞する |
| 中心的な対処法 | 勾配クリッピング | LSTMなど、主に勾配消失への対処を目的に考案された構造 |
両者は誤差逆伝播法の連鎖律という原因を共有する表裏の現象でありながら、現れ方はまったく異なります。対処法にも重み初期化の工夫など重なりがある一方、値が大きくなりすぎるか小さくなりすぎるかという違いは取り違えやすい点です。
勾配降下法との関係も確認しておきたいところです。勾配降下法は、損失を小さくする方向へパラメータを更新していく最適化アルゴリズムそのものを指します。一方の勾配爆発問題は、その更新過程で起こりうる不具合で、勾配が発散して更新が破綻する現象です。
つまり勾配降下法は、学習という仕組みが正常に働くための土台であり、勾配爆発問題はその土台を揺るがしかねないトラブルの一つという関係にあります。両者を同じ階層の概念として並べてしまうと、最適化の枠組みと、その中で起こりうる不具合とを取り違えることになります。階層の違いとして整理しておくと、理解が深まるものです。
4. ビジネス・実務での活用シナリオ
自然言語処理(機械翻訳や音声認識のように、時系列を伴うデータを扱う分野)では、RNN系のモデルで長い文章や音声データを学習させる際に勾配爆発が起こりやすくなります。学習ループへ勾配クリッピングを組み込むことで発散を防ぎ、学習を安定させる実装が定着してきました。人手で逐一監視するには学習の反復回数が多すぎるため、こうした自動的な抑制の仕組みは実務で欠かせません。
画像認識の分野では、層数の多いディープラーニングのネットワークを一から学習させる際、不適切な重み初期化と組み合わさると勾配爆発が起こりやすくなります。適切な重み初期化と学習率の設定こそが、発散を避けて安定した学習を実現する鍵です。学習をやり直すたびに計算資源と時間を消費するため、初期段階でのこうした備えが最終的な開発コストを左右します。
大規模言語モデル(膨大な文章データから言葉のつながりを学習し、対話や文章生成に使えるようにしたモデル)の事前学習でも、勾配クリッピングは標準的な安定化策として組み込まれるのが通例です。パラメータ数が膨大で学習にも長い時間がかかるため、途中で発散して最初からやり直す事態は大きな損失につながります。あらかじめクリッピングを組み込んでおく発想が、こうした大規模開発の現場で広く共有されているのは、やり直しのコストがそれだけ大きいからです。
5. 要点まとめ
- 勾配爆発問題は、誤差逆伝播法で勾配が層を遡るごとに大きくなりすぎて発散し、学習が破綻する現象です。
- 掛け算の繰り返しで値が縮小する勾配消失問題と表裏の関係にあり、RNNのように同じ重みを繰り返し掛ける構造で起こりやすい現象です。
- 対処法として、勾配クリッピング・適切な重み初期化・学習率の調整の3点をあわせて押さえておきたいところです。
6. 確認問題
問1勾配爆発問題は、誤差逆伝播法で勾配を計算する際に、層を遡るごとに勾配の値が大きくなりすぎて発散し、学習が不安定になる現象である。
解答・解説をみる
○ 正しい
定義どおりで、誤差逆伝播法の掛け算の繰り返しによって勾配が大きくなりすぎ、重みの更新が発散して学習が続けられなくなる現象を指します。RNNのように同じ重み行列を繰り返し掛け合わせる構造で顕著です。
問2勾配爆発問題への対処法の一つである勾配クリッピングは、勾配ベクトルの大きさが一定の閾値を超えた場合に、その大きさを抑える処理である。
解答・解説をみる
○ 正しい
勾配クリッピングは、勾配ベクトルのノルムなどが閾値を超えた場合に比率を保ちながら縮小し、方向を変えずに大きさだけを制限する処理です。重み初期化・学習率の調整とあわせて押さえておきたい対処法です。
問3勾配爆発問題と勾配消失問題は原因がまったく異なる別種の現象であり、対処法にも共通点はない。
解答・解説をみる
× 誤り
正しくは、両者はともに誤差逆伝播法の連鎖律による掛け算の繰り返しから生じる表裏の現象であり、重み初期化の工夫など対処法にも重なりがあります。値が大きくなりすぎるか小さくなりすぎるかという向きが異なるだけで、根本の原因は共通している点が取り違えやすいところです。

