バックプロパゲーション

出典: フリー百科事典『ウィキペディア(Wikipedia)』
ニューラルネットワーク > バックプロパゲーション

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

概要[編集]

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

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

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

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

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

オンライン学習[編集]

学習には、オンライン(逐次的)学習とバッチ学習という2つの方法がある。オンライン(逐次的)学習では、個々のプロパゲーションの直後に重み付けの更新を行う。バッチ学習では全ての訓練データ一括でまとめて重み付けの更新を行う。オンライン学習で数個まとめるのをミニバッチと言う。バッチ学習ではメモリ容量をより多く必要とするが、オンライン学習では更新処理が多くなる。

テクニック[編集]

バックプロパゲーションを使用するにあたり、気をつけるべきテクニックがあり、不適切に利用すると正しい値に収束しなかったり、収束が遅くなったりする。特に4層以上の深層ニューラルネットワークでおかしな事になりやすい。標準的なテクニックをヤン・ルカンらが1998年にまとめていて[4]、2010年に Xavier Glorot らが追証・発展させている[5]。以下に要約する。詳細はそれぞれの論文を参照。

  • バッチ学習よりも確率的勾配降下法によるオンライン学習を使う
  • オンライン学習において訓練データが一周したら毎回シャッフルし直す
  • 入力は、平均を0にし、主成分分析により線形相関を取り除き、分散が1になるように線形変換する。面倒だったら主成分分析は省略しても良い。
  • 活性化関数は原点を通る物を使用する。標準シグモイド関数f(0) = 0.5 のため不適切で、tanhは原点を通るので良い。ヤン・ルカンらは を薦めているが、Xavier Glorotらは単に tanh(x) で十分としている。ヤン・ルカンらの意図は f(±1) = ±1 にすることにある。どちらも f(0) = 0, f'(0) = 1。
  • 目標値(出力)は活性化関数を通す場合は、二次導関数が最大になる範囲内を使用するべきである。 の場合は −1〜1 で、tanh(x) の場合は = −0.65848 〜 0.65848 である。
  • 全ての層が平均0分散1から開始できるようにするべきである。そのために、重みパラメータの初期値は、ヤン・ルカンらは重みの分散が 1 / 入ってくる入力数 にすることで、合計分散1になるのでこれが望ましく、そして連続一様分布が良く、つまり、 が良いとしている。Xavier Glorotらは出力も考慮に入れるべきとして、 を薦めている。deeplearning.netのチュートリアルも参照[6]
  • 学習率は徐々に小さくしていくべきであり、ヤン・ルカンらは (cは定数、tはエポック数)は減るのが速すぎるとしているが、deeplearning.netのチュートリアルは を薦めている[6]。より複雑な方法としてはAdaGradが2011年に[7]、RMSPropが2012年に提案されている[8]

2010年に Xavier Glorotらは良いS字の活性化関数としてこの2つをあげている[5]。全て f(0) = 0, f'(0) = 1, 値域は−1〜1。

翌年の2011年、Xavier Glorotらは隠れ層の活性化関数として max(x, 0) を使った方が tanh(x) よりも改善するということを発表した[9]。ヤン・ルカンやジェフリー・ヒントンらが雑誌ネイチャーに書いた論文では、2015年5月現在これが最善であるとしている[10]。ニューラルネットワークの世界では現在はReLUと呼ばれるが、一般的にはこの関数はランプ関数と呼ばれ、また、この活性化関数は昔から使われており1980年代頃はアナログ閾素子(: analog threshold element)と呼ばれていた[11]線形補間(1次スプライン補間)の手法。

  • ReLU(ランプ関数):

学習率の調整方法[編集]

学習率の調整方法として2011年にJohn DuchiらがAdaGradを発表し[7]、2012年にRMSPropが発表された[8]。ヤン・ルカンらは1998年にパラメータごとに学習率を変えた方が良いと述べているが、これらもパラメータごとに学習率を変えている。これらの手法のコンセプトは勾配がなめらかな所で学習率を高めることにある。

AdaGradは以下の方法で学習率をパラメータごとに設定していく。方法としてはパラメータごとに誤差関数の勾配の二乗累積和を計算し、学習率はその平方根で割る。rが0に近い時に学習率が無限大に行かないようにするために入れる物で、例えば等の小さな数値を入れる。は全パラメータ共通の学習率の初期値。tはエポック数。

RMSPropは以下の方法で学習率 をパラメータごとに設定していく。AdaGrad との違いは、誤差関数の勾配の二乗を扱う際に累積和ではなく指数移動平均を使うことにある。追加になったハイパーパラメータはで0.9等を使う。AdaGradでは学習率は常に減少していくが、指数移動平均を使ったことにより、増減するようになった。

高速化[編集]

