Berapa ukuran batch dalam jaringan saraf?

176

Saya menggunakan Python Keras packageuntuk jaringan saraf. Ini tautannya . Apakah batch_sizesama dengan jumlah sampel uji? Dari Wikipedia, kami memiliki informasi ini :

Namun, dalam kasus lain, mengevaluasi jumlah-gradien mungkin memerlukan evaluasi mahal dari gradien dari semua fungsi puncak. Ketika set pelatihan sangat besar dan tidak ada rumus sederhana, mengevaluasi jumlah gradien menjadi sangat mahal, karena mengevaluasi gradien memerlukan evaluasi semua gradien fungsi fungsi puncak. Untuk menghemat biaya komputasi pada setiap iterasi, sampel keturunan gradien stokastik bagian dari fungsi puncak pada setiap langkah. Ini sangat efektif dalam kasus masalah pembelajaran mesin skala besar.

Informasi di atas menggambarkan data uji? Apakah ini sama dengan batch_sizekeras (Jumlah sampel per pembaruan gradien)?

pengguna2991243
sumber
3
Baik untuk melihat class.coursera.org/ml-005/lecture/preview course, terutama untuk Anda minggu 4-6 + 10. Wikipedia mungkin bukan sumber yang begitu berharga untuk mempelajari jaringan saraf.
404pio

Jawaban:

230

The ukuran bets mendefinisikan jumlah sampel yang akan disebarkan melalui jaringan.

Sebagai contoh, katakanlah Anda memiliki 1050 sampel pelatihan dan Anda ingin mengatur yang batch_sizesetara dengan 100. Algoritma mengambil 100 sampel pertama (dari 1 hingga 100) dari dataset pelatihan dan melatih jaringan. Selanjutnya, dibutuhkan 100 sampel kedua (dari 101 ke 200) dan melatih jaringan lagi. Kami dapat terus melakukan prosedur ini sampai kami telah menyebarkan semua sampel melalui jaringan. Masalah mungkin terjadi dengan set sampel terakhir. Dalam contoh kami, kami telah menggunakan 1050 yang tidak habis dibagi 100 tanpa sisa. Solusi paling sederhana adalah hanya untuk mendapatkan 50 sampel terakhir dan melatih jaringan.

Keuntungan menggunakan ukuran batch <jumlah semua sampel:

  • Ini membutuhkan lebih sedikit memori. Karena Anda melatih jaringan menggunakan sampel lebih sedikit, prosedur pelatihan keseluruhan membutuhkan lebih sedikit memori. Itu sangat penting jika Anda tidak dapat memasukkan seluruh dataset ke dalam memori mesin Anda.

  • Biasanya jaringan berlatih lebih cepat dengan mini-batch. Itu karena kami memperbarui bobot setelah setiap propagasi. Dalam contoh kami, kami telah menyebarkan 11 kumpulan (10 di antaranya memiliki 100 sampel dan 1 memiliki 50 sampel) dan setelah masing-masing kami memperbarui parameter jaringan kami. Jika kami menggunakan semua sampel selama propagasi, kami hanya akan membuat 1 pembaruan untuk parameter jaringan.

Kerugian menggunakan ukuran batch <jumlah semua sampel:

  • Semakin kecil batch, estimasi gradien akan semakin tidak akurat. Pada gambar di bawah ini, Anda dapat melihat bahwa arah gradien mini-batch (warna hijau) berfluktuasi jauh lebih banyak dibandingkan dengan arah gradien batch penuh (warna biru).

Petunjuk arah untuk pengaturan batch yang berbeda

Stochastic hanyalah sebuah mini-batch dengan batch_sizesama dengan 1. Dalam hal ini, gradien mengubah arahnya bahkan lebih sering daripada gradien mini-batch.

itdxer
sumber
3
Tidak, saya tidak. Ini adalah teknik populer dalam jaringan saraf dan terminologi ini dapat Anda lihat di berbagai perpustakaan, buku, dan artikel. Apakah Anda ingin memeriksa kesalahan data pengujian di setiap zaman atau hanya memverifikasi model setelah pelatihan?
itdxer
1
Jaringan juga konvergen lebih cepat karena jumlah pembaruan cukup tinggi. Menyiapkan ukuran batch mini adalah jenis seni, terlalu kecil dan Anda berisiko membuat pembelajaran Anda terlalu stokastik, lebih cepat tetapi akan menyatu dengan model yang tidak dapat diandalkan, terlalu besar dan tidak akan muat ke dalam memori dan masih membutuhkan waktu lama.
Ramalho
2
Biasanya ketika orang mengatakan pembelajaran online yang mereka maksud batch_size=1. Gagasan di balik pembelajaran online adalah Anda memperbarui model Anda segera setelah Anda melihat contohnya. Dengan ukuran batch yang lebih besar, ini berarti bahwa Anda pertama-tama melihat-lihat beberapa sampel sebelum melakukan pembaruan. Dalam ukuran RNN batch dapat memiliki arti yang berbeda. Biasanya, itu biasa untuk membagi urutan pelatihan menjadi jendela dengan ukuran tetap (seperti 10 kata). Dalam hal ini termasuk 100 jendela ini selama pelatihan berarti Anda memilikinya batch_size=100.
itdxer
1
@Oleg Melnikov, jika batch terakhir Anda memiliki ukuran yang jauh lebih kecil (katakanlah itu menjadi 1 bukannya 50) maka estimasi untuk gradien akan kurang akurat dan dapat mengacaukan sedikit bobot Anda. Pada gambar di atas, bayangkan Anda membuat 10 pembaruan dengan mini batch 100 (garis hijau) dan satu dengan mini batch 1 (garis merah). Yang berarti bahwa dalam zaman berikutnya beberapa iterasi pertama dapat mulai memecahkan masalah dengan pembaruan batch 1 terakhir dari zaman sebelumnya.
itdxer
1
@OlegMelnikov Buku pembelajaran MIT dalam memiliki penjelasan yang baik terkait dengan masalah ini (bab 8.1.3): deeplearningbook.org/contents/optimization.html
itdxer
153

