Потеря обучения идет вниз и снова. Что происходит?


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-й эпохи. Попробуйте настроить его меньше и проверьте свою потерю снова
itdxer

Но как дополнительное обучение может увеличить потерю данных тренировки?
patapouf_ai

3
Извините, я имею в виду скорость обучения.
itdxer

Спасибо, итдксер. Я думаю, что вы сказали, должно быть на правильном пути. Я попытался использовать «adam» вместо «adadelta», и это решило проблему, хотя я предполагаю, что снижение скорости обучения «adadelta», вероятно, также сработало бы. Если вы хотите написать полный ответ, я приму его.
patapouf_ai

Ответы:


19

Ваша скорость обучения может быть слишком большой после 25-й эпохи. Эту проблему легко определить. Вам просто нужно установить меньшее значение для вашей скорости обучения. Если проблема, связанная с вашей скоростью обучения, чем NN, должна достигнуть более низкой ошибки, несмотря на то, что она снова возрастет через некоторое время. Суть в том, что в какой-то момент частота ошибок будет ниже.

Если вы наблюдали это поведение, вы могли бы использовать два простых решения. Первый самый простой. Установите очень маленький шаг и тренируйте его. Второй - монотонно снижать скорость обучения. Вот простая формула:

α(T+1)знак равноα(0)1+Tм

Где - ваша скорость обучения, - ваш номер итерации, а - коэффициент, который определяет скорость снижения скорости обучения. Это означает, что ваш шаг будет минимизирован в два раза, когда равно .т т т тaTмTм


7
Поскольку OP использовал Keras, другой вариант сделать немного более сложные обновления скорости обучения - это использовать обратный вызов, такой как ReduceLROnPlateau , который снижает скорость обучения, когда потеря проверки не улучшается в течение заданного числа эпох.
n1k31t4
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.