Apakah mungkin untuk melatih jaringan saraf secara bertahap?
23
Saya ingin melatih jaringan saraf di mana kelas output tidak (semua) didefinisikan dari awal. Semakin banyak kelas akan diperkenalkan nanti berdasarkan data yang masuk. Ini berarti bahwa, setiap kali saya memperkenalkan kelas baru, saya perlu melatih ulang NN.
Bagaimana saya bisa melatih NN secara bertahap, yaitu, tanpa melupakan informasi yang diperoleh sebelumnya selama fase pelatihan sebelumnya?
Saya ingin menambahkan apa yang telah dikatakan bahwa pertanyaan Anda menyentuh gagasan penting dalam pembelajaran mesin yang disebut transfer learning . Dalam praktiknya, sangat sedikit orang yang melatih seluruh jaringan konvolusional dari awal (dengan inisialisasi acak), karena memakan waktu dan relatif jarang memiliki dataset dengan ukuran yang cukup.
ConvNets Modern membutuhkan waktu 2-3 minggu untuk berlatih melintasi banyak GPU di ImageNet. Jadi sudah umum untuk melihat orang-orang merilis pos pemeriksaan ConvNet akhir mereka untuk kepentingan orang lain yang dapat menggunakan jaringan untuk fine-tuning. Misalnya, perpustakaan Caffe memiliki a Kebun Binatang Model di mana orang berbagi bobot jaringan mereka.
Ketika Anda membutuhkan ConvNet untuk pengenalan gambar, apa pun domain aplikasi Anda, Anda harus mempertimbangkan untuk mengambil jaringan yang ada, misalnya VGGNet adalah pilihan umum.
Ada beberapa hal yang perlu diingat ketika melakukan transfer belajar :
Kendala dari model pretrained. Perhatikan bahwa jika Anda ingin menggunakan jaringan pretrained, Anda mungkin sedikit dibatasi dalam hal arsitektur yang dapat Anda gunakan untuk dataset baru Anda. Misalnya, Anda tidak dapat secara sewenang-wenang mengeluarkan lapisan Conv dari jaringan yang dipra-prain sebelumnya. Namun, beberapa perubahan bersifat langsung: karena berbagi parameter, Anda dapat dengan mudah menjalankan jaringan yang dipra-prain pada gambar dengan ukuran spasial yang berbeda. Hal ini jelas terlihat dalam kasus lapisan Conv / Pool karena fungsi maju mereka tidak tergantung pada ukuran spasial volume input (selama langkah “pas”).
Tingkat pembelajaran. Merupakan hal yang biasa untuk menggunakan tingkat pembelajaran yang lebih kecil untuk bobot ConvNet yang sedang disesuaikan, dibandingkan dengan bobot (yang diinisialisasi secara acak) untuk pengklasifikasi linier baru yang menghitung nilai kelas dari dataset baru Anda. Ini karena kami berharap bobot ConvNet relatif baik, jadi kami tidak ingin mengubah mereka terlalu cepat dan terlalu banyak (terutama ketika Classifier Linear baru di atas mereka sedang dilatih dari inisialisasi acak).
Transfer belajar bukan satu-satunya cara melakukan pembelajaran inkremental.
nbro
7
Inilah salah satu cara Anda bisa melakukan itu.
Setelah melatih jaringan Anda, Anda dapat menyimpan bobotnya ke disk. Ini memungkinkan Anda untuk memuat bobot ini ketika data baru tersedia dan melanjutkan pelatihan cukup banyak dari tempat pelatihan terakhir Anda tinggalkan. Namun, karena data baru ini mungkin datang dengan kelas tambahan, Anda sekarang melakukan pra-pelatihan atau fine-tuning pada jaringan dengan bobot yang sebelumnya disimpan. Satu-satunya hal yang harus Anda lakukan, pada titik ini, adalah membuat lapisan terakhir mengakomodasi kelas-kelas baru yang sekarang telah diperkenalkan dengan kedatangan dataset baru Anda, yang paling penting termasuk kelas tambahan (misalnya, jika lapisan terakhir Anda awalnya memiliki 10 kelas, dan sekarang Anda telah menemukan 2 kelas lagi, sebagai bagian dari pra-pelatihan / fine-tuning Anda, Anda menggantinya dengan 12 kelas). Singkatnya, ulangi lingkaran ini:
jika Anda hanya mengakomodasi kelas-kelas baru di lapisan terakhir (kelas pelatihan + kelas baru) model tidak dapat cocok karena kami ingin berlatih dengan kelas-kelas baru (hanya) dan model mengharapkan array dengan bentuk (pelatihan + kelas baru) kelas,).
Inilah salah satu cara Anda bisa melakukan itu.
Setelah melatih jaringan Anda, Anda dapat menyimpan bobotnya ke disk. Ini memungkinkan Anda untuk memuat bobot ini ketika data baru tersedia dan melanjutkan pelatihan cukup banyak dari tempat pelatihan terakhir Anda tinggalkan. Namun, karena data baru ini mungkin datang dengan kelas tambahan, Anda sekarang melakukan pra-pelatihan atau fine-tuning pada jaringan dengan bobot yang sebelumnya disimpan. Satu-satunya hal yang harus Anda lakukan, pada titik ini, adalah membuat lapisan terakhir mengakomodasi kelas-kelas baru yang sekarang telah diperkenalkan dengan kedatangan dataset baru Anda, yang paling penting termasuk kelas tambahan (misalnya, jika lapisan terakhir Anda awalnya memiliki 10 kelas, dan sekarang Anda telah menemukan 2 kelas lagi, sebagai bagian dari pra-pelatihan / fine-tuning Anda, Anda menggantinya dengan 12 kelas). Singkatnya, ulangi lingkaran ini:
sumber