Jaringan saraf berulang saya (LSTM, resp. GRU) berperilaku dengan cara yang tidak bisa saya jelaskan. Pelatihan dimulai dan dilatih dengan baik (hasilnya terlihat cukup baik) ketika akurasi tiba-tiba turun (dan kehilangan meningkat dengan cepat) - baik pelatihan dan metrik pengujian. Terkadang net menjadi gila dan mengembalikan output acak dan kadang-kadang (seperti pada tiga contoh terakhir yang diberikan) ia mulai mengembalikan output yang sama ke semua input .
Apakah Anda punya penjelasan untuk perilaku ini ? Pendapat apapun diterima. Silakan, lihat deskripsi tugas dan gambar di bawah ini.
Tugas: Dari suatu kata memprediksi vektor word2vec-nya
Masukan: Kami memiliki model word2vec sendiri (dinormalisasi) dan kami memberi makan jaringan dengan kata (huruf per huruf). Kami menulis kata-kata (lihat contoh di bawah).
Contoh: Kami memiliki kata football dan kami ingin memprediksi vektor word2vec-nya yang lebar 100 dimensi. Maka inputnya adalah $football$$$$$$$$$$
.
Tiga contoh perilaku:
LSTM lapisan tunggal
model = Sequential([
LSTM(1024, input_shape=encoder.shape, return_sequences=False),
Dense(w2v_size, activation="linear")
])
model.compile(optimizer='adam', loss="mse", metrics=["accuracy"])
GRU lapisan tunggal
model = Sequential([
GRU(1024, input_shape=encoder.shape, return_sequences=False),
Dense(w2v_size, activation="linear")
])
model.compile(optimizer='adam', loss="mse", metrics=["accuracy"])
LSTM lapisan ganda
model = Sequential([
LSTM(512, input_shape=encoder.shape, return_sequences=True),
TimeDistributed(Dense(512, activation="sigmoid")),
LSTM(512, return_sequences=False),
Dense(256, activation="tanh"),
Dense(w2v_size, activation="linear")
])
model.compile(optimizer='adam', loss="mse", metrics=["accuracy"])
Kami juga pernah mengalami perilaku semacam ini di proyek lain yang sebelumnya menggunakan arsitektur yang sama tetapi tujuan dan datanya berbeda. Dengan demikian alasannya tidak boleh disembunyikan dalam data atau dalam tujuan tertentu melainkan dalam arsitektur.
sumber
nan
.nan
parameter tidak akan menghasilkan kerugian non-nan. Dugaan saya adalah bahwa gradien Anda terjadi meledak, hal serupa terjadi pada saya di jaringan normal non-batch.nan
muncul di salah satu perhitungan dan kemudian default ke nilai lain yang menyebabkan jaringan menjadi gila. Tapi itu hanya tebakan liar. Terima kasih atas pendapat andaJawaban:
Berikut saran saya untuk menunjukkan masalah:
1) Lihatlah kurva pembelajaran pelatihan: Bagaimana kurva belajar di kereta api ditetapkan? Apakah ia mempelajari perangkat pelatihan? Jika tidak, pertama-tama kerjakan itu untuk memastikan Anda bisa pas pada set pelatihan.
2) Periksa data Anda untuk memastikan tidak ada NaN di dalamnya (pelatihan, validasi, tes)
3) Periksa gradien dan bobot untuk memastikan tidak ada NaN.
4) Kurangi tingkat pembelajaran saat Anda berlatih untuk memastikan itu bukan karena pembaruan besar mendadak yang terjebak dalam minima yang tajam.
5) Untuk memastikan semuanya benar, periksa prediksi jaringan Anda sehingga jaringan Anda tidak membuat beberapa prediksi konstan, atau berulang.
6) Periksa apakah data Anda dalam batch Anda seimbang sehubungan dengan semua kelas.
7) menormalkan data Anda menjadi nol varians unit rata-rata. Inisialisasi bobot juga. Ini akan membantu pelatihan.
sumber