# 勾配消失問題
勾配消失問題（こうばいしょうしつもんだい、英: vanishing gradient problem）は、機械学習において、勾配ベースの学習手法と誤差逆伝播法を利用してニューラルネットワークを学習する際に、誤差逆伝播に必要な勾配が非常に小さくなり、学習が制御できなくなる問題である。
この問題を解決するために、リカレントニューラルネットワークではLSTMと呼ばれる構造が導入されたり、深層のネットワークではResNetと呼ばれる構造が導入される。
また、活性化関数の勾配が非常に大きな値をとり、発散してしまうこともある。このような問題は、勾配爆発問題（こうばいばくはつもんだい、英: exploding gradient problem）と呼ばれる。

## 勾配消失問題の発生
誤差逆伝播法を用いて学習する場合、ニューラルネットワーク上の各ノードの重みは、学習ステップごとに計算される損失関数を、自身のノードの重みで偏微分した勾配に比例して更新される。勾配消失問題は、この勾配が非常に小さくなることで、ニューラルネットワークの重みが更新されにくくなることによって生じる問題である。最悪の場合には、重みの更新が完全に起こらなくなってしまうこともある。この問題が起こる一例として、双曲線正接関数（sigmoid関数）のような古典的な活性化函数を用いた場合が挙げられる。誤差逆伝播法では連鎖律を用いて、ニューラルネットワークの出力層から遡って、各ノードの重みによる損失関数の偏微分が計算される。例として挙げたsigmoid関数は、勾配の値域が(0, 1)であるため、このような場合には、出力層から遠い層、すなわち入力層から見て近い層のノードほど指数的に勾配が小さくなり、結果として学習の進む速度が遅くなる。
誤差逆伝播法の開発により、教師あり学習で深層ニューラルネットワークを学習させることができるようになったが、当初はあまりうまくいかなかった。こうした学習の失敗について、Hochreiterが1991年に発表した学位論文で、その原因が勾配消失問題にあることを特定した。勾配消失問題は順伝播型の多層ニューラルネットワークだけでなく、回帰型ニューラルネットワークにおいても生じる。回帰型ニューラルネットワークは学習の際、ネットワークに入力される系列データを処理する時間ステップごとにモデルの複製を追加することで、時間方向に展開された非常に深い順伝播のネットワークと見なして逆伝播を適用することができる。このような学習方法は通時的誤差逆伝播法（BPTT法とも）と呼ばれている。

## 解決手法

### Multi-level hierarchy
勾配消失問題を解消するため、様々な手法が提案されている。その一つが、1992年にユルゲン・シュミットフーバーによって提案されたmulti-level hierarchyと呼ばれる方法である。これは本来学習したいモデルを分割して、それぞれを教師なし学習を用いて別個に事前学習し、最終的にそれらを接続したものに対し、誤差逆伝播を用いたファインチューニングを行う手法である。
部分モデルそれぞれは、前の階層に相当する部分モデルの出力から次の階層に供給すべき入力の圧縮表現を学習する。

#### 関連するアプローチ
類似する考え方として、教師なしの事前学習をニューラルネットワークに対して行い、一般的に有用な特徴検出器を学習するというものがある。その後、ラベル付きデータを用いて教師ありの誤差逆伝播法によりモデルをさらに学習する。
深層信念ネットワーク（Deep Belief Network, 以下DBN）は、2006年にヒントンらが提案したモデルで、二値もしくは実数値をとる潜在変数の連続した層によって、高度な特徴表現の分布を学習することができる。DBNは、より高度な特徴表現を獲得するために制限付きボルツマンマシンを多層に積み重ねたものである。全層を同時に学習するのではなく、入力層と直後の隠れ層に関する制限付きボルツマンマシンを学習し、次に隠れ層の1層目と2層目に関する制限付きボルツマンマシンを学習するといったように、層ごとに学習をするネットワークである。各層の制限付きボルツマンマシンは、入力に対する対数尤度の下界が増加することを保証するため、学習が適切に進めばモデル全体としても性能が向上することになる。
十分に学習された深層信念ネットワークは、隠れ層の最も深い層から入力層に向けて、各層で値を順にサンプリングしていくことにより、最終的にデータを再生成することができるため、生成モデルとして利用することができる。ヒントンは、自身の開発した深層信念ネットワークが高次元の構造化されたデータに対して、有用な特徴抽出器であると報告している。

