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?
Jawaban:
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
caret
paket untuk mendapatkan pemahaman yang lebih baik dari keakuratan Anda (dan bahkan ketidakpastian dalam keakuratan Anda.) Juga di caret adalahavNNet
yang membuat pelajar ensemble dari beberapa jaringan saraf untuk mengurangi efek dari benih awal. Saya pribadi belum melihat peningkatan besar menggunakanavNNet
tetapi 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
pcaNNet
fungsinya.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.
sumber
nnet
bobot 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 dengannnet
paket ini dan tidak pernah mencoba opsi lainnya. Semoga berhasil!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 .
sumber
nnet
dari basis R, ia menggunakan metode optimasi BFGS dari R'soptim
. 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.