本文へ移動

基本情報技術者試験

ばっくぷろぱげーしょん

バックプロパゲーション

BP

Backpropagation

バックプロパゲーション(誤差逆伝播法)は、ニューラルネットワークの実際の出力と望む出力との誤差について、各重みでの偏微分(勾配)を求める計算方法です。出力層から入力層へ向かって、合成関数の微分の規則である連鎖律を1層ずつ当てはめ、誤差の微分を送り返します。1986年のNature誌の論文が学習手続きとして示した方法ですが、その論文自身がほかの研究者による独立の発見に触れています。求めた勾配を使って重みを実際に変えるのは、勾配降下法などの別の手続きです。

詳しい説明

出力の誤差から各重みの直し方を求める問題

ニューラルネットワークは、ニューロンに似た計算単位(ユニット)を層の形につなぎ、ユニットどうしの結合の強さである重みを使って、入力から出力を計算します。学習とは、実際の出力が望む出力に近づくように重みを調整することです。

1986年の論文「Learning representations by back-propagating errors」(Nature誌 第323巻、533〜536ページ)で、デビッド・E・ラメルハート(David E. Rumelhart)、ジェフリー・E・ヒントン(Geoffrey E. Hinton)、ロナルド・J・ウィリアムズ(Ronald J. Williams)は、この調整の手続きとして逆伝播(back-propagation)を示しました。題名の「back-propagating errors」は誤差を逆向きに伝えるという意味で、日本語では誤差逆伝播法とも呼ばれます。論文の要旨によれば、逆伝播は、ネットワークの実際の出力ベクトルと望む出力ベクトルとの差の大きさが小さくなるように、結合の重みをくり返し調整する手続きです。

論文によれば、入力ユニットと出力ユニットを直接つなぐだけのネットワークなら、出力の誤差を少しずつ減らす重みの直し方を見つけるのは比較的やさしいとされています。難しくなるのは、入力でも出力でもない隠れユニットを入れたときです。隠れユニットには、課題が決める正解の状態がありません。そのため、隠れユニットにつながる重みを少し変えたときに出力の誤差がどう変わるかは、出力の側から計算してさかのぼって求める必要があります。逆伝播は、誤差の微分を出力側から入力側へ送り返すことで、この計算を行います。

順向きの計算と誤差の定義

論文が示す最も単純な形は、下から入力層、いくつかの中間層、出力層の順に並んだ層状のネットワークです。入力ベクトルを入力ユニットに与えると、下の層から順に各ユニットの状態が決まり、最後に出力ユニットの状態が決まります。これが順向きの計算(forward pass)です。

ユニット への入力の合計 は、 につながるユニット の出力 と、その結合の重み から次のように計算されます。

ユニット の出力 は、この合計を次の非線形な関数に通した値です。

この形の関数は一般にシグモイド関数と呼ばれ、どんな に対しても出力は0と1の間の値になります。論文は、導関数が有界な入出力関数であれば、この2つの式とまったく同じ関数を使う必要はないと述べています。また、常に1をとる入力を各ユニットに1本足し、その重みをバイアスとして、ほかの重みと同じように扱えるとしています。

誤差は、入力と出力の組(ケース)ごとに実際の出力と望む出力を比べて計算します。論文は全体の誤差 を次のように定義しています。

はケースの番号、 は出力ユニットの番号、 は出力ユニットの実際の状態、 は望む状態です。論文は、 を勾配降下で小さくするには、ネットワーク内のすべての重みについて の偏微分を求める必要があると述べています。1つのケースについての偏微分は、順向きの計算と逆向きの計算という2回の計算で求めます。

出力層から連鎖律で誤差の微分を送り返す

逆向きの計算(backward pass)は、微分を最上層から最下層へ伝える計算です。ここでは1つのケースだけを考え、ケースの添字 を省きます。

最初に、出力ユニットごとに、誤差 をその出力 で微分します。

次に、合成関数の微分を各段の微分の積で求める規則である連鎖律を当てはめて、入力の合計 についての微分を求めます。上のシグモイド関数では となるので、次の式が得られます。

これで、出力ユニットへの入力の合計が変わったときに誤差がどう変わるかが分かりました。入力の合計は、下の層のユニットの状態についても重みについても1次式なので、ユニット から への重み についての微分はすぐに求まります。

