Cara melawan kekurangan dalam jaring saraf yang dalam

50

Ketika saya mulai dengan jaringan saraf tiruan (NN) saya pikir saya harus berjuang overfitting sebagai masalah utama. Tetapi dalam prakteknya saya bahkan tidak bisa mendapatkan NN saya untuk melewati penghalang tingkat kesalahan 20%. Saya bahkan tidak bisa mengalahkan skor saya di hutan acak!

Saya mencari saran yang sangat umum atau tidak umum tentang apa yang harus dilakukan untuk membuat NN mulai menangkap tren dalam data.

Untuk mengimplementasikan NN, saya menggunakan Theano Stacked Auto Encoder dengan kode dari tutorial yang sangat bagus (tingkat kesalahan kurang dari 5%) untuk mengklasifikasikan dataset MNIST. Ini adalah multilayer perceptron, dengan lapisan softmax di atas dengan masing-masing disembunyikan kemudian dilatih sebelumnya sebagai autoencoder (dijelaskan sepenuhnya pada tutorial , bab 8). Ada ~ 50 fitur input dan ~ 10 kelas output. NN memiliki neuron sigmoid dan semua data dinormalisasi menjadi [0,1]. Saya mencoba banyak konfigurasi berbeda: jumlah lapisan tersembunyi dan neuron di dalamnya (100-> 100-> 100, 60-> 60-> 60, 60-> 30-> 15, dll.), Pembelajaran yang berbeda dan pra-pelatihan harga, dll.

Dan hal terbaik yang bisa saya dapatkan adalah tingkat kesalahan 20% pada set validasi dan tingkat kesalahan 40% pada set tes.

Di sisi lain, ketika saya mencoba menggunakan Random Forest (dari scikit-learn) saya dengan mudah mendapatkan tingkat kesalahan 12% pada set validasi dan 25% (!) Pada set tes.

Bagaimana mungkin NN dalam saya dengan pra-pelatihan berperilaku begitu buruk? Apa yang harus saya coba?

izhak
sumber

Jawaban:

34

Masalah dengan jaringan yang dalam adalah bahwa mereka memiliki banyak hiperparameter untuk disesuaikan dan ruang solusi yang sangat kecil. Jadi, menemukan yang baik lebih seperti seni daripada tugas rekayasa. Saya akan mulai dengan contoh kerja dari tutorial dan bermain-main dengan parameternya untuk melihat bagaimana hasil berubah - ini memberikan intuisi yang baik (meskipun bukan penjelasan formal) tentang dependensi antara parameter dan hasil (keduanya - final dan menengah).

Saya juga menemukan makalah berikut sangat berguna:

Keduanya menggambarkan RBM, tetapi berisi beberapa wawasan tentang jaringan yang dalam secara umum. Sebagai contoh, salah satu poin utama adalah bahwa jaringan perlu debugged layer-wise - jika layer sebelumnya tidak memberikan representasi fitur yang baik, layer lebih lanjut hampir tidak memiliki peluang untuk memperbaikinya.

teman
sumber
14

Sementara jawaban teman memberikan beberapa petunjuk yang bagus untuk mempelajari lebih lanjut tentang bagaimana jaringan saraf dapat (sangat) sulit diatur dengan benar, saya pikir mungkin akan membantu untuk membuat daftar beberapa teknik spesifik yang saat ini digunakan dalam arsitektur klasifikasi berkinerja terbaik dalam jaringan saraf. literatur.

Aktivasi linier yang diperbaiki

f(z)=(1+ez)1f(z)=max(0,z)

Aktivasi relu memiliki dua keuntungan besar:

  • outputnya adalah benar nol (bukan hanya nilai kecil mendekati nol) untuk danz0
  • turunannya konstan, baik 0 untuk atau 1 untuk .z0z>0

Suatu jaringan unit relu pada dasarnya bertindak seperti ensembel dari banyak jaringan linear secara eksponensial, karena unit yang menerima input pada dasarnya "off" (outputnya 0), sedangkan unit yang menerima input runtuh ke dalam linear tunggal model untuk input itu. Turunan konstan juga penting karena jaringan yang dalam dengan aktivasi relu cenderung menghindari masalah gradien yang hilang dan dapat dilatih tanpa pretraining searah lapis.z0z>0

Lihat "Jaringan Saraf Penyearah Jarang Jauh" oleh Glorot, Bordes, & Bengio ( http://jmlr.csail.mit.edu/proceedings/papers/v15/glorot11a/glorot11a.pdf ) untuk makalah yang bagus tentang topik ini.

Keluar

Banyak kelompok penelitian dalam beberapa tahun terakhir telah mengadvokasi penggunaan "putus sekolah" dalam jaringan pengklasifikasi untuk menghindari overtraining. (Lihat misalnya "Dropout: Cara sederhana untuk mencegah overfitting jaringan saraf" oleh Srivastava, Hinton, Krizhevsky, Sutskever, & Salakhutdinov http://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf ) In dropout, selama pelatihan, beberapa proporsi konstan unit-unit dalam lapisan yang diberikan secara acak diatur ke 0 untuk setiap input yang diproses jaringan. Ini memaksa unit yang tidak diatur ke 0 untuk "menebus" untuk unit "hilang". Dropout tampaknya menjadi regulator yang sangat efektif untuk model jaringan saraf dalam tugas klasifikasi. Lihat artikel blog tentang ini di http: // fastml.

lmjohns3
sumber
7
Tetapi pertanyaannya adalah tentang kurang fit, tidak overfitting.
Valentas
8

Anda mungkin tertarik membaca makalah berikut oleh para peneliti dari Microsoft Research:

Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun: Pembelajaran Residual Dalam untuk Pengenalan Gambar pada arxiv, 2015.

Mereka memiliki masalah yang sama seperti Anda:

Ketika jaringan yang lebih dalam dapat mulai melakukan konvergensi, masalah degradasi telah terungkap: dengan meningkatnya kedalaman jaringan, akurasi menjadi jenuh (yang mungkin tidak mengejutkan) dan kemudian menurun dengan cepat. Tanpa diduga, degradasi seperti itu tidak disebabkan oleh overfitting, dan menambahkan lebih banyak lapisan ke dalam model yang sesuai menyebabkan kesalahan pelatihan yang lebih tinggi , seperti yang dilaporkan dalam [11, 42] dan diverifikasi secara menyeluruh oleh percobaan kami.

Untuk mengatasi masalah tersebut, mereka menggunakan arsitektur lewati. Dengan itu, mereka melatih jaringan yang sangat dalam (1202 lapisan) dan mencapai hasil terbaik dalam tantangan ILSVRC 2015.

Martin Thoma
sumber
Terima kasih untuk ans Anda, Anda mengambil tentang masalah gradient menghilang, jika dalam kasus validasi acc lebih tinggi dari pelatihan acc lalu apa yang harus dilakukan ?? Ini dapat terjadi pada sejumlah kecil data dalam set val tetapi kadang tidak tergantung pada set val. Saya bertanya apakah ada alasan lain di mana val acc lebih tinggi dari pelatihan acc ??
Sudip Das