Dalam terminologi jaringan saraf:

  • satu zaman = satu umpan maju dan satu umpan mundur dari semua contoh pelatihan
  • ukuran kumpulan = jumlah contoh pelatihan dalam satu gerakan maju / mundur. Semakin tinggi ukuran batch, semakin banyak ruang memori yang Anda butuhkan.
  • jumlah iterasi = jumlah lintasan, setiap lintasan menggunakan jumlah contoh [ukuran batch]. Untuk menjadi jelas, satu pass = satu pass maju + satu pass mundur (kami tidak menghitung forward pass dan backward pass sebagai dua pass yang berbeda).

Contoh: jika Anda memiliki 1000 contoh pelatihan, dan ukuran batch Anda adalah 500, maka dibutuhkan 2 iterasi untuk menyelesaikan 1 zaman.

FYI: Ukuran batch tradeoff vs jumlah iterasi untuk melatih jaringan saraf

Franck Dernoncourt
sumber
Tetapi apa perbedaan antara menggunakan nomor [ukuran batch] contoh dan melatih jaringan pada setiap contoh dan melanjutkan dengan contoh nomor [ukuran batch] berikutnya. Karena Anda melewati satu contoh melalui jaringan dan menerapkan SGD dan mengambil contoh berikut dan seterusnya tidak akan ada bedanya jika ukuran bets adalah 10 atau 1000 atau 100000. Setelah [ukuran bets] sejumlah contoh dilakukan contoh berikutnya dari batch berikutnya akan mengikuti. Itu hanya membuat perbedaan jika nomor [ukuran batch] contoh akan melewati [jumlah iterasi] kali jaringan dan kemudian melanjutkan dengan contoh [ukuran batch] berikutnya.
Erhard Dinhobl
Perbedaan penting adalah bahwa langkah pembelajaran (satu langkah) diterapkan satu kali untuk setiap batch, sementara Anda harus menggilir semua batch untuk membuat satu zaman. Jadi perbedaannya juga algoritmik tidak hanya dalam memori: batch yang lebih besar berarti bahwa Anda rata-rata gradien lebih banyak sampel.
meduz
Apa perbedaan antara zaman dan iterasi?
Goldname
2
@Goldname 1 zaman mencakup semua contoh pelatihan sedangkan 1 iterasi hanya mencakup jumlah pelatihan contoh [ukuran batch].
Franck Dernoncourt
3

Saat menyelesaikan dengan CPU Masalah Optimasi, Anda menerapkan Algoritma pada beberapa Data Input. Di setiap iterasi ini, Anda biasanya memperbarui Metrik masalah Anda melakukan beberapa Perhitungan pada Data. Sekarang ketika ukuran data Anda besar, mungkin perlu banyak waktu untuk menyelesaikan setiap iterasi, dan mungkin menghabiskan banyak sumber daya. Jadi terkadang Anda memilih untuk menerapkan perhitungan berulang ini pada Bagian Data untuk menghemat waktu dan sumber daya komputasi. Bagian ini adalah batch_size dan prosesnya disebut (dalam Neural Network Lingo) pemrosesan data batch. Ketika Anda menerapkan perhitungan Anda pada semua data Anda, maka Anda melakukan pemrosesan data online. Saya kira terminologi berasal dari tahun 60an, dan bahkan sebelumnya. Apakah ada yang ingat. file DOS kelelawar? Namun tentu saja konsep yang menjelma berarti utas atau sebagian data yang akan digunakan.

pebox11
sumber
2

Dokumentasi untuk Kerastentang ukuran batch dapat ditemukan di bawah fitfungsi dalam Model (API fungsional) Halaman

batch_size: Integer atau Tidak Ada. Jumlah sampel per pembaruan gradien. Jika tidak ditentukan, batch_size akan default ke 32.

Jika Anda memiliki dataset kecil, akan lebih baik untuk membuat ukuran batch sama dengan ukuran data pelatihan. Pertama coba dengan batch kecil kemudian tingkatkan untuk menghemat waktu. Seperti disebutkan oleh itdxer , ada tradeoff antara akurasi dan kecepatan.

otayeby
sumber