1つ下の層のユニット の出力 が誤差に与える影響は、 から出ているすべての結合について足し合わせて求めます。

この最後の式により、最終層のすべてのユニットの から、1つ手前の層のユニットの が得られます。論文は、この手順をより前の層へくり返し、その途中で各重みの を計算していくと説明しています。

イアン・グッドフェロー(Ian Goodfellow)、ヨシュア・ベンジオ(Yoshua Bengio)、アーロン・クールヴィル(Aaron Courville)による教科書『Deep Learning』(2016年)の第6章は、この計算の効率を次のように説明しています。勾配の式を書き下すこと自体は難しくありませんが、それを数値として評価すると計算の負担が大きくなることがあります。逆伝播は連鎖律を特に効率のよい順番で計算するアルゴリズムで、途中の結果を表に保存して使い回すことにより、共通する部分の計算のくり返しを避けます。教科書が示す一般的な形では、計算の途中の値を点、値どうしの計算のつながりを辺として表した計算グラフの上で、逆伝播の計算量は辺の数に比例し、順向きの計算と同じ程度の量になるとされています。

2層の小さなネットワークでたどる計算例

架空の値で、入力ユニット 、隠れユニット 、出力ユニット が1本につながったネットワークを考えます。バイアスも含めた順向きの計算の結果、入力ユニットの出力が 、隠れユニットの出力が 、出力ユニットの出力が になったとします。望む出力は で、隠れユニットから出力ユニットへの重みは です。逆向きの計算は次の順に進みます。

  • 出力での微分は です。
  • 出力ユニットの入力の合計での微分は です。
  • 隠れユニットから出力ユニットへの重みでの微分は です。ここで掛けた0.5は隠れユニットの出力 です。
  • 隠れユニットの出力での微分は です。ここで掛けた0.5は重み で、 から出る結合は1本だけなので和は1項です。
  • 隠れユニットの入力の合計での微分は です。
  • 入力ユニットから隠れユニットへの重みでの微分は です。

どちらの重みの微分も負なので、重みを少し大きくすると誤差が減ることが分かります。後で説明する最も単純な勾配降下で、変える量の大きさを決める定数を0.1とすると、 は だけ、入力側の重みは だけ大きくなります。

この例では、出力ユニットの に比べ、1層下の は8分の1になりました。シグモイド関数の は0.25を超えないため、重みが大きくない限り、層をさかのぼるたびに微分の値は小さくなりやすくなります。層を深くしたときに入力側で勾配がほとんど0になるこの現象は、勾配消失問題として別の項目で扱います。

勾配を求めることと重みを変えることの区別

論文は、求めた の使い方を2通り挙げています。1つは入力と出力のケースごとに重みを変える方法で、微分を別に保存しておく記憶が要らない利点があります。もう1つは、すべてのケースについて を足し合わせてから重みを変える方法で、論文の実験ではこちらを使っています。最も単純な勾配降下では、足し合わせた勾配に比例する量だけ各重みを変えます。

は、変える量の大きさを決める定数です。論文は、この方法は2次の微分を使う方法ほど速く収束しないものの、はるかに単純で、並列なハードウェア上の局所的な計算で実装しやすいと述べています。さらに、現在の勾配で重みの位置そのものではなく重みが動く速度を変える、次の加速の方法を示しています。

はケース全体を1回たどるごとに1増える番号です。 は0と1の間の減衰の係数で、現在の勾配と以前の勾配がそれぞれ重みの変化にどれだけ効くかを決めます。論文は、重みの対称性を崩すために、小さなランダムな重みから学習を始めるとしています。

1986年の論文は、このように微分の計算と重みの変更をまとめて1つの学習手続きとして示しています。一方でグッドフェローらの教科書は、逆伝播という語は多層ニューラルネットワークの学習アルゴリズム全体を指すと誤解されることが多いが、実際には勾配を計算する方法だけを指し、その勾配を使った学習は確率的勾配降下法などの別のアルゴリズムが行う、と注意しています。同じ教科書は、逆伝播は多層ニューラルネットワーク専用だと誤解されることも多いが、原理的にはどんな関数の微分も計算できるとも述べています。この語は資料によって指す範囲の取り方が違うため、読むときには勾配の計算だけを指しているのか、重みの更新まで含めているのかを確かめる必要があります。

隠れユニットが課題の特徴を表すようになるという主張

