バックプロパゲーション

提供: testwiki
ナビゲーションに移動 検索に移動

テンプレート:Pathnav テンプレート:Machine learning bar バックプロパゲーションテンプレート:Lang-en-short)または誤差逆伝播法(ごさぎゃくでんぱほう)[1]ニューラルネットワーク学習アルゴリズムである[2]

概要

バックプロパゲーションは数理モデルであるニューラルネットワークの重みを層の数に関わらず更新できる(学習できる)アルゴリズムである。ディープラーニングの主な学習手法として利用される。

そのアルゴリズムは次の通りである:

  1. ニューラルネットワークに学習のためのサンプルを与える。
  2. ネットワークの出力を求め、出力層における誤差を求める。その誤差を用い、各出力ニューロンについて誤差を計算する。
  3. 個々のニューロンの期待される出力値と倍率 (scaling factor)、要求された出力と実際の出力の差を計算する。これを局所誤差と言う。
  4. 各ニューロンの重みを局所誤差が小さくなるよう調整する。
  5. より大きな重みで接続された前段のニューロンに対して、局所誤差の責任があると判定する。
  6. そのように判定された前段のニューロンのさらに前段のニューロン群について同様の処理を行う。

アルゴリズム名が示唆するように、エラー(および学習)は出力ノードより前方のノードへと伝播する。技術的に言えば、バックプロパゲーションはネットワーク上の変更可能な重みについて、誤差の傾斜を計算するものである[3]。この傾斜はほとんどの場合、誤差を最小にする単純なアルゴリズムである確率的最急降下法で使われる。「バックプロパゲーション」という用語はより一般的な意味でも使われ、傾斜を求める手順と確率的最急降下法も含めた全体を示す。バックプロパゲーションは通常すばやく収束して、対象ネットワークの誤差の局所解(区間を限定したときの極小値、極値参照)を探し出す。人工ニューロン(または「ノード」)で使われる活性化関数可微分でなければならない。また、ガウス・ニュートン法とも密接に関連する。

バックプロパゲーションのアルゴリズムは何度か再発見されており、逆積算モードにおける自動微分という汎用技法の特殊ケースと見ることもできる。

数理最適化問題の一種であるため、バッチ学習・オンライン学習のいずれかが採用される。典型的には確率的勾配降下法を用いたミニバッチ学習が行われる。

目的

ネットワーク y^=f(x;w) に対する誤差関数 E(y^,y) を定義したとき、現在の重み wk=anow における E の傾きすなわち偏微分値 Ewk|wk=anow がわかれば、最適化手法である勾配法を用いて誤差 E が小さくなるように wk を更新(=学習)できる。学習アルゴリズムであるバックプロパゲーションの目的はこの勾配値を得て重みを学習することである。膨大数の偏微分値を自動微分により高速計算することで、極めて多次元の最適化計算の実用的な高速化が可能となる。

テクニック

バックプロパゲーションを用いて(深層)ニューラルネットワークモデルを素早く・最適解へ収束させるために様々なテクニックが提唱されている。

標準的なテクニックをヤン・ルカンらが1998年にまとめていて[4]、2010年に Xavier Glorot らが追証・発展させている[5]。以下に要約する。詳細はそれぞれの論文を参照。

  • オンライン学習において訓練データが一周したら毎回シャッフルし直す
  • 入力は、平均を0にし、主成分分析により線形相関を取り除き、分散が1になるように線形変換する。面倒だったら主成分分析は省略しても良い。
  • 目標値(出力)は活性化関数を通す場合は、二次導関数が最大になる範囲内を使用するべきである。1.7159tanh(2x/3) の場合は −1〜1 で、tanh(x) の場合は 0.5cosh1(2)0.5cosh1(2) = −0.65848 〜 0.65848 である。
  • 初期値: 各層で平均0分散1、かつ連続一様分布[6]
    • 入力ベース: U(3/fanin,3/fanin) by ヤン・ルカン
    • 入出力ベース: U(6/fanin+fanout,6/fanin+fanout) by Xavier Glorot
  • 勾配法: 様々なパラメータ更新法が提案され利用されている(確率的勾配降下法#変種を参考)。
  • 活性化関数

高速化

GPU

行列の掛け算はGPGPUが得意としており、高速に計算できる。PythonではTheanoなどのライブラリおよびそれを間接的に使用してる機械学習のライブラリなどがある。

CPUによる並列化

CPUのメニーコアやSIMDを有効活用する簡単な方法は行列演算ライブラリを使用する方法である。行列演算ライブラリとしては、例えばインテルのCPU向けではIntel Math Kernel Libraryなどがある。

バックプロパゲーションは完了までに非常に時間のかかる反復処理である。マルチコアのコンピュータでマルチスレッド技法を使えば、収斂までにかかる時間を大幅に短縮することができる。バッチ学習を行う場合、マルチスレッドでバックプロパゲーションのアルゴリズムを実行するのが比較的簡単である。

訓練データをそれぞれのスレッド毎に同程度の大きさに分割して割り当てる。それぞれのスレッドで順方向と逆方向のプロパゲーションを行う。重みとしきい値のデルタをスレッド毎に合計していく。反復の周回毎に全スレッドを一時停止させて、重みとしきい値のデルタを合計し、ニューラルネットワークに適用する。これを反復毎に繰り返す。このようなバックプロパゲーションのマルチスレッド技法がEncog Neural Network Frameworkで使われている[11]

歴史

バックプロパゲーションに相当(連鎖律+勾配法)するニューラルネットワーク学習手法は何度も再発見されてきた。

  • 21世紀におけるディープラーニング(4層以上)ではバックプロパゲーションが学習法として多く用いられる。

限界

脚注

テンプレート:Reflist

関連項目

外部リンク

テンプレート:Normdaten

  1. 逆誤差伝搬法(ぎゃくごさでんぱんほう)と呼ばれることもあるが,電波伝播に対する電波伝搬と同じく誤読に起因する誤字である。
  2. "We describe a new learning procedure, back-propagation, for networks of neurone-like units." p.533 of Rumelhart (1986)
  3. Paul J. Werbos (1994). The Roots of Backpropagation. From Ordered Derivatives to Neural Networks and Political Forecasting. New York, NY: John Wiley & Sons, Inc.
  4. テンプレート:Cite journal
  5. 5.0 5.1 テンプレート:Cite journal
  6. Multilayer Perceptron — DeepLearning 0.1 documentation
  7. ヤン・ルカンらによる
  8. テンプレート:Cite book
  9. テンプレート:Cite journal
  10. テンプレート:Cite journal
  11. J. Heaton http://www.heatonresearch.com/encog/mprop/compare.html Applying Multithreading to Resilient Propagation and Backpropagation
  12. テンプレート:Cite journal
  13. テンプレート:Cite journal
  14. テンプレート:Cite journal
  15. テンプレート:Cite journal
  16. テンプレート:Cite book
  17. テンプレート:Cite book
  18. Paul J. Werbos. Beyond Regression: New Tools for Prediction and Analysis in the Behavioral Sciences. PhD thesis, Harvard University, 1974
  19. テンプレート:Cite book
  20. テンプレート:Cite journal
  21. "The most obvious drawback of the learning procedure is that the error-surface may contain local minima so that gradient descent is not guaranteed to find a global minimum." p.536 of Rumelhart, et al. (1986). Learning representations by back-propagating errors. Nature.