ポイント
- 勾配消失は、学べという信号が層をさかのぼって下りていくうちにだんだん小さくなり、入力側の層にはほとんど届かなくなる現象です。
- 信号は層を通るたびに掛け合わされながら伝わります。1より小さい数を何度も掛けるとすぐに0に近づきます。
- 入力側の層がほとんど止まったままだと、深く積んだのにかえって成績が悪くなることもあります。
- 活性化関数の変更、値の大きさをそろえる工夫、層を飛び越える近道でかなりの部分が解決されました。
- 逆に信号が層ごとに大きくなり続けると、値が爆発する反対側の問題が起こります。
たとえで理解する
教室で一列に並んで行う伝言ゲームを思い浮かべてください。一番後ろの人が「三列目からやり直し」と前の人の耳にささやきます。ルールが一つあります。聞いた声の半分の大きさでだけ次の人に渡すこと。
五人過ぎるだけで声はつぶやきになり、十人目では前の人の耳に息の音しか届きません。一番前に立つ人は何を直すべきか聞けないまま、最初の姿勢のまま立っています。後ろは少しずつ整えられていくのに前だけ止まったままの状態、これが勾配消失です。
列を長くするほどこの問題は深刻になります。人を増やすほど前のほうはより静かになるからです。
くわしく
信号は後ろから前へ流れる
モデルが答えを出すときは、入力から出力の方向へ計算が流れます。反対に「何を直すべきか」を知らせる信号は、出力側から入力側へさかのぼって流れます。答えがどれだけ間違っているかは一番最後でしか分からないからです。
だから出力に近い層はこの信号を最初に、そして最もはっきりと受け取ります。入力に近い層は、その信号がいくつもの層を通り抜けたあとでようやく受け取ります。列の一番後ろから始まった伝言が一番前まで届くのと同じ順番です。
層を通るたびに掛け合わされる
信号が一つの層を渡るとき、その層が持つ値と活性化関数の性質によって大きさが調整されます。問題は、この調整が足し算ではなく掛け算であることです。層ごとに半分ずつ減るなら、十層を通るときに信号は千分の一以下まで下がります。
特に以前よく使われていたS字型の活性化関数は、入力が少し大きくても小さくても出力がほぼ平らになります。平らな区間では渡す値がとても小さいので、層をいくつか積んだだけで信号が目に見えて減ります。逆に層ごとに1より大きな数が掛かると、信号が手に負えないほど大きくなって値が跳ね上がることもあります。
入力側の層が止まると起こること
入力側の層は文字や画像の最も基本的な特徴をつかむ場所です。この層が学べないと、その上の層は整えられていない材料でずっと働くことになります。層を増やして性能を上げようとしたのに、勾配消失がひどいと浅いモデルより悪い結果が出ることもあります。ただ、値を整えて信号を守っても深い網が学び足りないことは別にあり、近道はその問題まで一緒に解いてくれます。
症状はだいたいこう現れます。学習をしばらく回しても誤差がある地点から下がらず、入力側の層の数字は最初にランダムで決めた値からほとんど変わりません。長い文章を順番に処理するモデルでは、文章の前半の情報が後半まで伝わらない形で現れることもあります。
声を守る方法
一番大きな転換点は、層を飛び越える近道でした。信号が層を一つずつ経て減っていく代わりに、何層かを一気に飛び越える通路を別に用意したのです。伝言ゲームの列で、一番後ろの人が一番前まで直接声を届けられる道をもう一本通したようなものです。
平らにならない活性化関数を使うことも大きな役割を果たしました。値が正の区間では大きさをそのまま渡す関数を使えば、掛けられる値が減りません。ここに層ごとに値の大きさをそろえる処理と、最初の数字を大きすぎず小さすぎず決める工夫が加わりました。順番に読むモデルでは、何を覚えて何を流すかを決める門の仕組みを置いて信号が長く生き残るようにもしました。
もう少し正確に
逆伝播は、層ごとの局所微分を順に掛け合わせていく連鎖計算です。各層で掛かる値が平均して1より小さいと、層の数だけ繰り返し掛けられて指数的に減り、1より大きいと同じ理由で指数的に増えます。シグモイド関数の微分値は最も大きいときでも0.25なので、重みの大きさが1を超えないなら、この関数を一つ通るたびに信号は少なくとも四倍ずつ減る計算になります。
比喩がずれる点があります。伝言ゲームは内容が見当違いに変わることが問題ですが、勾配消失の核心は大きさが小さくなりすぎることにあります。だから信号が完全に消えたのではなく、小さすぎて更新に反映されない状態と見るほうが正確です。
また、すべての経路が同じように減るわけでもありません。ある経路は生き残り、ある経路だけが死ぬこともあるので、同じ層の中でも学べている部分と止まっている部分が混ざっていることがあります。
やってみる
よくある誤解
層を深く積むほど賢くなると思われがちですが、実際には信号が入力側まで届かなければ、浅いモデルより悪い結果になることもあります。
もう解決済みの昔の問題だと思われがちですが、実際には対策が増えて和らいだだけで、とても深いモデルやとても長い入力を扱うときは今も注意が要ります。
学習率を上げれば解決すると思われがちですが、実際にはすでに大きい信号まで一緒に大きくなって値が跳ね上がり、学習がより不安定になります。
ひとこと要約
勾配消失は、直せという信号が層を通るうちに掛け合わされて小さくなり、入力側の層にほとんど届かず学習が鈍くなる現象です。
誤りや、もっと良いたとえがありますか? 修正を提案する · 最終更新 2026-10-17