論文は、逆伝播を以前の方法と区別する点として、隠れユニットが役に立つ新しい特徴を作り出す能力を挙げています。要旨によれば、重みの調整の結果、入力にも出力にも属さない隠れユニットが課題の領域の重要な特徴を表すようになり、課題の規則性がこれらのユニットの相互作用でとらえられます。論文はこの能力が、パーセプトロン収束手続きのような以前の単純な方法と逆伝播を区別すると書いています。パーセプトロンについては、入力と出力の間に特徴を取り出す部分(feature analysers)があるものの、その入力側の結合は人の手で固定されていて学習しないので、本当の隠れユニットではないと説明しています。

論文は2つの課題で、この主張を例示しています。1つめは、1列に並んだ2値の入力が中央を境に左右対称かどうかを判定する課題です。1つの入力ユニットだけを見ても入力全体が対称かどうかの証拠にならないため、中間の層が欠かせません。論文の学習手続きは、隠れユニット2つだけを使う解を見つけました。この学習には、64通りある入力ベクトル全体を1,425回たどる必要がありました。2つめは、英国人とイタリア人の同じ形をした2つの家系図の情報を覚える課題です。104通りある「人物、関係、人物」の3つ組のうち100通りで学習させると、隠れユニットは入力と出力の表し方には明示されていない特徴、たとえば英国人かイタリア人か、どの世代か、家系のどの枝かを表すようになり、学習に使わなかった4つの3つ組にも正しく答えました。

論文自身が書いている発見の経緯

この論文は、要旨で逆伝播を「新しい学習手続き(a new learning procedure)」として紹介しています。一方で本文には、この学習手続きの変種が、デビッド・パーカー(David Parker)とヤン・ルカン(Yann LeCun、論文中の表記はYann Le Cun)によってそれぞれ独立に発見されていたと書かれています。論文は、自分たちだけが最初にこの方法を考え出したとは主張していません。

グッドフェローらの教科書の歴史の節は、経緯をさらにさかのぼって整理しています。逆伝播の土台である連鎖律は17世紀に考え出されました。連鎖律を動的計画法で効率よく使う方法は、1960年代から1970年代に主に制御の分野で現れました。ポール・ワーボス(Paul Werbos)は1981年に、この技法をニューラルネットワークの学習に使うことを提案しました。その考えは、ルカン(1985年)、パーカー(1985年)、ラメルハートら(1986年)によって別々の形で独立に再発見され、実際に使われるようになったとしています。教科書はまた、同じ1986年に出た『Parallel Distributed Processing』という本のラメルハートらによる1章が、逆伝播を使った初期の成功した実験の結果を示し、逆伝播の普及に大きく貢献したと書いています。

論文が認めていた弱点と適用の広がり

論文は、この学習手続きの最も明らかな欠点として、誤差の面に局所的な最小点がありうるため、勾配降下が全体の最小点を見つける保証がないことを挙げています。ただし、多くの課題での経験では、全体の最小点よりはっきり悪い局所的な最小点にはまることはごくまれで、課題を解くのにぎりぎりの結合しかないネットワークでしかこの現象に出会っていないと述べています。結合を少し増やすと重みの空間に次元が加わり、低い次元で悪い局所的な最小点を作っていた障壁を回り込む道ができる、というのが論文の説明です。

論文はまた、現在の形の学習手続きは脳の学習のもっともらしいモデルではないと認めています。そのうえで、さまざまな課題で勾配降下によって興味深い内部の表現が作られることから、神経回路網で勾配降下を行う、生物学的により自然な方法を探す価値があると述べています。

適用の範囲について、論文は層状で一方向に信号が流れるネットワークだけでなく、同じネットワークを何回かくり返し動かすリカレントネットワークにも当てはめられることを示しています。くり返しの1回を1つの層とみなすと、層状のネットワークと同じ形になるからです。その際、逆向きの計算に使うために各ユニットの出力の履歴を保存しておくことと、層の間で対応する重みが同じ値を保つように、対応する重みどうしで を平均し、同じ量だけ変えることの2点が必要になるとしています。

試験で問われること

基本情報技術者試験

  • ニューラルネットワークの重み調整アルゴリズムとして詳細が問われます。
  • 順方向と逆方向の処理の流れが重要です。

最終更新日: 2026/09/14