学習率の選択


85

現在SGD、バックプロパゲーションを使用したニューラルネットの確率的勾配降下法の実装に取り​​組んでおり、その目的は理解していますが、学習率の値を選択する方法についていくつか質問があります。

  • 学習率は、降下率を決定するため、誤差勾配の形状に関連していますか?
  • もしそうなら、この情報をどのように使用して価値についての決定を知らせるのですか?
  • それがどのような種類の値を選択する必要がない場合、どのように選択する必要がありますか?
  • オーバーシュートを避けるために小さな値が必要なようですが、ローカルミニマムにとらわれたり、下降に時間がかかったりしないように、どのように選択しますか?
  • 一定の学習率を持つことは理にかなっていますか、または勾配の最小値に近づくにつれてその値を変更するために何らかのメトリックを使用する必要がありますか?

つまり、SGDの学習率を選択するにはどうすればよいですか?

回答:


69
  • 学習率は、降下率を決定するため、誤差勾配の形状に関連していますか?

    • 単純なSGDでは、答えはノーです。誤差勾配とは無関係なグローバル学習率が使用されます。ただし、あなたが得ている直感は、SGD更新ルールのさまざまな修正を促しています。
  • もしそうなら、この情報をどのように使用して価値についての決定を知らせるのですか?

    • アダグラードは、これらの中で最も広く知られ、各次元の誤差勾配gtの履歴のl2ノルムに基づいて、各次元のグローバル学習率ηをスケーリングします。

      ここに画像の説明を入力してください

    • Adadeltaは、adagradなどの誤差勾配履歴と重み更新履歴の両方を使用し、学習率をまったく設定する必要ないという利点がある別のトレーニングアルゴリズムです。

  • それがどのような種類の値を選択する必要がない場合、どのように選択する必要がありますか?

    • ニューラルネットでプレーンSGDの学習率を設定することは、通常、0.01などの正気な値から開始し、次に相互検証を行って最適な値を見つけるプロセスです。一般的な値の範囲は、0.0001から1までの数桁です。
  • オーバーシュートを避けるために小さな値が必要なようですが、ローカルミニマムで行き詰まったり、下降に時間がかかりすぎないようにするにはどうすればよいでしょうか?一定の学習率を持つことは理にかなっていますか、または勾配の最小値に近づくにつれてその値を変更するために何らかのメトリックを使用する必要がありますか?

    • 通常、最適な値は最高の安定した学習率に近く、学習率の減衰/アニーリング(線形または指数関数的)はトレーニングの過程で使用されます。この背後にある理由は、早い段階で明確な学習シグナルがあるため、積極的な更新により探索が促進され、後ほど学習レートが低くなると、ローカルエラーサーフェスのより繊細な活用が可能になるためです。

1
実際には、adadeltaで学習率を使用します。いくつかの問題では、それなしでは機能しません。
バイエル14年

最近、AdamオプティマイザーはAdagradやAdadeltaよりも一般的であることに注意してください。
E_net4はまだストライキ中です

22

以下は、Andrew NgによるNeural Nets(Back Propagation)の学習率に関する非常に良いメモ(12ページ)です。学習率に関する詳細が表示されます。

http://web.stanford.edu/class/cs294a/sparseAutoencoder_2011new.pdf

4番目の点については、通常、「バランスの取れた」学習率を選択する必要があります。これは、オーバーシュートも収束も遅すぎるべきではありません。診断/微調整のために、コスト関数の下降に対して学習率をプロットできます。実際には、Andrewは通常、L-BFGSアルゴリズム(12ページで説明)を使用して、「十分な」学習率を獲得します。


9

学習率の選択は、ハイパーパラメーター最適化として知られる「メタ問題」の一例です。最適な学習率は、現在の問題、最適化されるモデルのアーキテクチャ、さらには現在の最適化プロセスでのモデルの状態によって異なります。スペアミントhyperoptなどのハイパーパラメーター最適化専用のソフトウェアパッケージもあります(ほんの2、3の例、他にもたくさんあります!)。

フルスケールのハイパーパラメーター最適化とは別に、これまで言及されていない学習率を選択するために非常に一般的な1つの手法に言及したかったのです。シミュレーテッドアニーリングは、モデルを最適化するための手法であり、大きな学習率で開始し、最適化が進むにつれて学習率を徐々に低下させます。一般に、大きな学習率(0.1程度)でモデルを最適化してから、この速度を徐々に大きくします(多くの場合、1桁(0.01、0.001、0.0001など))。

