Saya sering membaca bahwa dalam kasus model Deep Learning, praktik yang biasa dilakukan adalah menerapkan batch mini (umumnya yang kecil, 32/64) pada beberapa periode pelatihan. Saya tidak dapat memahami alasan di balik ini.
Kecuali saya salah, ukuran bets adalah jumlah instance pelatihan yang dilihat oleh model selama iterasi pelatihan; dan zaman adalah giliran penuh ketika masing-masing contoh pelatihan telah dilihat oleh model. Jika demikian, saya tidak dapat melihat keuntungan dari iterate pada subset yang hampir tidak signifikan dari contoh pelatihan beberapa kali berbeda dengan menerapkan "max batch" dengan memaparkan semua contoh pelatihan yang tersedia di setiap giliran ke model (dengan asumsi, tentu saja, cukup Ingatan). Apa keuntungan dari pendekatan ini?
sumber
Jawaban:
Keuntungan utama menggunakan minibatch sebagai lawan dari dataset lengkap kembali ke ide dasar keturunan gradien stokastik 1 .
Dalam keturunan gradien batch, Anda menghitung gradien di seluruh dataset, rata-rata atas sejumlah besar informasi yang berpotensi. Butuh banyak memori untuk melakukan itu. Tetapi cacat yang sebenarnya adalah batch lintasan gradien tanah Anda di tempat yang buruk (saddle point).
Di SGD murni, di sisi lain, Anda memperbarui parameter Anda dengan menambahkan (tanda minus) gradien yang dihitung pada satu instance dataset. Karena didasarkan pada satu titik data acak, ini sangat bising dan mungkin melenceng jauh dari gradien batch. Namun, kebisingan adalah persis apa yang Anda inginkan dalam optimasi non-cembung, karena membantu Anda melarikan diri dari titik pelana atau minimum lokal (Teorema 6 dalam [2]). Kerugiannya adalah itu sangat tidak efisien dan Anda perlu mengulang seluruh dataset berkali-kali untuk menemukan solusi yang baik.
Metodologi minibatch adalah kompromi yang menyuntikkan kebisingan yang cukup untuk setiap pembaruan gradien, sambil mencapai konvergensi cepat relatif.
1 Bottou, L. (2010). Pembelajaran mesin skala besar dengan penurunan gradien stokastik. Dalam Prosiding COMPSTAT'2010 (hlm. 177-186). Physica-Verlag HD.
[2] Ge, R., Huang, F., Jin, C., & Yuan, Y. (2015, Juni). Melarikan Diri Dari Poin Sadel - Gradien Stochastic Online untuk Dekomposisi Tensor. Dalam COLT (hlm. 797-842).
EDIT:
Saya baru saja melihat komentar ini di facebook Yann LeCun, yang memberikan perspektif baru tentang pertanyaan ini (maaf tidak tahu bagaimana menautkan ke fb.)
Dia mengutip makalah ini yang baru saja diposting di arXiv beberapa hari yang lalu (Apr 2018), yang layak dibaca,
Dominic Masters, Carlo Luschi, Mengunjungi Kembali Pelatihan Batch Kecil untuk Deep Neural Networks , arXiv: 1804.07612v1
Dari abstrak,
sumber
Memori sebenarnya bukan alasan untuk melakukan ini, karena Anda hanya bisa mengakumulasi gradien saat Anda mengulangi dataset, dan menerapkannya di akhir, tetapi masih dalam SGD Anda menerapkannya di setiap langkah.
Alasan SGD digunakan secara luas adalah:
1) Efisiensi. Biasanya, terutama di awal pelatihan, gradien parameter untuk subset data yang berbeda cenderung mengarah ke arah yang sama. Jadi gradien yang dievaluasi pada 1/100 dari data akan mengarah kira-kira dalam arah umum yang sama seperti pada dataset lengkap, tetapi hanya membutuhkan 1/100 perhitungan. Karena konvergensi pada jaringan yang dalam sangat nonlinear biasanya membutuhkan ribuan atau jutaan iterasi tidak peduli seberapa baik gradien Anda, masuk akal untuk melakukan banyak pembaruan berdasarkan perkiraan murah dari gradien daripada beberapa pembaruan berdasarkan yang bagus.
2) Pengoptimalan: Pembaruan bising dapat memungkinkan Anda keluar dari optima lokal yang buruk (meskipun saya tidak memiliki sumber yang menunjukkan bahwa ini penting dalam praktiknya).
3) Generalisasi. Tampaknya (lihat Zhang et al: Teori Pembelajaran Jauh III: Properti Generalisasi SGD ) bahwa SGD sebenarnya membantu generalisasi dengan menemukan minima "flat" pada set pelatihan, yang lebih mungkin juga menjadi minimal pada set tes. Secara intuitif, kita dapat menganggap SGD sebagai semacam Bagging - dengan menghitung parameter berdasarkan banyak minibatch data, kami memperkuat aturan yang menggeneralisasi lintas minibatch, dan membatalkan aturan yang tidak, sehingga membuat kami kurang rentan terhadap overfitting ke perlengkapan latihan.
sumber
Benar (meskipun saya akan menyebutnya "langkah pembaruan berat badan")
Benar
Yah, cukup banyak itu. Anda biasanya tidak memiliki cukup memori. Katakanlah kita berbicara tentang klasifikasi gambar. ImageNet adalah dataset yang sangat populer. Untuk beberapa saat, VGG-16D adalah salah satu mod.els paling populer. Perlu hitung 15 245 800 mengapung (di peta fitur) untuk satu gambar 224x224. Ini berarti sekitar 61MB per gambar. Ini hanya batas bawah yang kasar pada berapa banyak memori yang Anda butuhkan selama pelatihan untuk setiap gambar. ImageNet berisi beberapa ribu (saya pikir sekitar 1,2 juta?) Gambar. Meskipun Anda mungkin memiliki memori utama sebanyak itu, Anda tentu saja tidak memiliki memori GPU sebanyak itu. Saya telah melihat GPU mempercepat sekitar 21x. Jadi, Anda pasti ingin menggunakan GPU.
Juga: Waktu untuk satu mini-batch jauh lebih rendah. Jadi pertanyaannya adalah: Apakah Anda lebih suka melakukan n langkah pembaruan dengan mini-batch per jam pada GPU atau m langkah pembaruan dengan batch tanpa GPU, di mana n >> m.
sumber
Selain jawaban lain, saya pikir ada baiknya menunjukkan bahwa ada dua kuantitas yang berbeda tetapi sering digabungkan:
Seperti yang telah ditunjukkan orang lain, gradien sehubungan dengan minibatch adalah perkiraan gradien sebenarnya. Semakin besar minibatch, semakin baik perkiraannya.
Pertukaran di sini adalah murni tentang kinerja (memori / siklus).
Jumlah ini biasanya sama, yaitu ukuran minibatch, tetapi pada prinsipnya mereka dapat dipisahkan.
sumber