Kehilangan pelatihan turun dan naik lagi. Apa yang terjadi?

26

Kehilangan latihan saya turun dan naik lagi. Sangat aneh. Kehilangan validasi silang melacak kehilangan pelatihan. Apa yang sedang terjadi?

Saya memiliki dua LSTMS yang ditumpuk sebagai berikut (pada 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')

Saya latih untuk 100 Zaman:

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

Melatih 127803 sampel, validasi pada 31951 sampel

Dan seperti itulah kerugiannya: Grafik Kerugian

patapouf_ai
sumber
2
Pembelajaran Anda bisa menjadi besar setelah zaman ke-25. Cobalah untuk mengaturnya lebih kecil dan periksa kerugian Anda lagi
itdxer
Tetapi bagaimana mungkin pelatihan ekstra membuat kehilangan data pelatihan lebih besar?
patapouf_ai
3
Maaf, maksud saya tingkat belajar.
itdxer
Terima kasih itxxer. Saya pikir apa yang Anda katakan harus di jalur yang benar. Saya mencoba menggunakan "adam" bukannya "adadelta" dan ini menyelesaikan masalah, meskipun saya menduga bahwa mengurangi tingkat belajar "adadelta" mungkin akan berhasil juga. Jika Anda ingin menulis jawaban lengkap saya akan menerimanya.
patapouf_ai

Jawaban:

19

Tingkat belajar Anda bisa menjadi besar setelah zaman ke-25. Masalah ini mudah diidentifikasi. Anda hanya perlu menetapkan nilai yang lebih kecil untuk tingkat pembelajaran Anda. Jika masalah yang terkait dengan tingkat belajar Anda dari NN harus mencapai kesalahan yang lebih rendah meskipun itu akan naik lagi setelah beberapa saat. Poin utama adalah bahwa tingkat kesalahan akan lebih rendah di beberapa titik waktu.

Jika Anda mengamati perilaku ini, Anda bisa menggunakan dua solusi sederhana. Yang pertama adalah yang paling sederhana. Atur langkah yang sangat kecil dan latihlah. Yang kedua adalah mengurangi tingkat belajar Anda secara monoton. Berikut ini rumus sederhana:

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

Sebuahtmtm

itdxer
sumber
7
Karena OP menggunakan Keras, opsi lain untuk membuat pembaruan laju pembelajaran yang sedikit lebih canggih adalah dengan menggunakan callback seperti ReduceLROnPlateau , yang mengurangi tingkat pembelajaran setelah kehilangan validasi belum membaik untuk sejumlah zaman tertentu.
n1k31t4