これを早期停止と組み合わせて、進行中の場合は1つの学習率でモデルを最適化し、進行が遅くなった場合はより小さな学習率に切り替えることができます。学習率が大きいと、モデルが一般的な大規模な最適値の領域を見つけるのに役立ちますが、学習率が小さいと、モデルが特定のローカル最適に集中するのに役立ちます。


6

修士論文からコピー&ペースト:

  • いくつかのエポックで損失が減少しない場合、学習率が低すぎる可能性があります。最適化プロセスは、極小値にとどまることもあります。
  • NANの損失は、学習率が高すぎるためである可能性があります。別の理由は、ゼロによる除算またはゼロの対数を取ることです。
  • 重み更新の追跡:Andrej Karpathyは、CS231nの5回目の講義で、重みの更新を追跡して、学習率が適切かどうかを確認することを提案しました。彼は、重みの更新は10-3のオーダーであるべきだと提案しています。重みの更新が高すぎる場合、学習率を下げる必要があります。重みの更新が低すぎる場合、学習率を上げる必要があります。
  • 典型的な学習率は[0.1、0.00001]です

4

反復プロセス中に「ステップサイズ」として変換される学習率は、何年もの間ホットな問題であり、今後も続きます。

私の懸念のステップサイズには3つのオプションがあります:

  • 1つは " 時間 "に関連していて、各次元は同じステップサイズを共有するものとします。次のようなことに気づいたかもしれません

αt

tは現在の反復回数を示しますが、アルファはハイパーパラメーターです

  • 次のものは勾配で接続され、各次元には独自のステップサイズがあります。次のようなことに気づいたかもしれません

1αβ+s=1t1gs2αβ+s=1tgs2

アルファとベータはハイパーパラメーターですが、gは勾配を示します

  • 最後は時間と勾配の組み合わせで、次のようになります

1αβ+s=1t1gs2αβ+s=1tgs2+γt

または

1αβ+s=1t1gs2αβ+s=1tgs2γt

これがあなたの助けになることを願っています、幸運-)


これに関するリファレンスはありますか?
ジョン

FTRLの学習率の部分を参照できます。TIMEとGRADIENTで定式化できます。
joe

3

ニューラルネットワークは、重みの勾配降下によって訓練されることがよくあります。これは、各反復で、バックプロパゲーションを使用して、各重みに関する損失関数の導関数を計算し、その重みからそれを減算することを意味します。ただし、実際に試してみると、反復ごとに重みが大幅に変化するため、「過大」になり、損失は実際に増加/発散します。したがって、実際には、人々は通常、各派生物に「学習率」と呼ばれる小さな値を掛けてから、対応する重みから減算します。

また、ニューラルネットワークの損失関数をサーフェスとして考えることもできます。ここで、移動できる各方向は重みの値を表します。勾配降下は、現在の斜面の方向に飛躍するようなものであり、学習率は飛躍の長さのようなものです。


3

FastaiのDavidの答えに加えて、特定のアーキテクチャを使用して、そのデータに最適な学習率を見つけるという概念を見つけました。

しかし、そのことはfastai / pytorchにのみ存在します。最近誰かがケラスの実装をしました

これらは次の論文に基づいています:

お役に立てれば。


2

ジェレミーハワードのディープラーニングコース1 に基づいた、学習率の選択に関する別のアプローチを簡単に紹介しましょう。さらに深く掘り下げたい場合は、このブログ投稿を参照してください

ジェレミーハワードのコースで提案されている学習率は、さまざまな学習率を試して、損失関数が最も低下するものを選択する体系的な方法に基づいています。これは、ミニバッチ勾配降下法に多くのバッチを供給し、新しいバッチをメソッドに供給するたびに学習率を上げることによって行われます。学習率が非常に小さい場合、損失関数は非常にゆっくりと減少します。学習率が非常に大きい場合、損失関数が増加します。これらの2つのレジームの間に、損失関数が最も速く減少する最適な学習率があります。これは次の図で見ることができます:

ここに画像の説明を入力してください

103

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.