学習率がニューラルネットワークの重みを急上昇させるのはなぜですか?


9

私はテンソルフローを使用して簡単なニューラルネットワークを記述し、少しの研究を行っています。トレーニング中に「nan」の重みに多くの問題がありました。オプティマイザの変更、損失、データサイズの変更など、さまざまな解決策を試しましたが、役に立ちませんでした。最後に、学習率の変化が私の体重に信じられないほどの違いをもたらすことに気づきました。

.001の学習率(かなり保守的だと思いました)を使用すると、最小化関数は実際に指数関数的に損失を発生させます。1エポック後、損失は数千から1兆、そして無限( 'nan')にジャンプする可能性があります。学習率を.0001に下げたところ、すべてうまくいきました。

1)なぜ1桁がそのような影響を与えるのですか?

2)最小化機能が文字通りその機能の反対を実行し、損失を最大化するのはなぜですか?学習率に関係なく、それは起こらないはずです。


ウェイトをどのように初期化したか教えていただけますか?
Himanshu Rai

Adamソルバーを試すことをお勧めします。動作が良く、デフォルトがより良いようで、デフォルトの学習率を使用できる可能性があります。
DW

回答:


9

ディープラーニングの第8章が役立つかもしれません。その中で、著者らはニューラルネットワークモデルのトレーニングについて説明します。非常に複雑なため、問題が発生していても驚くことはありません。

1つの可能性(ユーザーエラー以外)は、問題の条件が非常に悪いことです。勾配降下法では、更新の計算時に一次導関数(勾配)情報のみを使用します。これは、2次導関数(ヘッセ行列)が悪条件であるときに問題を引き起こす可能性があります。

著者からの引用:

H

悪条件の問題は、一般にニューラルネットワークのトレーニング問題に存在すると考えられています。非常に小さなステップもコスト関数が増加するという意味でSGDを「スタック」させることで、悪条件が発生する可能性があります。[私の強調が追加されました]

著者は、これが当てはまる可能性があることを示すために簡単な導出を提供しています。勾配降下法を使用すると、コスト関数は次のように(2次に)変化するはずです。

ε22gTHgεgTg

gHεεε


2
この定理の答えは、ヘッセ行列の悪条件に対して非常に直感的な説明を提供しているように思えます。
Oren Milman、2018年

3

1)なぜ1桁がそのような影響を与えるのですか?

2)最小化機能が文字通りその機能の反対を実行し、損失を最大化するのはなぜですか?学習率に関係なく、それは起こらないはずです。

主な理由は2つあります。最初のステップでは、最初のステップで2番目のステップと同じデータを使用していません。最初のステップでモデルがそれらの値を学習し、極小値に該当する場合、新しい値の損失が大きくなる可能性が非常に高くなります。

2番目の理由は、コスト関数の形状です。小さなステップで値を最小化しようとします。これらのステップの長さは、勾配と学習率の2つの要素によって与えられます。関数はx ^ 2のようなイメージです。値が0に近い場合、勾配はそれよりも小さくなりますが、学習率が大きい場合、0に近づくのではなく、実際にエラーが増加します。これは、グレーディングと学習率は、前のステップよりも0になっています。そして、これは数回発生する可能性があります。

このリンクをご覧くださいhttp : //www.statisticsviews.com/details/feature/5722691/Getting-to-the-Bottom-of-Regression-with-Gradient-Descent.html

アルファ0.01とアルファ0.12の数値を見ると、最初の図で学習率が小さく、勾配が最小に近づいていることがわかりますが、2番目の場合、学習率が非常に大きく、勾配が移動します。すべてのステップでさらに。


1
2番目の理由について- この答えは、勾配降下が発散する可能性がある場合(単純な関数を使用して)を示しています。あなたは試して見ることができるようにその答えはまた、Pythonコードを持っているか、異なるシナリオにおける勾配降下振る舞う...
オレンミルマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.