機械学習において、バックプロパゲーションは、パラメータの更新を計算する際にニューラルネットワークを訓練するために一般的に使用される勾配計算手法である。
これは、連鎖律をニューラルネットワークに効率的に適用したものです。バックプロパゲーションは、単一の入出力例に対して、ネットワークの重みに関する損失の勾配を効率的に計算します。これは、出力層から入力層へと、導関数を一度に1層ずつ逆方向に伝播させることで実現され、冗長な連鎖律の計算を回避します。
厳密に言えば、バックプロパゲーションという用語は、勾配を効率的に計算するためのアルゴリズムのみを指し、勾配の使用方法を指すものではありませんが、この用語は学習アルゴリズム全体を指すために広く使われることがよくあります。これには、確率的勾配降下法のように勾配の負の方向にモデルパラメータを変更することや、適応モーメント推定などのより複雑な最適化手法の中間ステップとしてモデルパラメータを変更することが含まれます。[ 1 ]
バックプロパゲーションは複数の発見と部分的な発見があり、その歴史と用語は複雑に絡み合っている(§ 歴史を参照)。この手法の他の名称としては、「自動微分逆モード」や「逆蓄積」などがある。[ 2 ]
バックプロパゲーションは、損失関数に関して、フィードフォワードニューラルネットワークの重み空間における勾配を計算します。以下を表記します。
バックプロパゲーションの導出では、必要に応じて以下で他の中間量を導入して使用します。バイアス項は、入力が 1 に固定された重みに対応するため、特別に扱われません。バックプロパゲーションでは、損失関数と活性化関数とその導関数を効率的に評価できる限り、具体的な損失関数と活性化関数は重要ではありません。従来の活性化関数には、シグモイド、tanh、ReLU、Swish、[ 3 ] Mish、[ 4 ]など多数あります。
全体のネットワークは、関数合成と行列乗算の組み合わせで構成されています。
トレーニングセットには、入力と出力のペアのセットがあります。各入出力ペアについてトレーニングセットでは、そのペアにおけるモデルの損失は、予測出力の差のコストです。そして目標出力:
違いに注意してください。モデル評価中は、入力が変化する一方で重みは固定されており(目標出力は不明な場合もあります)、ネットワークは出力層で終了します(損失関数は含まれません)。一方、モデル学習中は、入力と出力のペアは固定されており、重みが変化する一方で、ネットワークは損失関数で終了します。
バックプロパゲーションは、固定された入力と出力のペアに対して勾配を計算します。重みは変化する可能性があります。勾配の各個々のコンポーネントは、は連鎖律によって計算できますが、各重みに対して個別に計算するのは非効率的です。バックプロパゲーションは、重複計算を避け、不要な中間値を計算しないことで、各層の勾配、具体的には各層の重み付き入力の勾配を計算することによって、勾配を効率的に計算します。―後ろから前へ。
非公式には、重要な点は、損失に影響を与えるのは、次の層への影響を通してであり、それは線形的に行われる。は、レイヤーの重みの勾配を計算するために必要な唯一のデータです。そして、前の層の重みの勾配は次のように計算できます。そして再帰的に繰り返されます。これは2つの方法で非効率性を回避します。まず、レイヤーの勾配を計算する際に重複を回避します。後続の層で全ての導関数を再計算する必要はありません毎回。第二に、各段階で最終的な出力(損失)に対する重みの勾配を直接計算するため、不必要な中間計算を回避できます。これは、重みの変化に対する隠れ層の値の導関数を不必要に計算する必要がないためです。。
バックプロパゲーションは、単純なフィードフォワードネットワークの場合、行列乗算の観点から表現することができ、より一般的には随伴グラフの観点から表現することができる。
フィードフォワードネットワークの基本ケースでは、各層のノードは(どの層もスキップせずに)すぐ次の層のノードにのみ接続され、最終出力のスカラー損失を計算する損失関数が存在するため、バックプロパゲーションは行列乗算によって簡単に理解できます。[ c ]本質的に、バックプロパゲーションは、コスト関数の導関数の式を、右から左へ(「逆方向」に)各層間の導関数の積として評価し、各層間の重みの勾配は部分積の単純な修正(「逆伝播誤差」)となります。
入力と出力のペアが与えられた場合損失額は以下のとおりです。
これを計算するには、まず入力から始めます。そして順方向に進み、各隠れ層の重み付き入力を次のように表す。そして隠れ層の出力アクティベーションとして逆伝播の場合、活性化派生商品も同様(評価値))は、後方パス中に使用するためにキャッシュする必要があります。
入力に関する損失の導関数は連鎖律によって与えられます。各項は、入力に対するネットワークの値(各ノード)で評価された全導関数であることに注意してください。:
どこは対角行列です。
これらの用語は、損失関数の導関数、[ d ]活性化関数の導関数、[ e ]および重み行列、[ f ]です。
勾配これは、入力に関する出力の導関数の転置行列であるため、行列は転置され、乗算の順序は逆になりますが、要素は同じです。
バックプロパゲーションは基本的に、この式を右から左へ評価し(あるいは、導関数の前の式を左から右へ乗算し)、その過程で各層の勾配を計算することから成ります。ただし、重みの勾配は単なる部分式ではないため、追加のステップとして乗算が行われます。
補助量を導入する部分積(右から左への乗算)については、「レベルでのエラー」と解釈される。「そして、レベルにおける入力値の勾配として定義される」:
ご了承くださいは、レベル内のノード数に等しい長さのベクトルです。各コンポーネントは、「そのノード(の価値)に起因するコスト」として解釈されます。
レイヤーの重みの勾配つまり、次のようになります。
要因重みがレベル間そして影響レベル入力(活性化)に比例する:入力は固定され、重みが変化する。
の右から左へ順に再帰的に計算すると、次のようになります。
したがって、各レベルにおける重みの勾配は、数回の行列乗算によって計算できる。これがバックプロパゲーションである。
素朴にフォワードを計算する場合と比較して((例)
バックプロパゲーションには、2つの重要な違いがあります。
より一般的なグラフやその他の高度なバリエーションについては、バックプロパゲーションは自動微分の観点から理解することができ、バックプロパゲーションは逆累積(または「逆モード」)の特殊なケースである。 [ 2 ]
教師あり学習アルゴリズムの目標は、一連の入力を正しい出力に最もよくマッピングする関数を見つけることです。バックプロパゲーションの動機は、入力から出力への任意のマッピングを学習できるように、適切な内部表現を学習できる多層ニューラルネットワークを訓練することです。[ 5 ]
バックプロパゲーションアルゴリズムの数学的導出を理解するには、まずニューロンの実際の出力と特定のトレーニング例に対する正しい出力との関係について直感を養うことが役立ちます。入力ユニットが 2 つ、出力ユニットが 1 つ、隠れユニットがない単純なニューラルネットワークを考えてみましょう。このネットワークでは、各ニューロンは線形出力を使用します(入力から出力へのマッピングが非線形であるニューラルネットワークに関するほとんどの研究とは異なります) [ g ]。これは入力の重み付き和です。

最初に、トレーニング前に重みはランダムに設定されます。その後、ニューロンはトレーニング例から学習します。この場合、トレーニング例はタプルのセットで構成されます。どこそしてはネットワークへの入力であり、tは正しい出力(ネットワークが訓練されたときに、これらの入力に対して生成すべき出力)です。初期ネットワークは、そして、ランダムな重みが与えられた場合、 tとは異なる出力yを計算します。損失関数これは、目標出力tと計算出力yの間の差異を測定するために使用されます。回帰分析問題では、二乗誤差を損失関数として使用でき、分類問題では、カテゴリカルクロスエントロピーを使用できます。
例として、二乗誤差を損失関数として用いる回帰問題を考えてみましょう。
ここでEは不一致または誤差を表す。
単一のトレーニングケースにおけるネットワークについて考えてみましょう。したがって、入力はそして入力と出力はそれぞれ 1 と 1 であり、正しい出力tは 0 です。ここで、ネットワークの出力y を横軸に、誤差E を縦軸にとった関係をプロットすると、放物線が得られます。放物線の最小値は、誤差Eを最小にする出力yに対応します。単一のトレーニングケースでは、最小値は横軸にも接するため、誤差はゼロになり、ネットワークは目標出力tと完全に一致する出力yを生成できます。したがって、入力を出力にマッピングする問題は、最小誤差を生成する関数を見つける最適化問題に還元できます。

しかし、ニューロンの出力は、すべての入力の重み付き合計に依存します。
どこそしてこれらは、入力ユニットから出力ユニットへの接続における重みです。したがって、誤差はニューロンへの入力重みにも依存し、最終的に学習を可能にするためにネットワーク内で変更する必要があるのは、この入力重みです。
この例では、トレーニングデータを注入すると損失関数は次のようになる
次に、損失関数底面が に沿って向いた放物線円筒の形をとるを満たすすべての重みのセット損失関数を最小化する場合、一意の解に収束させるためには追加の制約が必要となる。追加の制約は、重みに特定の条件を設定するか、追加の訓練データを注入することによって生成できる。
誤差を最小化する重みのセットを見つけるためによく用いられるアルゴリズムの一つに、勾配降下法があります。バックプロパゲーションによって、損失関数と現在のシナプス重みとの間の最も急な降下方向が計算されます。そして、この最も急な降下方向に沿って重みを修正することで、効率的に誤差を最小化することができます。
勾配降下法では、損失関数をネットワークの重みに関して微分します。これは通常、バックプロパゲーションを使用して行われます。出力ニューロンが1つであると仮定すると、[ h ]二乗誤差関数は次のようになります。
どこ
このセクションでは、重み指標の順序が前のセクションとは逆になっています。重量はth から 番目のユニット。[ i ]各ニューロンについてその出力は次のように定義される。
活性化関数非線形であり、活性化領域全体で微分可能である(ReLUは一点で微分不可能である)。歴史的に使用されてきた活性化関数はロジスティック関数である。
これは、以下の便利な派生形を持つ。
入力ニューロンへの出力は、出力の重み付き合計である。以前のニューロンの。ニューロンが入力層の次の最初の層にある場合、入力層の入力は、単にネットワークへ。ニューロンへの入力ユニット数は変数ニューロン間の重みを表す前の層とニューロン現在のレイヤーの。

誤差の重みに関する偏微分を計算する連鎖律を2回使用して行います。
上記の右辺の最後の因子では、和の項は1つだけです。に依存する、 となることによって
ニューロンが入力層の次の最初の層にある場合、はただ。
ニューロンの出力の微分入力に対するその値は、活性化関数の偏微分に等しい。
これが、バックプロパゲーションにおいて活性化関数が微分可能である必要がある理由です。(ただし、0で微分不可能なReLU活性化関数は、例えばAlexNetなどで非常に人気があります。)
ニューロンが出力層にある場合、最初の要因は簡単に評価できます。そして
二乗誤差の半分を損失関数として使用する場合、次のように書き換えることができます。
しかし、もしネットワークの任意の内部層にあり、導関数を見つけるに関してあまり明白ではない。
考慮する入力がすべてのニューロンである関数としてニューロンからの入力を受け取る、
そして、に関して全微分をとる導関数の再帰式が得られる。
したがって、出力に関するすべての導関数が計算可能であれば、次の層(出力ニューロンに近い層)のニューロンが既知である。[注:セット内のいずれかのニューロンが既知である場合、ニューロンに接続されていませんでしたそれらは独立しているだろうそして、総和における対応する偏微分はゼロになり、0になる。]
式2、式3、式4、式5を式1に代入すると、次の式が得られる。
と
もしはロジスティック関数であり、誤差は二乗誤差である。
重量を更新する勾配降下法を使用する場合、学習率を選択する必要があります。体重の変化は、増加または減少。 もし増加増加逆に、増加減少する新しい古い重みに加算され、学習率と勾配の積に保証する常に減少する形で変化するつまり、すぐ下の式では、常に変化するそのような方法で減少する:
誤差関数の2階微分からなるヘッセ行列を用いるレーベンバーグ・マルカート法は、特に誤差関数のトポロジーが複雑な場合、1階勾配降下法よりも速く収束することが多い。[ 6 ] [ 7 ]また、他の方法では収束しないような、より少ないノード数でも解を見つけることができる。[ 7 ]ヘッセ行列はフィッシャー情報行列で近似できる。[ 8 ]
例として、単純なフィードフォワードネットワークを考えてみましょう。第 1 層では、どこ事前アクティベーションは、アクティベーションとは重み行列です。損失関数が与えられた場合一次逆伝播は次のように述べている。そして、2次逆伝播は次のように述べている。どこはディラックのデルタ記号です。
任意の計算グラフにおける任意の次数導関数はバックプロパゲーションを用いて計算できるが、高次の導関数についてはより複雑な式が必要となる。
損失関数とは、1つまたは複数の変数の値を、それらの値に関連付けられた何らかの「コスト」を直感的に表す実数にマッピングする関数です。バックプロパゲーションの場合、損失関数は、訓練データがネットワークを伝播した後、ネットワークの出力と期待される出力との差を計算します。
損失関数の数式表現は、バックプロパゲーションで使用できるためには、2つの条件を満たす必要がある。[ 9 ] 1つ目は、平均として記述できることである。誤差関数、 のために個別トレーニング例、この仮定の理由は、バックプロパゲーションアルゴリズムが単一の訓練例に対する誤差関数の勾配を計算するため、それを全体の誤差関数に一般化する必要があるからです。2つ目の仮定は、誤差関数がニューラルネットワークの出力の関数として表せるということです。
させてベクトルは。
エラー関数を選択してください2つの出力の差を測定する。標準的な方法は、ベクトル間のユークリッド距離の二乗を用いる。そして:エラー関数トレーニング例は、個々の例における損失の平均として記述することができる。

バックプロパゲーションは、本質的に連鎖律(1676年にゴットフリート・ヴィルヘルム・ライプニッツによって初めて書き記された)[ 12 ] [ 13 ]をニューラルネットワークに効率的に適用したものであるため、繰り返し導出されてきた。
「逆伝播誤差訂正」という用語は1962年にフランク・ローゼンブラットによって導入されましたが、彼はこれをどのように実装するかを知りませんでした。[ 14 ]いずれにせよ、彼は出力が離散レベルであるニューロンのみを研究しており、そのニューロンは導関数がゼロであるため、逆伝播は不可能でした。
バックプロパゲーションの先駆けは、 1950 年代から最適制御理論に現れています。Yann LeCunらは、1950 年代のPontryaginらによる最適制御理論の研究、特に随伴状態法を、バックプロパゲーションの連続時間版として評価しています。[ 15 ] Hecht-Nielsen [ 16 ]は、 Robbins–Monro アルゴリズム(1951) [ 17 ]とArthur BrysonとYu-Chi HoのApplied Optimal Control (1969) をバックプロパゲーションの予兆として評価しています。その他の先駆者としては、Henry J. Kelley (1960 ) [ 18 ]とArthur E. Bryson (1961) [ 19 ]が挙げられます。1962年に、Stuart Dreyfus は連鎖律のみに基づくより単純な導出を発表しました。[ 20 ] [ 21 ] [ 22 ] 1973年に、彼は誤差勾配に比例してコントローラのパラメータを調整した。 [ 23 ]現代のバックプロパゲーションとは異なり、これらの前身は、あるステージから前のステージへの標準的なヤコビ行列計算を使用しており、複数のステージ間の直接リンクや、ネットワークの疎性による潜在的な追加効率向上には対応していなかった。[ 24 ]
ADALINE (1960) 学習アルゴリズムは、単一層に対して二乗誤差損失を用いた勾配降下法でした。確率的勾配降下法で学習された複数の層を持つ最初の多層パーセプトロン(MLP) [ 17 ]は、1967 年に甘利俊一によって発表されました。[ 25 ]この MLP は 5 つの層を持ち、そのうち 2 つの層が学習可能で、線形分離できないパターンを分類するように学習しました。[ 24 ]
現代のバックプロパゲーションは、 Seppo Linnainmaaによって「自動微分法の逆モード」として初めて発表されました (1970 年) [ 26 ] 。これは、入れ子になった微分可能な関数の離散的な連結ネットワークに対して適用されます。[ 27 ] [ 28 ] [ 29 ]
1982年、ポール・ヴェルボスは、現在では標準となっている方法でバックプロパゲーションをMLPに適用した。[ 30 ] [ 31 ]ヴェルボスはインタビューで、バックプロパゲーションの開発経緯を説明した。1971年、博士課程の研究中に、フロイトの「精神エネルギーの流れ」を数学化するためにバックプロパゲーションを開発した。彼はこの研究の発表に何度も苦労し、1981年にようやく発表できた。 [ 32 ]また、彼は「バックプロパゲーションの最初の実用的な応用は、1974年に彼自身が行った、ナショナリズムと社会コミュニケーションを予測する動的モデルの推定であった」と主張した。[ 33 ]
1982 年頃、[ 32 ] : 376 David E. Rumelhart は独自にバックプロパゲーションを開発し[ 34 ] : 252研究サークル内の他の研究者にそのアルゴリズムを教えました。彼は以前の研究を知らなかったため、引用しませんでした。彼は 1985 年の論文で最初にそのアルゴリズムを発表し、次に 1986 年のNature の論文でその技術の実験的分析を発表しました。[ 35 ]これらの論文は引用数が多くなり、バックプロパゲーションの普及に貢献し、1980 年代のニューラル ネットワークへの研究関心の復活と一致しました。[ 5 ] [ 36 ] [ 37 ]
1985年には、この手法はデビッド・パーカーによっても説明されました。[ 38 ] [ 39 ]ヤン・ルカンは、 1987年の博士論文でニューラルネットワークのバックプロパゲーションの別の形式を提案しました。 [ 40 ]
勾配降下法が受け入れられるまでにはかなりの時間を要しました。初期の反対意見には次のようなものがありました。勾配降下法がグローバル最小値に到達できる保証はなく、ローカル最小値にしか到達できないこと。生理学者はニューロンが連続信号ではなく離散信号(0/1)を生成すると「認識」しており、離散信号では勾配を取ることができないこと。この分野への貢献により2024年のノーベル物理学賞を受賞したジェフリー・ヒントン氏へのインタビューを参照してください。 [ 32 ] [ 41 ]
バックプロパゲーションを用いたニューラルネットワークの学習におけるいくつかの応用例が、その普及に貢献し、時には研究分野以外でも人気を博した。
1987年、NETtalkは英語のテキストを発音に変換することを学習した。Sejnowskiはバックプロパゲーションとボルツマンマシンの両方で学習を試みたが、バックプロパゲーションの方がはるかに速いことがわかったため、最終的なNETtalkにはバックプロパゲーションを使用した。[ 32 ]: 324 NETtalkプログラムは人気を博し、Todayショーにも登場した。[ 42 ]
1989年、ディーン・A・ポメルローは、バックプロパゲーションを用いて自律走行するように訓練されたニューラルネットワークであるALVINNを発表した。[ 43 ]
LeNetは、手書きの郵便番号を認識するために1989年に発表された。
1992年、TD-Gammonはバックギャモンで人間の最高レベルのプレイを達成した。これは、バックプロパゲーションによって訓練された2層のニューラルネットワークを備えた強化学習エージェントであった。[ 44 ]
1993年、エリック・ワンはバックプロパゲーションを用いて国際パターン認識コンテストで優勝した。[ 45 ] [ 46 ]
2000年代には人気が衰えましたが、2010年代には安価で強力なGPUベースのコンピューティングシステムの恩恵を受けて復活しました。これは特に音声認識、マシンビジョン、自然言語処理、言語構造学習研究(第一言語[ 47 ]および第二言語学習[ 48 ]に関連するさまざまな現象を説明するために使用されています)[ 49 ]で顕著です。
エラーバックプロパゲーションは、 N400やP600などのヒトの脳の事象関連電位(ERP)成分を説明するために提案されている。[ 50 ]
2023年、スタンフォード大学のチームによってフォトニックプロセッサ上にバックプロパゲーションアルゴリズムが実装された。[ 51 ]
{{cite book}}ISBN /日付の不一致(ヘルプ)