TL; DR: Ukuran mini-batch yang terlalu besar biasanya menyebabkan akurasi yang lebih rendah !
Bagi yang berminat, inilah penjelasannya.
Ada dua pengertian kecepatan:
- Kecepatan komputasi
- Kecepatan konvergensi suatu algoritma
Kecepatan komputasi hanyalah kecepatan dalam melakukan perhitungan numerik dalam perangkat keras. Seperti yang Anda katakan, biasanya lebih tinggi dengan ukuran mini-batch yang lebih besar. Itu karena perpustakaan aljabar linier menggunakan vektorisasi untuk operasi vektor dan matriks untuk mempercepatnya, dengan mengorbankan penggunaan lebih banyak memori. Keuntungan bisa signifikan hingga titik tertentu. Dari pengalaman saya, ada satu titik setelah itu hanya ada sedikit keuntungan dalam kecepatan, jika ada. Intinya tergantung pada kumpulan data, perangkat keras, dan perpustakaan yang digunakan untuk perhitungan numerik (di bawah tenda).
Tapi, jangan lupa bahwa ada juga gagasan lain tentang kecepatan, yang memberitahu kita seberapa cepat algoritma kita bertemu.
Pertama, apa artinya bagi algoritma kami untuk bertemu? Nah, terserah pada kita untuk menentukan dan memutuskan kapan kita puas dengan akurasi, atau kesalahan, yang kita dapatkan, dihitung pada set validasi. Kita dapat mendefinisikannya terlebih dahulu dan menunggu algoritma sampai pada titik itu, atau kita dapat memantau proses pelatihan dan memutuskan untuk menghentikannya ketika kesalahan validasi mulai meningkat secara signifikan (model mulai menyesuaikan dengan set data). Kami benar-benar tidak harus menghentikannya segera, saat pertama kesalahan mulai meningkat, jika kami bekerja dengan batch mini, karena kami menggunakan Stochastic Gradient Descent, SGD. Dalam kasus Gradient Descent (batch penuh), setelah masing-masing zaman, algoritme akan menetap dalam minimum, baik itu lokal atau global. SGD tidak pernah benar-benar puas dalam minimum. Itu terus berosilasi di sekitarnya. Itu bisa berlangsung tanpa batas,
Sekarang, setelah semua teori itu, ada "tangkapan" yang perlu kita perhatikan. Saat menggunakan ukuran batch yang lebih kecil, perhitungan kesalahan memiliki lebih banyak noise daripada ketika kami menggunakan ukuran batch yang lebih besar. Orang akan berkata, yah, itu buruk, bukan? Masalahnya, noise itu dapat membantu algoritma melompat keluar dari minimum lokal yang buruk dan memiliki lebih banyak peluang untuk menemukan baik minimum lokal yang lebih baik, atau semoga minimum global.
Dengan demikian, jika kita dapat menemukan solusi yang lebih baik lebih cepat dengan menggunakan ukuran batch yang lebih kecil daripada yang lebih besar, hanya dengan bantuan suara "yang tidak diinginkan", kita dapat menyesuaikan antara total waktu yang dibutuhkan untuk algoritma kami untuk menemukan yang memuaskan solusi dan akurasi yang lebih tinggi.
Yang ingin saya katakan adalah, untuk akurasi yang diberikan (atau kesalahan), ukuran batch yang lebih kecil dapat menyebabkan waktu pelatihan total yang lebih pendek, tidak lagi, seperti yang diyakini banyak orang.
Atau, jika kita memutuskan untuk mempertahankan waktu pelatihan yang sama seperti sebelumnya, kita mungkin mendapatkan akurasi yang sedikit lebih tinggi dengan ukuran batch yang lebih kecil, dan kemungkinan besar kita akan melakukannya, terutama jika kita telah memilih tingkat pembelajaran kita dengan tepat.
Jika Anda punya waktu, periksa makalah ini:
Evaluasi sistematis kemajuan CNN di ImageNet
Terutama, periksa "3,7. Ukuran batch dan tingkat pembelajaran", dan Gambar 8. Anda akan melihat bahwa ukuran mini-batch besar menyebabkan akurasi yang lebih buruk , bahkan jika tuning tingkat belajar ke heuristik.
Secara umum, ukuran kumpulan 32 adalah titik awal yang baik, dan Anda juga harus mencoba dengan 64, 128, dan 256. Nilai-nilai lain (lebih rendah atau lebih tinggi) mungkin baik untuk beberapa set data, tetapi kisaran yang diberikan umumnya yang terbaik untuk mulai bereksperimen dengan. Meskipun, di bawah 32, itu mungkin terlalu lambat karena kecepatan komputasi secara signifikan lebih rendah, karena tidak mengeksploitasi vektorisasi sepenuhnya. Jika Anda mendapatkan kesalahan "kehabisan memori", Anda harus mencoba mengurangi ukuran mini-batch.
Jadi, ini bukan hanya tentang menggunakan ukuran mini-batch terbesar yang sesuai dengan memori.
Untuk menyimpulkan, dan menjawab pertanyaan Anda, ukuran mini-batch yang lebih kecil (tidak terlalu kecil) biasanya mengarah tidak hanya ke sejumlah kecil iterasi dari algoritma pelatihan, dari ukuran batch yang besar, tetapi juga ke akurasi keseluruhan yang lebih tinggi, yaitu, jaringan saraf yang berkinerja lebih baik, dalam jumlah waktu pelatihan yang sama, atau kurang.
Jangan lupa bahwa kebisingan yang lebih tinggi dapat membantunya melompat keluar dari minimum lokal yang buruk, daripada membiarkannya terjebak di dalamnya.