誤差逆伝播Backpropagation

誤差を後ろから前へたどり分け前を配る手順

ポイント
  • 誤差逆伝播は、結果の誤差を最後の段階から逆にたどりながら、段階ごとに責任の分け前を配る手順です。
  • 配られた分け前が、そのままその値の勾配です。値をどちらへどれだけ直すべきかを教えてくれます。
  • 前から後ろへ一度流れて答えを作り、後ろから前へ一度たどって分け前を配ります。この往復一回が学習の一歩です。
  • 後ろから始める理由は、前の段階の責任が後ろの段階を通ってはじめて結果に届くからです。
  • たどるのは一度だけで、すべての値の分け前がいっぺんに出ます。この効率のおかげで、層がとても深いモデルでも学習できます。
目次

1たとえで理解する

自動洗車場に車を入れると、水かけ、泡、すすぎ、乾燥を順に通って反対側から出てきます。ところが出てきた車のリアガラスにしみが残っています。どの段階が悪かったのか突き止めないと、次の車から直せません。

点検は最後の段階から逆にさかのぼります。乾燥の風がその場所だけ避けていなかったかをまず見て、違うならすすぎの水流を、それでも違うなら泡が足りなかったかを見ます。前の段階の落ち度は後ろの段階を通ってはじめてしみとして現れるので、後ろの分け前を先に知らないと前の分け前は見当がつきません。

こうして一巡さかのぼると、段階ごとに「このしみに対するあなたの分け前はこれだけ」という値が付きます。その分け前だけ各段階の設定を少しずつ直せば、次の車はもう少しきれいに出てきます。

2くわしく

前へ一回、後ろへ一回

学習の一歩は往復です。まずデータを入れて層を順に通し、答えを作ります。洗車場に車を入れる側です。出てきた答えと本当の正解を比べて誤差を測ります。

次がたどる道です。誤差を最後の層に渡すと、その層は自分が持つ値がどれだけ誤差に関わったかを計算し、残りの分け前を前の層へ渡します。この受け渡しが最初の層まで続きます。二つの道が一回ずつ終わると、モデルの中のすべての値に「こちらへこれだけ」という付箋が付きます。

前へ流れるときに出てくる途中の結果は、捨てずに持っておく必要があります。たどるときにその値がまた必要になるからです。学習を回すときが完成したモデルを使うときよりずっとメモリを食う、一番の理由です。層が増えるほど持っておく途中の結果も増えるので、深いモデルほどこの負担が大きくなります。

後ろからさかのぼらなければならない理由

前の段階から一つずつ確かめる方法も考えられます。値を一つほんの少し変えてみて、結果がどれだけ変わるかを測るのです。しかし値が一つ変わるたびに洗車場全体をもう一度通す必要があります。値が数億個あれば、これを数億回しなければなりません。

たどる方式は、この無駄をなくします。後ろの段階の分け前が分かっていれば、前の段階の分け前は掛け算数回で出せます。後ろから前へ一度なぞるだけで、すべての値の分け前が同時に求まります。層をどれだけ深く積んでも学習時間が扱える範囲に収まるのは、この順序のおかげです。

分け前を配ったあとは値を動かす

誤差逆伝播は分け前を配るところで終わります。その分け前を見て値を実際に動かす仕事は、勾配降下法が受け持ちます。どれだけ動かすかは学習率が、どんなコツで動かすかはオプティマイザが決めます。役割はこう分かれています。

分け前はデータのまとまりを見るたびに新しく計算されます。同じ値でも、どのデータを見たかによって今回は上げろ、次は下げろとなることがあります。そのため一回の分け前に大きく反応せず、少しずつだけ動かす方式を取ります。誤差逆伝播は毎回この分け前をゼロから作り直すので、前の一歩の結果を覚えておくのはあくまで値を動かす側の役目です。

さかのぼるほど分け前がぼやける

たどる過程は、層を通るたびに値を掛け合わせていく作業です。掛け合わされる値が1より小さいと、層を通るたびに分け前が小さくなり、最初の層に着くころにはほとんど0に近づきます。前の方の層が学習されずに止まってしまう勾配消失は、こうして起こります。

反対に掛け合わされる値が大きいと、たどるほど分け前が膨らんで値が飛んでしまいます。層を飛び越える近道を設けたり、層ごとに値の目盛りを合わせ直す仕組みが広く使われているのは、ここに理由があります。

深いモデルが長らく学習できなかったのも、この問題のためでした。たどる手順そのものは昔から知られていましたが、分け前が前の方まで生きて届くようにする仕組みが整ってはじめて、層を思う存分積めるようになりました。今では層を百、千と重ねたモデルが珍しくないのも、この手当てがあってこそです。

3もう少し正確に

誤差逆伝播は、合成された関数の微分を計算する連鎖律を、層の構造に沿って順番に適用する手順です。各層は後ろから受け取った分け前に自分の層の微分値を掛けて前へ渡し、同時に自分の層の値についての勾配を取り出しておきます。計算に必要な途中の結果は、前へ流れるときに保存しておき、たどるときに取り出して使います。学習に推論よりずっとメモリがかかる理由です。

たとえがずれる点もあります。洗車場の段階は目に見えてはっきり分かれていますが、モデルの層は値が混ざり合って流れるため、「この段階が犯人」と言い切ることはできません。誤差逆伝播が出すのは犯人の指名ではなく、値ごとにほんの少し動かしたとき誤差がどれだけ変わるかについての数値です。また洗車場のしみは人が見て判断しますが、学習では誤差を測る基準があらかじめ決まった計算です。

4やってみる

5よくある誤解

  • 誤差逆伝播が学習そのものだと思われがちですが、実際には値をどちらへ直すか教えてくれるだけで、実際に動かす作業は勾配降下法とオプティマイザが行います。

  • 誤差逆伝播は情報を逆に流すことだと考えられがちですが、実際に後ろへ行くのはデータではなく誤差の分け前です。データは常に前から後ろへしか流れません。

  • 層が深いほど誤差逆伝播がうまくいくと思われがちですが、実際には深いほど分け前がぼやけたり膨らんだりしやすく、別途手当てが要ります。

7ひとこと要約

つまり誤差逆伝播は結果の誤差を最後の段階からさかのぼり値ごとに責任の分け前を配る、学習のたどる道です。

誤りや、もっと良いたとえがありますか? 修正を提案する · 最終更新2026-09-02