わかりやすく バックプロパゲーション とは
前のレッスンで、ニューラルネットワークが信号を前へ流して答えを出すのを見ました。では、その答えがまちがっていたら、どう直せばよいのでしょうか。ネットワークには重みが数えきれないほどあり、どれがまちがいにどれだけ責任があるかが分からなければ直せません。その方法が、まちがいを出力から入力の方へ逆にたどりながら、重みごとの責任のぶんを計算することです。倒れたドミノを逆にたどって、最初に押されたところを探すのに似たこの方法を、誤差逆伝播法といいます。
まず前へ予測する
ニューラルネットワークは、答えを出すとき信号を前へ流します。入力から出発し、層を順に通って、出力で予測が出てきます。前のレッスンで見た、あの流れです。
作ったばかりのネットワークは重みがでたらめに決まっているので、予測が正解と大きくちがうことがあります。まず、この前への流れをもう一度見てみましょう。
ボタンを押して、信号を入力から出力まで一層ずつ前へ送ってみましょう。最後に予測が出ますが、まだ正解とちがいます。
予測は出ましたが、正解とちがいます。このちがいがまちがいで、どれだけまちがったかを数で測ったものが損失です。損失が大きければ大きくまちがっていて、損失が0に近ければよく当たっているということです。
目標は、損失を減らすことです。でも、ネットワークには重みが数えきれないほどあります。そのうちのどれを、どれだけ直せば損失が減るのでしょうか。
まちがいの責任はだれにある?
出力がまちがいました。でも、出力だけがまちがったわけではありません。出力はすぐ前の層から受け取った信号で答えを出し、その前の層はまたその前の層の信号で計算しました。
だから、まちがいの責任は一つの重みだけにあるのではなく、予測にかかわったすべての重みに少しずつ分かれています。まずは、出力でのまちがいがどれくらい大きいかを確かめましょう。
出力の予測と正解をくらべてみましょう。ボタンを押してまちがい(損失)を示すと、このまちがいがどこから来たのかを逆にたどらなければならないことが分かります。
出力でのまちがいの大きさを確かめました。今度は、このまちがいをさかのぼらなければなりません。出力に入るつながりがいくつもあれば、信号を強く送ったつながりもあれば、弱く送ったつながりもあるはずです。
信号を強く送ったつながりほど、まちがった出力に多く関わったので、責任も大きくなります。言いかえれば、そのつながりの重みを少し変えると、損失が大きく変わるということです。重みを変えたときに損失がどれだけ変わるか、これが勾配降下法で見た傾きです。
まちがいを逆にもどす
いよいよ誤差逆伝播法の番です。まちがいを、出力から入力の方へ一層ずつ逆に流していきます。前へ進むときとは正反対の向きです。倒れたドミノを逆にたどりながら、どこから倒れはじめたかを探すのに似ています。
一層もどるたびに、その層のつながりがまちがいにどれだけ関わったかが決まります。内側の層のぶんは、外側の層のぶんに、その間のつながりの影響をかけて求めます。このように、かけ合わせながらさかのぼる計算の決まりを、微分の連鎖律と呼びます。
ボタンを押して、まちがいを出力から入力の方へ一層ずつ逆に送ってみましょう。もどるたびにつながりごとに責任のぶんがつけられ、太いほど責任が大きくなります。
最後まで逆にもどりました。これで、ネットワークのすべての重みが、それぞれ責任のぶんを一つずつ受け取りました。まちがいに大きく関わった重みもあれば、ほとんど責任のない重みもあります。
おどろくのは、出力のまちがい一つから出発して、奥深くの重みのぶんまで一度に計算できたことです。重みごとに別々に試す必要がないので、重みが何百万個もあるネットワークでも、計算が追いつきます。
ぶんだけ重みを直す
責任が分かったので、今度は直す番です。前に見た勾配降下法を思い出しましょう。損失が減る方向へ少しずつ下りていく方法でした。
誤差逆伝播法で求めたぶんが、まさに重みごとの傾きなので、その傾きに学習率をかけたぶんだけ重みを直します。責任の大きい重みは大きく、責任の小さい重みは少しだけ変わります。一度に大きく直さず、少しずつ直すことが大切です。
ぶんだけ調整するボタンを押して、重みを一歩ずつ直してみましょう。押すたびに損失の棒が短くなり、責任の大きい重みほど大きく動きます。
調整するほど、損失は減りました。でも、一度直したら終わりではありません。また前へ予測し、まちがいを測り、逆にたどってぶんを求め、そのぶんだけ直します。
この一回りを数えきれないほどくり返すと、ネットワークの予測はだんだん正解に近づいていきます。今のニューラルネットワークは、ほとんどすべてがこのように学習しています。
まとめ
まとめるとこうです。まず信号を前へ流して予測を出し、正解とくらべてまちがいを損失として測ります。その損失を出力から入力の方へ逆に流しながら、重みごとの責任のぶん、つまり傾きを求めます。
そして、そのぶんだけ勾配降下法で重みを直します。前へ予測し、逆にたどり、直すことをくり返すと、予測が正解に近づいていきます。
要点を順に押して振り返りましょう。(前へ予測 → まちがいを損失で測る → 逆にたどってぶんを求める → ぶんだけ調整)
これで、ニューラルネットワークがどうやってまちがいを直すのかが分かりました。逆にたどるというこの考えのおかげで、重みが数えきれないほどある大きなネットワークも、自分で学べるようになったのです。
でも、学習データの損失をどこまでも減らし続ければよいのでしょうか。練習問題の答えだけを覚えた生徒が、はじめて見る試験でとまどうように、ニューラルネットワークも学習データに合わせすぎてしまうことがあります。この問題を、次のレッスン「過学習」で扱います。