Berapa banyak data yang Anda butuhkan untuk jaringan saraf convolutional?

14

Jika saya memiliki jaringan saraf convolutional (CNN), yang memiliki sekitar 1.000.000 parameter, berapa banyak data pelatihan yang diperlukan (anggap saya sedang melakukan penurunan gradien stokastik)? Apakah ada aturan praktis?

Catatan tambahan: Ketika saya melakukan penurunan gradien stokastik (mis., 64 tambalan untuk 1 iterasi), setelah ~ 10.000 iterasi, akurasi classifier dapat mencapai nilai stabil kasar). Apakah ini berarti tidak banyak data yang dibutuhkan? Seperti data 100k-1000k.

RockTheStar
sumber

Jawaban:

11

Untuk mengetahui apakah lebih banyak data akan membantu, Anda harus membandingkan kinerja algoritma Anda pada data pelatihan (yaitu data yang digunakan untuk melatih jaringan saraf) dengan kinerjanya pada data pengujian (yaitu data yang dilakukan jaringan saraf tidak "melihat" dalam pelatihan).

Hal yang baik untuk diperiksa adalah kesalahan (atau akurasi) pada setiap set sebagai fungsi dari nomor iterasi. Ada dua kemungkinan untuk hasil ini:

1) Kesalahan pelatihan konvergen ke nilai yang jauh lebih rendah daripada kesalahan pengujian. Jika demikian, kinerja algoritme Anda hampir pasti akan meningkat dengan lebih banyak data.

2) Kesalahan pelatihan dan kesalahan pengujian menyatu dengan nilai yang sama (dengan kesalahan pelatihan masih mungkin sedikit lebih rendah dari kesalahan pengujian). Dalam hal ini, data tambahan dengan sendirinya tidak akan membantu algoritma Anda. Jika Anda membutuhkan kinerja yang lebih baik daripada yang Anda dapatkan saat ini, Anda harus mencoba menambahkan lebih banyak neuron ke lapisan tersembunyi Anda, atau menambahkan lebih banyak lapisan tersembunyi. Jika cukup banyak unit tersembunyi ditambahkan, Anda akan menemukan kesalahan pengujian Anda akan menjadi jauh lebih tinggi daripada kesalahan pelatihan, dan lebih banyak data akan membantu pada saat itu.

Untuk pengenalan yang lebih menyeluruh dan bermanfaat tentang cara membuat keputusan ini, saya sangat merekomendasikan kursus Andrew Ng's Coursera , khususnya pelajaran "Mengevaluasi algoritma pembelajaran" dan "Bias vs. Varians".

Kevin Lyons
sumber
3

Jawaban naifnya adalah selalu dibutuhkan lebih banyak data. Iterasi pada dataset yang sama mengatakan untuk lebih banyak zaman membantu Anda untuk "memperbaiki" hasilnya tetapi Anda tidak meningkatkan hasilnya sebanyak memiliki lebih banyak data.

Sebagai contoh saya sedang melatih sebuah convnet untuk melakukan pemodelan kalimat dan untuk menguji apakah saya memerlukan lebih banyak data saya mencoba untuk membagi dataset pelatihan saya dalam subset yang lebih kecil dan mencoba untuk mengujinya.

Dengan menggunakan seluruh dataset dan pelatihan untuk 10 iterasi, saya memperoleh akurasi 93% pada tolok ukur saya dan itu terus membaik. Alih-alih ketika saya mengulangi pada 10% dari dataset untuk 100 iterasi saya memperoleh 85%.

Jadi selalu mencoba untuk memiliki lebih banyak data tetapi jika Anda tidak bisa, melakukan lebih banyak zaman bisa menjadi pertukaran yang bagus tetapi pada akhirnya model Anda akan lebih baik jika Anda memberi makan jaringan dengan data baru.

