Mengapa ukuran batch mini lebih baik daripada satu "batch" tunggal dengan semua data pelatihan?

40

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?

Hendrik
sumber

Jawaban:

46

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.)

Pelatihan dengan minibatch besar tidak baik untuk kesehatan Anda. Lebih penting lagi, ini buruk untuk kesalahan pengujian Anda. Teman tidak membiarkan teman menggunakan minibatch yang lebih besar dari 32. Mari kita hadapi itu: satu - satunya orang telah beralih ke ukuran minibatch lebih besar dari satu sejak 2012 adalah karena GPU tidak efisien untuk ukuran batch lebih kecil dari 32. Itu alasan yang mengerikan. Itu hanya berarti perangkat keras kita payah.

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,

Sementara penggunaan mini-batch besar meningkatkan paralelisme komputasi yang tersedia, pelatihan batch kecil telah terbukti memberikan peningkatan kinerja generalisasi ...

Kinerja terbaik telah diperoleh secara konsisten untuk ukuran mini-batch antara m = 2 dan m = 32, yang kontras dengan pekerjaan terbaru yang menganjurkan penggunaan ukuran mini-batch dalam ribuan.

horaceT
sumber
2
Mengapa mini-batch gradient descent lebih cenderung menghindari minima lokal yang buruk daripada gradient batch batch? Apakah Anda punya sesuatu untuk mendukung klaim itu?
Martin Thoma
@MartinThoma Lihat Teorema 6 dalam [2], sebuah makalah terbaru tentang JMLR.
horaceT
2
Ini kertas juga di arXiv . Juga, saya tidak melihat bagaimana ini mendukung klaim Anda. Mereka bahkan tidak pernah menyebutkan turunan gradien mini-batch. Saya tidak mengerti teorema itu (mis. Apa itu "g (X)"? Di mana mereka memperkenalkan notasi itu? Di kelas statistik, g (X) = E (X) ... tapi itu tidak masuk akal di sini) . Apa itu ? - Pernyataan teorema ini tampaknya menunjukkan bahwa tidak ada minimum minimum lokal. Tapi ini akan berlaku untuk SGD dan keturunan gradient batch serta gradient keturunan mini-batch, kan? ϕ(w,X)
Martin Thoma
2
@ MartinThoma Mengingat bahwa ada satu minimum global untuk dataset yang kami berikan, jalur pasti ke minimum global itu tergantung pada hal-hal yang berbeda untuk setiap metode GD. Untuk batch, satu-satunya aspek stokastik adalah bobot saat inisialisasi. Jalur gradien akan sama jika Anda melatih NN lagi dengan bobot dan dataset awal yang sama. Untuk mini-batch dan SGD, jalur akan memiliki beberapa aspek stokastik untuknya di antara setiap langkah dari sampling stokastik poin data untuk pelatihan di setiap langkah. Ini memungkinkan bets mini dan SGD untuk keluar dari optima lokal jika sedang dalam perjalanan.
Wesley
8

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.

Peter
sumber
3

Kecuali saya salah, ukuran bets adalah jumlah instance pelatihan yang dilihat oleh model selama iterasi pelatihan

Benar (meskipun saya akan menyebutnya "langkah pembaruan berat badan")

dan zaman adalah giliran penuh ketika masing-masing contoh pelatihan telah dilihat oleh model

Benar

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?

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.

Martin Thoma
sumber
Ini benar-benar bukan masalah memori terbatas. Selalu memungkinkan untuk menghitung gradien di atas dataset Anda dalam sejumlah batch dengan parameter model tetap (secara fungsional setara dengan menghitung gradien dalam batch raksasa tunggal). Secara praktis ini lebih tentang sifat generalisasi yang disebabkan oleh stochasticity / kebisingan dari SGD / MBGD dan fakta bahwa diperlukan lebih sedikit periode melalui dataset Anda untuk mencapai konvergensi. Memutakhirkan params model dalam satu zaman mengarah ke param menengah yang lebih baik yang membuat perhitungan gradien lebih lanjut dalam zaman lebih informatif.
Madison
1

Selain jawaban lain, saya pikir ada baiknya menunjukkan bahwa ada dua kuantitas yang berbeda tetapi sering digabungkan:

  1. Jumlah input yang digunakan untuk menghitung gradien parameter di setiap langkah.

Seperti yang telah ditunjukkan orang lain, gradien sehubungan dengan minibatch adalah perkiraan gradien sebenarnya. Semakin besar minibatch, semakin baik perkiraannya.

  1. Jumlah input yang dikumpulkan ke dalam array dan dihitung "pada saat yang sama"

Pertukaran di sini adalah murni tentang kinerja (memori / siklus).

Jumlah ini biasanya sama, yaitu ukuran minibatch, tetapi pada prinsipnya mereka dapat dipisahkan.

zenna
sumber