GPU[編集]

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

CPUによる並列化[編集]

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

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

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

歴史[編集]

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

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

限界[編集]

  • 損失超平面が極小値 (: local minima) を持ちうるため、勾配降下で広域最適解 (: global minima) に収束する保証がない (Remelhart, 1986[22])
  • 一カ所でも勾配消失を起こすとそれより下層は学習が進まなくなるため、層数が増えるほど勾配消失を起こす確率が増大していく
  • 勾配が0に近い部分が存在する活性化関数を使っていると勾配消失を起こしやすい
  • 学習が必ず収束するとは限らない[要出典]
  • 各次元の分散に差がありすぎると分散の小さいところに重みが集中しやすい[要出典]
  • 誤差を最小化して任意関数を近似するため、中心極限定理に従わないデータは学習できない[独自研究?]
  • 学習収束が非常に遅い[独自研究?]
  • 場合により入力データに前処理が要る[独自研究?]

脚注[編集]

  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. ^ Yann LeCun; Leon Bottou; Genevieve B. Orr; Klaus-Robert Muller (1998). Efficient BackProp. http://yann.lecun.com/exdb/publis/pdf/lecun-98b.pdf. 
  5. ^ a b Xavier Glorot; Yoshua Bengio (2010). Understanding the difficulty of training deep feedforward neural networks. http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf. 
  6. ^ a b Multilayer Perceptron — DeepLearning 0.1 documentation
  7. ^ a b John Duchi; Elad Hazan; Yoram Singer (2011). Adaptive Subgradient Methods for Online Learning and Stochastic Optimization. http://jmlr.org/papers/v12/duchi11a.html. 
  8. ^ a b T. Tieleman; G. Hinton (2012). Lecture 6.5 - rmsprop, COURSERA: Neural Networks for Machine Learning. 
  9. ^ Xavier Glorot; Antoine Bordes; Yoshua Bengio. “Deep Sparse Rectifier Neural Networks”. Proceedings of the Fourteenth International Conference on Artificial Intelligence and Statistics (AISTATS-11) 15: 315-323. http://jmlr.csail.mit.edu/proceedings/papers/v15/glorot11a/glorot11a.pdf. 
  10. ^ Yann LeCun; Yoshua Bengio; Geoffrey Hinton (2015-05-28). “Deep learning”. Nature 521 (7553): 436-444. doi:10.1038/nature14539. 
  11. ^ 福島邦彦 『神経回路と情報処理』朝倉書店、1989年。ISBN 978-4254120639 
  12. ^ J. Heaton http://www.heatonresearch.com/encog/mprop/compare.html Applying Multithreading to Resilient Propagation and Backpropagation
  13. ^ Benerard Widrow; M.E. Hoff, Jr. (August 1960). “Adaptive Switching Circuits”. IRE WESCON Convention Record 4: 96-104. http://www-isl.stanford.edu/people/widrow/papers/c1960adaptiveswitching.pdf. 
  14. ^ Benerard Widrow; Michael A. Lehr (1995). Perceptorons, Adalines, and Backpropagation. http://isl-www.stanford.edu/~widrow/papers/bc1995perceptronsadalines.pdf. 
  15. ^ Shun-ichi Amari (June 1967). “Theory of adaptive pattern classifiers”. IEEE Transactions EC-1: 299–307. doi:10.1109/PGEC.1967.264666. 
  16. ^ Shun-ichi Amari (2013). “Dreaming of mathematical neuroscience for half a century”. Neural Networks 37 Baby: 48–51. 
  17. ^ Stuart Russell and Peter Norvig. Artificial Intelligence A Modern Approach. p. 578. "The most popular method for learning in multilayer networks is called Back-propagation. It was first invented in 1969 by Bryson and Ho, but was largely ignored until the mid-1980s." 
  18. ^ Arthur Earl Bryson, Yu-Chi Ho (1969). Applied optimal control: optimization, estimation, and control. Blaisdell Publishing Company or Xerox College Publishing. pp. 481 
  19. ^ Paul J. Werbos. Beyond Regression: New Tools for Prediction and Analysis in the Behavioral Sciences. PhD thesis, Harvard University, 1974
  20. ^ Alpaydın, Ethem (2010). Introduction to machine learning (2nd ed. ed.). Cambridge, Mass.: MIT Press. p. 250. ISBN 978-0-262-01243-0. "...and hence the name backpropagation was coined (Rumelhart, Hinton, and Williams 1986a)." 
  21. ^ Rumelhart, David E.; Hinton, Geoffrey E., Williams, Ronald J. (8 October 1986). “Learning representations by back-propagating errors”. Nature 323 (6088): 533–536. doi:10.1038/323533a0. 
  22. ^ "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.

外部リンク[編集]