dbonadiman
sumber
1
Terima kasih atas jawaban anda! Ya, saya tahu semakin banyak data yang Anda miliki, semakin baik Anda, tetapi berapa banyak data yang Anda butuhkan adalah apa yang saya tidak yakin. Karena tidak selalu Anda dapat memiliki lebih banyak data. Misalnya, saya perlu merekrut seseorang untuk membuat anotasi dan pelabelan, saya ingin mencari tahu kapan saya harus berhenti ...
RockTheStar
apakah itu berarti jika saya memiliki dataset kecil model saya tidak akan bertemu?
samsamara
3

Saya kira yang paling penting adalah bahwa sampel dalam data Anda tersebar dengan baik, karena tidak peduli berapa banyak data yang Anda miliki, lebih banyak data akan selalu lebih baik. Lagipula, jika Anda mencoba untuk belajar membedakan antara gambar kucing dan anjing, Anda tidak dapat mengharapkan model Anda bekerja dengan baik jika Anda hanya memberinya gambar kucing.

Seperti yang disarankan dalam jawaban oleh Kevin L , masuk akal untuk mempertimbangkan perbedaan antara kesalahan pelatihan dan kesalahan pengujian. Jika data pengujian Anda tidak bergantung pada data pelatihan Anda, ini memberikan indikasi seberapa baik model Anda digeneralisasikan ke data yang tidak tersedia. Sesuatu yang ingin saya tambahkan adalah fakta bahwa perbedaan besar antara kesalahan pelatihan dan pengujian hanya memberi tahu Anda bahwa model Anda tidak menggeneralisasi dengan baik, yaitu Anda terlalu cocok dengan data pelatihan. Lebih banyak data mungkin akan membantu, karena sekarang jaringan juga perlu memodelkan titik data tambahan, sehingga tidak bisa memakai terlalu banyak. Namun, mungkin lebih bermanfaat untuk mengubah model Anda sedemikian rupa sehingga lebih umum. Bab ini dari buku yang bagus menjelaskan jenis-jenis regularisasi apa yang ada dan bagaimana mereka dapat diterapkan dalam jaringan untuk mendapatkan generalisasi yang lebih baik.

Jika Anda mencari ukuran yang lebih kuantitatif, saya baru-baru ini menemukan pertanyaan ini pada quora. Ini tentang auto-encoder, tapi saya kira itu juga harus berlaku untuk contoh Anda. Saya tidak tahu apakah ini benar (tolong beri tahu saya), tetapi saya akan beralasan bahwa misalnya untuk MNIST, orang dapat berargumen bahwa Anda mencoba mengurangi gambar dengan maksimum 28 * 28 * 8 * 10 000 = 62 720 000 bit entropi ke sepuluh kelas dalam satu pengkodean panas dengan 10 * 10 * 10 000 = 1 000 000 bit entropi. Karena kita hanya tertarik pada 1 000 000 bit entropi pada output, kita dapat mengatakan bahwa dengan 1 000 000 parameter, setiap parameter mewakili satu bit, yaitu 1e-4 bit per sampel. Ini berarti Anda akan membutuhkan lebih banyak data. Atau Anda memiliki terlalu banyak parameter, karena misalnya dengan 100 parameter, Anda memiliki 10.000 bit per parameter dan karenanya 1 bit per sampel. Namun,

Tuan Tsjolder
sumber
Terima kasih atas saran Anda. Saya pikir saat ini orang membuat strategi yang berbeda untuk mengurangi jumlah data untuk tugas tertentu.
RockTheStar
0

Metode lain yang biasanya digunakan untuk mengetahui apakah jaringan Anda telah mempelajari cukup banyak fitur adalah memvisualisasikan filter awal. Jika jaringan terlatih dengan baik, ia akan menampilkan filter yang halus. Filter berisik biasanya menunjukkan bahwa jaringan belum cukup terlatih atau sudah overfit. Untuk info lebih lanjut baca halaman ini .

suhail
sumber