Bagaimana cara meningkatkan stabilitas jaringan saraf saya?

11

Saya menggunakan neuralnet di R untuk membangun NN dengan 14 input dan satu output. Saya membangun / melatih jaringan beberapa kali menggunakan data pelatihan input yang sama dan arsitektur / pengaturan jaringan yang sama.

Setelah setiap jaringan diproduksi, saya menggunakannya pada data uji yang berdiri sendiri untuk menghitung beberapa nilai prediksi. Saya menemukan ada variasi besar dalam setiap iterasi dari data yang diprediksi, meskipun semua input (baik data pelatihan dan data uji) tetap sama setiap kali saya membangun jaringan.

Saya mengerti bahwa akan ada perbedaan bobot yang dihasilkan dalam NN setiap kali dan bahwa tidak ada dua jaringan saraf yang identik, tetapi apa yang bisa saya coba untuk menghasilkan jaringan yang lebih konsisten di setiap kereta, mengingat data yang identik?

tfb
sumber
Bisakah Anda memberi kami sedikit lebih banyak detail pada algoritma dan arsitektur pembelajaran yang Anda (atau paket R) gunakan? Berapa banyak layer yang dimiliki NN?
Lucas
Hi Lucas, Saya menggunakan paket R neuralnet Link yang memiliki artikel yang jelas baik di sini Link . Saya menggunakan satu lapisan tersembunyi 8 neuron. Algoritma pembelajarannya adalah backpropagation tangguh dengan backtracking berat.
tfb

Jawaban:

8

Secara umum Anda akan mendapatkan stabilitas lebih dengan meningkatkan jumlah node tersembunyi dan menggunakan pembusukan berat badan yang sesuai (alias penalti ridge).

Secara khusus, saya akan merekomendasikan menggunakan caretpaket untuk mendapatkan pemahaman yang lebih baik dari keakuratan Anda (dan bahkan ketidakpastian dalam keakuratan Anda.) Juga di caret adalah avNNetyang membuat pelajar ensemble dari beberapa jaringan saraf untuk mengurangi efek dari benih awal. Saya pribadi belum melihat peningkatan besar menggunakan avNNettetapi bisa menjawab pertanyaan awal Anda.

Saya juga memastikan bahwa input Anda dikondisikan dengan benar. Sudahkah Anda menjadi orthogonalized dan kemudian menskalakannya? Caret juga dapat melakukan pra-pemrosesan ini untuk Anda melalui pcaNNetfungsinya.

Terakhir, Anda dapat mempertimbangkan untuk melemparkan di beberapa koneksi lapisan lewati. Anda perlu memastikan tidak ada outlier / titik leverage dalam data Anda untuk membuat miring koneksi tersebut.

Shea Parkes
sumber
Menariknya saya mengalihkan pelatihan jaring ke fungsi 'nnet' (tersedia dalam paket dengan nama yang sama) dan hasil pada set uji data menjadi jauh lebih stabil - mungkin ada hubungannya dengan perbedaan cara bobotnya. diinisialisasi antara dua paket?
tfb
Dalam nnetbobot awal semua diinisialisasi ke angka acak yang seragam antara -0,7 dan 0,7 jika saya ingat dengan benar. Dan Anda dapat mengontrol besarnya dalam parameter. Sejujurnya saya sudah beruntung dengan nnetpaket ini dan tidak pernah mencoba opsi lainnya. Semoga berhasil!
Shea Parkes
1

Saya belum pernah bekerja dengan R, jadi saya hanya bisa memberikan tips yang lebih umum.

Apakah Anda memeriksa apakah algoritme terkonvergensi? Satu penjelasan yang mungkin adalah bahwa set parameter yang berbeda ada di suatu tempat setengah jalan ke optimum yang sama.

Jika algoritme selalu menyatu tetapi ke optimal lokal yang berbeda, maka ada banyak heuristik yang dapat Anda coba hindari. Salah satu strategi sederhana ketika menggunakan stochastic gradient descent (SGD) adalah dengan menggunakan batch yang lebih kecil dan momentum yang lebih besar . Ukuran batch yang lebih kecil secara efektif memasukkan beberapa noise ke dalam pelatihan yang dapat membantu menghindari beberapa optima lokal. Strategi yang jauh lebih canggih adalah menginisialisasi bobot menggunakan autoencoder .

Lucas
sumber
Sama seperti fyi, selama dia menggunakan nnetdari basis R, ia menggunakan metode optimasi BFGS dari R's optim. Ini sebenarnya menghitung gradien untuk mendapatkan gambar dari permukaan. Tidak ada pemrosesan batch dan tidak ada parameter momentum tetap dalam implementasinya. Setelah mengatakan semua itu, dapat dengan mudah gagal untuk bertemu; terutama dengan sampah masuk.
Shea Parkes
@SheaParkes terima kasih atas komentar dan jawaban Shea. Saya sebenarnya menggunakan paket neuralnet - lihat komentar di atas. Ini menggunakan algoritma backpropagation tangguh dengan backtracking berat
tfb
Lalu aku minta maaf, Lucas, aku ketinggalan berita gembira itu. Saya senang Anda berhasil tfb.
Shea Parkes