训练损失一次又一次地下降。怎么了?

机器算法验证 机器学习 神经网络 损失函数 lstm
2022-01-21 15:45:20

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

我有两个堆叠的 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 个 Epoch:

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

训练 127803 个样本,验证 31951 个样本

这就是损失的样子: 损失图

1个回答

在第 25 个 epoch 之后,你的学习率可能会很大。这个问题很容易识别。你只需要为你的学习率设置一个较小的值。如果与您的学习率相关的问题比 NN 应该达到更低的错误,尽管它会在一段时间后再次上升。主要的一点是错误率在某个时间点会更低。

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

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

其中是您的学习率,是您的迭代次数,是识别学习率下降速度的系数。等于时,您的步骤将最小化两倍atmtm