训练损失再次上升和下降。怎么了?


26

我的训练损失下降,然后又上升。这很奇怪。交叉验证损失跟踪训练损失。到底是怎么回事?

我有两个堆叠的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个时代之后,您的学习范围可能会很大。尝试将其设置
得更

但是,额外的培训如何使培训数据丢失更大?
patapouf_ai 2016年

3
对不起,我的意思是学习率。
itdxer

谢谢itdxer。我认为您所说的必须走上正确的道路。我尝试使用“ adam”代替“ adadelta”,这解决了问题,尽管我猜想降低“ adadelta”的学习率可能也可以。如果您想写一个完整的答案,我会接受的。
patapouf_ai 2016年

Answers:


19

在第25个时期之后,您的学习率可能会很高。这个问题很容易识别。您只需要为学习率设置一个较小的值。如果与您的学习率相关的问题比NN的错误率要低,尽管它会在一段时间后再次出现。要点是错误率在某些时间点会更低。

如果您观察到此行为,则可以使用两个简单的解决方案。第一个是最简单的一个。设置一个非常小的步骤并进行训练。第二个是单调降低学习率。这是一个简单的公式:

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

atmtm


7
当OP使用Keras时,另一种使学习速率更新更为复杂的选择是使用类似ReduceLROnPlateau的回调,一旦在给定时期内验证损失没有改善,该回调就会降低学习速率。
n1k31t4 '18年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.