トレーニングの損失は再び減少します。何が起こっている?


26

トレーニングの損失が減少し、再び増加します。とても奇妙です。交差検証損失は、トレーニング損失を追跡します。何が起こっている?

次の2つのスタックLSTMSがあります(Kerasで)。

model = Sequential()
model.add(LSTM(512, return_sequences=True, input_shape=(len(X[0]), len(nd.char_indices))))
model.add(Dropout(0.2))
model.add(LSTM(512, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(len(nd.categories)))
model.add(Activation('sigmoid'))

model.compile(loss='binary_crossentropy', optimizer='adadelta')

100エポックでトレーニングします。

model.fit(X_train, np.array(y_train), batch_size=1024, nb_epoch=100, validation_split=0.2)

127803サンプルのトレーニング、31951サンプルの検証

そして、それは損失がどのように見えるかです: 損失のグラフ


2
あなたの学習は、25エポック後に大きくなる可能性があります。小さなそれを設定して、もう一度、あなたの損失をチェックしてみてください
itdxer

しかし、トレーニングを追加すると、トレーニングデータの損失が大きくなる可能性があります
patapouf_ai

3
申し訳ありませんが、私は学習率を意味します。
itdxer

itdxerありがとうございます。あなたの言ったことは正しい軌道に乗っていなければならないと思います。「adadelta」の代わりに「adam」を使用してみましたが、これで問題は解決しましたが、「adadelta」の学習率を下げることでおそらくうまくいったと思います。あなたが完全な答えを書きたい場合、私はそれを受け入れます。
patapouf_ai

回答:


19

あなたの学習率は、25エポック後に大きくなる可能性があります。この問題は簡単に特定できます。学習率の値を小さく設定するだけです。あなたの学習率に関連する問題がNNよりも低い場合、それはしばらくして再び上昇するにもかかわらず、より低いエラーに達するはずです。主なポイントは、ある時点でエラー率が低くなることです。

この動作を観察した場合、2つの簡単なソリューションを使用できます。最初のものは最も単純なものです。非常に小さなステップを設定してトレーニングします。2つ目は、学習率を単調に減少させることです。簡単な式を次に示します。

α(t+1)=α(0)1+tm

ここでは学習率、は反復数、は学習率の低下速度を識別する係数です。が等しい場合、ステップは2倍に最小化されることを意味します。atmtm


7
OPはKerasを使用していたため、少し洗練された学習率更新を行う別のオプションは、ReduceLROnPlateauのようなコールバックを使用することです。これは、所定のエポック数で検証損失が改善されない場合、学習率を低下させます。
n1k31t4
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.