Katakanlah saya telah melakukan transfer pembelajaran pada jaringan pra-terlatih untuk mengenali 10 objek. Bagaimana cara menambahkan item ke-11 yang dapat diklasifikasi jaringan tanpa kehilangan semua 10 kategori yang sudah saya latih atau informasi dari model pra-latih yang asli? Seorang teman memberi tahu saya bahwa penelitian aktif sedang berlangsung di bidang ini, tetapi saya tidak dapat menemukan makalah yang relevan atau nama yang dapat digunakan untuk mencari?
Terima kasih.
neural-network
deep-learning
nnrales
sumber
sumber
Jawaban:
Jika ini hanya kasus satu kali, Anda bisa melatih kembali jaringan saraf. Jika Anda sering harus menambahkan kelas baru, maka ini adalah ide yang buruk. Apa yang ingin Anda lakukan dalam kasus seperti itu disebut pengambilan gambar berbasis konten (CBIR), atau hanya pencarian gambar atau pencarian visual. Saya akan menjelaskan kedua kasus dalam jawaban saya di bawah ini.
Kasing satu kali
Jika ini hanya terjadi sekali - Anda lupa kelas 11, atau pelanggan Anda berubah pikiran - tetapi itu tidak akan terjadi lagi , maka Anda dapat dengan mudah simpul output ke 11 ke lapisan terakhir. Inisialisasi bobot ke node ini secara acak, tetapi gunakan bobot yang sudah Anda miliki untuk output lainnya. Lalu, latih saja seperti biasa. Mungkin bermanfaat untuk memperbaiki beberapa bobot, yaitu jangan melatih ini.
Kasus ekstrem adalah hanya melatih bobot baru, dan membiarkan semua yang lain tetap. Tetapi saya tidak yakin apakah ini akan bekerja dengan baik - mungkin patut dicoba.
Pengambilan gambar berbasis konten
Pertimbangkan contoh berikut: Anda bekerja untuk toko CD, yang ingin pelanggan mereka dapat mengambil gambar sampul album, dan aplikasi menunjukkan kepada mereka CD yang mereka pindai di toko online mereka. Dalam hal ini, Anda harus melatih kembali jaringan untuk setiap CD baru yang mereka miliki di toko. Itu mungkin 5 CD baru setiap hari, jadi latih ulang jaringan dengan cara itu tidak cocok.
Solusinya adalah melatih jaringan, yang memetakan gambar ke dalam ruang fitur. Setiap gambar akan diwakili oleh deskriptor, yaitu vektor 256 dimensi. Anda dapat "mengklasifikasikan" gambar dengan menghitung deskriptor ini, dan membandingkannya dengan database deskriptor Anda (yaitu deskriptor semua CD yang Anda miliki di toko Anda). Deskriptor terdekat dalam basis data menang.
Bagaimana Anda melatih jaringan saraf untuk mempelajari vektor deskripsi seperti itu? Itu adalah bidang penelitian aktif. Anda dapat menemukan karya terbaru dengan mencari kata kunci seperti "pengambilan gambar" atau "pembelajaran metrik".
Saat ini, orang biasanya mengambil jaringan pra-terlatih, misalnya VGG-16, memotong lapisan FC, dan menggunakan konvolusional akhir sebagai vektor deskriptor Anda. Anda dapat lebih lanjut melatih jaringan ini misalnya dengan menggunakan jaringan siam dengan kehilangan triplet.
sumber
Topologi jaringan Anda mungkin terlihat berbeda, tetapi pada akhirnya, jaringan pra-terlatih Anda memiliki lapisan, yang menangani pengenalan 10 kelas asli. Trik termudah (dan berfungsi) untuk memperkenalkan kelas 11, 12 .. nth, adalah menggunakan semua layer sebelum yang terakhir diberikan dan menambahkan layer tambahan (dalam model baru, atau sebagai paralel) yang juga akan duduk di atas semua kecuali lapisan terakhir, akan terlihat sama dengan lapisan 10class (yang paling mungkin matmul lapisan padat dan matriks bentuk
[len(dense layer), 10]
dengan bias opsional).Lapisan baru Anda akan menjadi lapisan matmul dengan bentuk
[len(dense layer), len(new classes)]
.Tanpa akses ke data pelatihan asli, Anda akan memiliki dua opsi:
Meskipun, mengingat Anda memiliki akses ke data pelatihan asli, Anda dapat dengan mudah menambahkan kelas baru ke jaringan asli dan melatihnya kembali untuk mendukung 11 kelas di luar kotak.
sumber
Ini bisa dilakukan dengan mudah.
Pertama membangun model dengan 10 kelas tersebut dan menyimpan model sebagai base_model.
Memuat base_model dan juga mendefinisikan model baru bernama new_model as-
Kemudian tambahkan layer dari base_model ke new_model -
Sekarang buat lapisan-lapisan model baru tidak dapat dilatih karena Anda tidak ingin model Anda dilatih lagi.
Sekarang saat Anda mentransfer pembelajaran, ketika Anda menghapus lapisan terakhir, model semacam lupa tentang 10 kelas sehingga kita harus mempertahankan bobot base_model ke new_model -
Sekarang tambahkan layer padat di akhir dan kami hanya akan melatih layer padat ini dalam contoh ini.
Sekarang latih modelnya dan saya harap ini memberikan hasil yang tepat untuk semua 11 kelas.
Selamat Belajar.
sumber