11

私はJavaでニューラルネットワークをプログラムし、現在バックプロパゲーションアルゴリズムに取り組んでいます。

重みのバッチ更新により、オンラインの重み更新ではなく、より安定した勾配検索が行われることを読みました。

x = [0..99]テストとして、となどの100ポイントの時系列関数を作成しましたy = f(x)。テスト用に、1つの入力と1つの出力、および10個のニューロンを持つ2つの隠れ層を持つニューラルネットワークを作成しました。私が苦労しているのは、この問題に取り組むときのバックプロパゲーションアルゴリズムの学習率です。

100個の入力ポイントがあるので、各ノードの重みの変化を計算すると、dw_{ij}実際には合計になります。

dw_{ij} = dw_{ij,1} + dw_{ij,2} + ... + dw_{ij,p}

この場合はどこp = 100に。

これで、重みの更新が非常に大きくなるため、エラーがE跳ね返り、最小値を見つけるのが困難になります。私が適切な行動をとる唯一の方法は、学習率yをのようなものに設定したときでした0.7 / p^2

サンプル量に基づいて学習率を設定するための一般的なルールはありますか?

4

2 に答える 2

48

http://francky.me/faqai.php#otherFAQs

件名:バックプロパゲーションにはどのような学習率を使用する必要がありますか?

標準のバックプロパゲーションでは、学習率が低すぎると、ネットワークの学習が非常に遅くなります。学習率が高すぎると、重みと目的関数が発散するため、学習はまったく行われません。線形モデルのように目的関数が2次の場合、ヘッセ行列から適切な学習率を計算できます(Bertsekas and Tsitsiklis、1996)。隠れユニットを持つ典型的なフィードフォワードNNのように、目的関数に多くのローカルおよびグローバル最適化がある場合、ヘッセ行列も劇的に変化するため、最適学習率はトレーニングプロセス中に劇的に変化することがよくあります。一定の学習率を使用してNNをトレーニングしようとすることは、通常、多くの試行錯誤を必要とする退屈なプロセスです。学習率と運動量の選択がいくつかの非常に単純なネットワークで数値条件とどのように相互作用するかのいくつかの例については、を参照してください。 ftp://ftp.sas.com/pub/neural/illcond/illcond.html

バッチトレーニングでは、一定の学習率を使用する必要はありません。実際、はるかに効率的で信頼性が高く、便利なバッチトレーニングアルゴリズムが存在するため、標準のバックプロパゲーションを使用する理由はまったくありません(「バックプロパゲーションとは」のQuickpropとRPROP、および「共役とは何か」で説明した多数のトレーニングアルゴリズムを参照してください。勾配、Levenberg-Marquardtなど?」)。

バックプロパゲーションの他の多くの変種が発明されました。ほとんどの場合、標準のバックプロパゲーションと同じ理論上の欠陥があります。重みの変化の大きさ(ステップサイズ)は、勾配の大きさの関数であってはなりません。重み空間の一部の領域では、勾配が小さく、大きなステップサイズが必要です。これは、ランダムな重みが小さいネットワークを初期化するときに発生します。重み空間の他の領域では、勾配が小さく、小さなステップサイズが必要です。これは、極小値に近い場合に発生します。同様に、大きな勾配は、小さなステップまたは大きなステップのいずれかを必要とする場合があります。多くのアルゴリズムは学習率を適応させようとしますが、学習率に勾配を掛けて重みの変化を計算するアルゴリズムは、勾配が急激に変化したときに不安定な動作を引き起こす可能性があります。QuickpropとRPROPの大きな利点は、勾配の大きさにこのような過度の依存性がないことです。従来の最適化アルゴリズムは、勾配だけでなく、2次導関数または直線探索(またはそれらの組み合わせ)も使用して、適切なステップサイズを取得します。

インクリメンタルトレーニングでは、トレーニング中に学習率を自動的に調整するアルゴリズムを作成することははるかに困難です。NNの文献にはさまざまな提案がありますが、それらのほとんどは機能しません。これらの提案のいくつかに関する問題は、残念ながら解決策を提供していないDarken and Moody(1992)によって説明されています。いくつかの有望な結果は、LeCun、Simard、Pearlmutter(1993)、および学習率ではなく勢いを適応させるOrr and Leen(1997)によって提供されています。「反復平均化」または「ポリアック平均化」(Kushnerand Yin 1997)と呼ばれる確率的近似の変形もあります。これは、重み値の移動平均を維持することによって理論的に最適な収束率を提供します。私はこれらの方法について個人的な経験はありません。

参照

  • Bertsekas、DP and Tsitsiklis、JN(1996)、Neuro-Dynamic Programming、Belmont、MA:Athena Scientific、ISBN1-886529-10-8。
  • Darken、C.およびMoody、J.(1992)、「より高速な確率的勾配検索に向けて」、Moody、JE、Hanson、SJ、およびLippmann、RP、eds。
  • ニューラル情報処理システムの進歩4、カリフォルニア州サンマテオ:Morgan Kaufmann Publishers、pp.1009-1016。Kushner、HJ、およびYin、G.(1997)、確率的近似アルゴリズムとアプリケーション、ニューヨーク:Springer-Verlag。LeCun、Y.、Simard、PY、およびPearlmetter、B.(1993)、「ヘッセ行列の固有ベクトルのオンライン推定による自動学習率の最大化」、Hanson、SJ、Cowan、JD、およびGiles、
  • CL(eds。)、Advances in Neural Information Processing Systems 5、San Mateo、CA:Morgan Kaufmann、pp.156-163。Orr、GBおよびLeen、TK(1997)、「高速確率的検索のための曲率情報の使用」、
  • Mozer、MC、Jordan、MI、and Petsche、T.、(eds。)Advances in Neural Information Processing Systems 9、Cambridge、MA:MIT Press、pp.606-612。

クレジット

  • アーカイブ名:ai-faq / neuro-nets / part1
  • 最終更新日:2002-05-17
  • URL: ftp: //ftp.sas.com/pub/neural/FAQ.html
  • メンテナ:saswss@unx.sas.com(Warren S. Sarle)
  • Copyright 1997、1998、1999、2000、2001、2002 by Warren S. Sarle、Cary、NC、USA。
于 2012-07-10T14:23:08.287 に答える
5

簡単な解決策は、バッチを合計するのではなく、バッチの平均重量を取得することです。このようにして、さらに別のパラメーターを最適化することを心配することなく、0.7の学習率(またはお好みの他の値)を使用できます。

バッチ更新と学習率に関するさらに興味深い情報は、Wilson(2003)によるこの記事にあります。

于 2012-07-10T14:38:02.080 に答える