### LSTM
回帰型ニューラルネットワークで用いられる手法として、長期短期記憶ネットワークが挙げられる。LSTMは、1997年にホッフライターとシュミットフーバーによって提案された。RNNは時間方向に展開することで順伝播型のニューラルネットワークと同様に逆伝播を行うことができるが、長時間にわたって展開すると層が深くなり、勾配の誤差が積み重なってしまう可能性がある。一方で、LSTMでは過去の入力特徴を保持する機構を持っているため、時系列が増えても情報の伝達がしやすい。
2009年には、筆記体の文字認識コンペティションにおいて、認識対象となる3つの異なる言語の事前知識なしに学習を行う深層多次元LSTMを用いたモデルが3度優勝し、非線形の層を多数持つ深層学習の性能の高さを示した。

### 残差ネットワーク(ResNet)
勾配消失問題への対策として、比較的新しく有用度も高いのが、2015年に提案された残差ネットワーク（ResNet）である。
ResNetは、ニューラルネットワークの一部に層を飛び越えるような接続を含む構造を持つ。
こうしたスキップ接続により、通常は直後の層の入力にのみ用いられる出力が、より深い層の出力に加えられその先の層に入力されるため、情報が層を超えて伝播するようになることが期待される。スキップ接続は、深層ニューラルネットワークをうまく学習するための重要な要素になっている。
ResNetでは、消失した情報を補完するために浅い層の出力をより深い層に対して単に加えるだけで、通常の浅いネットワークよりも学習時の損失と評価時の損失を抑えることができた。
なお、ResNetは比較的浅いネットワークのアンサンブルとして捉えることができるとされており、ネットワーク全体にわたって勾配情報を保持することで勾配消失の問題を解決しているのではなく、むしろ、多数の短いネットワークをアンサンブルさせることで勾配消失問題を回避しているとする説がある。

### 活性化関数の変更
正規化線形関数（ReLUと表記されることもある）は活性化関数の一つで、入力が正の範囲では単調増大するため、勾配消失の影響を受けにくい。2018年現在、深層学習で広く使われている活性化関数である。単調でない、飽和しない、振動する、といった性質を持つ活性化関数は、勾配消失問題を緩和するとともに、学習時間の削減にも寄与する。振動する活性化関数で、勾配をよく伝播し学習速度を向上させるものの例を、右の図に示している。

### 学習時の重みの初期値の設定
深層学習モデルの重みパラメータの初期値を適切に設定することにより、勾配消失や爆発といった問題を避けられることが知られている。代表的な初期化手法としては、2010年に提案されたXavielの初期値や、2015年に提案されたHeの初期値などがある。この2つのアプローチは、いずれも入出力のノード数をパラメータに用いた正規分布に従って重みを初期化するものであり、重みの分散を初期化時に制御することで、各層の活性化関数の出力や勾配の分散が増大、あるいは減少しないようにしている。

### バッチノーマライゼーション
ニューラルネットワークの学習において、入力データを正規化することで学習が進みやすくなることが知られている。バッチノーマライゼーションは、この考え方を深層学習モデルの層間に拡張した最適化手法で、途中の層でミニバッチごとの入出力を正規化するものである。バッチノーマライゼーションは2015年に提案された手法で、深層学習モデルでは、入力学習データによって隠れ層への入力の分布が偏っているという内部共変量シフト（internal covariate shift）と呼ばれる問題が生じていると仮定し、この入力の分布の偏りを正規化することで防ぐ狙いがある。バッチノーマライゼーションは深層学習の学習を安定化させることに寄与しており、その効果の一つとして勾配の消失や発散を防ぐことが報告されており、バッチノーマライゼーションを適用することで、層間の活性化関数の勾配が安定するという結果も実験的に得られている。

### 処理速度の速いハードウェアの活用
1990年代以降のハードウェアの進展により、コンピュータの演算能力、特にGPUに由来する演算能力は100万倍にも向上しており、勾配消失問題の存在が認識されたころと比べると、数段深いネットワークに対しても誤差逆伝播を用いた計算が普通に処理されるようになっている。シュミットハーバーは2015年の論文で、画像認識のコンペティションで高い性能を収めているものは基本的にこうした深層ネットワークだと述べる一方で、勾配消失問題を根本的に克服できたわけではないとしている。ヒントンらが2006年に勾配消失問題の解決に取り組んだ研究では、GPUではなくCPUを用いて学習されたモデルが利用されている。

### その他
ドイツの計算機科学者であるベーンケは、画像の再構成や顔認識といった問題を解くために、勾配の符号のみを用いてNeural Abstraction Pyramidと呼ばれるネットワークを学習した。
ニューラルネットワークは、ニューラルネットワークの重みが取りうる空間全体を探索するアルゴリズムを用いることでも最適化できる。例えばランダムな探索もここに含まれるし、よりシステマチックなアルゴリズムとしては遺伝的アルゴリズムなどもある。こうしたアプローチは勾配によらず最適化を行うため、勾配消失問題を避けることができる。