Зниження тренувань знову зменшується. Що відбувається?


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, має отримати меншу помилку, незважаючи на те, що через деякий час вона знову зросте. Основний момент полягає в тому, що коефіцієнт помилок буде нижчим в якийсь момент часу.

Якщо ви спостерігали за такою поведінкою, ви можете використовувати два простих рішення. Перший - найпростіший. Налаштуйте дуже маленький крок і навчіть його. Другий - монотонно знизити рівень навчання. Ось проста формула:

α(т+1)=α(0)1+тм

атмтм


7
Оскільки в ОП використовувались Кераси, ще одним варіантом зробити дещо більш досконалі оновлення швидкості навчання було б використання зворотного дзвінка на зразок ReduceLROnPlateau , який знижує швидкість навчання після того, як втрата валідації не покращилася за певну кількість епох.
n1k31t4
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.