Lensa ML

Epoch dan Batching

Langkah 1 dari 6: Apa Itu Epoch?

Satu putaran penuh melewati seluruh dataset

Dataset (16 sampel)12345678910111213141516
Lompat ke sampelSampel 1
Epoch
1
Sampel saat ini
1 / 16
Total dilihat
1

Epoch adalah satu putaran penuh melewati setiap sampel dalam dataset. Pemindai mengunjungi tiap sampel satu kali per epoch. Setelah 16 sampel semuanya terlihat, epoch 1 selesai dan epoch berikutnya dimulai.

Tekan Putar atau Satu Langkah, atau geser Lompat ke sampel, untuk menggerakkan pemindai melewati 16 sampel. Ada tiga istilah yang mudah tertukar. Epoch adalah satu putaran penuh atas data, batch adalah kelompok contoh untuk satu pembaruan, dan iterasi adalah pembaruan itu sendiri. ImageNet dengan 1,28 juta gambar training dalam batch berisi 256 menghasilkan sekitar 5.005 iterasi per epoch. Model bahasa besar sering dilatih sekitar satu epoch atas teksnya, jadi kemajuannya dihitung dari jumlah token yang sudah dilihat.

Langkah 2 dari 6: Stochastic Gradient Descent

Memperbarui weight per satu sampel

minSGD (batch=1)
Learning rate0.080
Langkah
0
Loss
15.813
Besar grad
23.412

Stochastic Gradient Descent memperbarui weight setelah setiap satu sampel. Estimasi gradient-nya penuh noise karena satu sampel tidak bisa mewakili seluruh dataset, sehingga lintasannya bergetar dan zig-zag: setiap pembaruan menarik ke arah yang sedikit berbeda.

Tekan Putar atau Satu Langkah, dan ubah Learning rate antara 0,001 dan 0,200. Loss di sini 0.1x² + x²y² + 0.5y², dimulai dari 15,8, dan setiap langkah menambahkan noise acak ke gradient sebenarnya untuk meniru pemakaian satu sampel. Noise ini tidak hilang di titik minimum. Dengan learning rate tetap, SGD terus memantul di dalam area yang ukurannya membesar seiring learning rate. Ini salah satu alasan learning rate diturunkan menjelang akhir training. Robbins dan Monro menganalisis pembaruan ber-noise semacam ini pada 1951.

Langkah 3 dari 6: Mini-batch Gradient Descent

Jalan tengah yang praktis antara SGD dan full-batch

minBatch = 4
Batch size4
Learning rate0.080
Langkah
0
Loss
15.813
Besar grad
23.412
Langkah / epoch
16

Batch size 4 merata-ratakan gradient dari 4 sampel per pembaruan. Lintasannya lebih halus daripada SGD, dan tetap memperbarui 16 kali per epoch. Jalan tengah inilah yang dipakai di sebagian besar training.

Geser slider Batch size melewati 1, 4, 16, dan 64 untuk dataset berisi 64 sampel. Noise yang ditambahkan di sini berskala 1.5/√B, dan jumlah pembaruan per epoch turun dari 64 ke 1. Di GPU, batch berisi 32 sering hanya sedikit lebih lama daripada satu contoh, karena batch itu melewati tiap layer sebagai satu perkalian matriks paralel. Kalau ukuran dataset bukan kelipatan batch size, batch terakhir lebih kecil. DataLoader milik PyTorch bisa membuangnya dengan drop_last=True.

Langkah 4 dari 6: Full-batch Gradient Descent

Memakai seluruh dataset untuk setiap pembaruan

Full-batchBatch = 16
Batch size16
Memori
Sedang
Konvergensi
Seimbang
Loss akhir
0.020

Gradient descent full-batch memakai setiap sampel untuk menghitung tiap gradient: lintasannya paling halus, tetapi paling lambat dan paling boros memori per langkah. Dibandingkan referensi full-batch yang pudar, batch yang lebih kecil lebih banyak noise-nya, tetapi lebih sering memperbarui weight per epoch. Pertukarannya: memori vs kecepatan.

Geser slider Batch size dan bandingkan lintasan berwarna dengan referensi full-batch yang pudar. Setiap lintasan di sini menempuh 80 langkah, dan loss akhirnya 0,152 pada batch size 1 dan sekitar 0,02 pada 4, 16, dan 64. Namun, perbandingan ini per langkah. Per epoch, batch size 64 membuat 1 pembaruan, sedangkan batch size 1 membuat 64. Metode full-batch cocok untuk dataset kecil yang muat di memori dan second-order optimizer seperti L-BFGS. Memori aktivasi membesar seiring batch size, dan biasanya inilah yang membatasinya.

Langkah 5 dari 6: Pentingnya Shuffling

Kenapa mengacak urutan data memperbaiki training

EpochLossShuffledUnshuffled
Lompat ke epochEpoch 1
Shuffled loss
2.200
Unshuffled loss
2.200
Epoch
1

Shuffling dataset di setiap epoch memberi setiap mini-batch campuran sampel yang beragam, dengan urutan baru tiap kali. Kurva loss-nya lebih halus dan konvergen ke nilai yang lebih rendah.

Beralih antara Shuffled dan Unshuffled, lalu tekan Putar atau geser Lompat ke epoch di sepanjang 50 epoch. Kurva ini hasil simulasi, dan pada epoch 50 loss shuffled adalah 0,204, dibandingkan 0,704 untuk unshuffled yang kebetulan sedang berada di lonjakan. Kegagalan klasiknya adalah data yang diurutkan berdasarkan label. Batch yang isinya kucing saja, lalu anjing saja, menarik weight bolak-balik antarkelas. Solusi standarnya adalah menarik permutasi baru di setiap epoch. Data deret waktu menjadi pengecualian: mengacak lintas waktu sebelum pembagian train-test membocorkan data masa depan ke training.

Langkah 6 dari 6: Menyatukan Semuanya

Epoch kali batch size sama dengan training

EpochLossEpoch
Epoch10
Batch size16
Total pembaruan
0
Sampel dilihat
0
Loss akhir
2.500

Training = 10 epoch x 4 langkah/epoch = 40 total pembaruan weight. Setiap epoch memproses 64 sampel dalam batch berisi 16. Selama 10 epoch, model melihat total 640 sampel. Cukup atau tidaknya bergantung pada tugasnya; validation loss adalah panduan yang biasa dipakai.

Atur Epoch dari 1 sampai 50 dan Batch size dari 1 sampai 64, lalu tekan Latih. Bawaannya, 10 epoch dengan batch berisi 16, menghasilkan 10 × 4 = 40 pembaruan dan 640 sampel dilihat. Di simulasi ini loss turun per pembaruan, jadi setelah 10 epoch, batch size 1 mencapai 0,045, sedangkan batch size 64 masih di 1,53. Keduanya sudah melihat 640 sampel yang sama. Fine-tuning model pretrained sering hanya butuh beberapa epoch; makalah BERT menyarankan 2 sampai 4.

Apa itu epoch dan batch size dalam machine learning?

Epoch adalah satu putaran penuh model melewati seluruh training dataset. Batch size adalah jumlah contoh yang diproses model sebelum setiap pembaruan weight. Jadi, satu epoch berisi pembaruan sebanyak ukuran dataset dibagi batch size, dibulatkan ke atas, dan setiap pembaruan disebut iterasi atau langkah.

Epoch dan batch size bersama-sama menentukan berapa banyak pembaruan yang terjadi saat training dan seberapa besar noise pada tiap pembaruan. Framework deep learning seperti PyTorch dan TensorFlow menyusun training sebagai perulangan atas epoch, dengan perulangan di dalamnya atas mini-batch yang sudah diacak. Pilihan kedua nilai ini memengaruhi waktu training, pemakaian memori GPU, dan kemampuan generalisasi model akhir.

Ide utama

  • Epoch adalah satu putaran penuh melewati data training.
  • Batch size adalah jumlah contoh yang dirata-ratakan untuk setiap pembaruan weight.
  • Jumlah pembaruan per epoch sama dengan ukuran dataset dibagi batch size, dibulatkan ke atas.
  • Batch lebih kecil memberi pembaruan yang lebih banyak dan lebih ber-noise; batch lebih besar memberi pembaruan yang lebih sedikit dan lebih halus.
  • Shuffling di setiap epoch menjaga mini-batch tetap mewakili seluruh dataset.
  • Jumlah epoch biasanya ditentukan dengan memantau validation loss.

Pertanyaan umum

Berapa epoch yang cukup?

Tidak ada angka pasti. Pantau validation loss setelah setiap epoch dan berhenti kalau tidak membaik selama beberapa epoch, sambil menyimpan checkpoint terbaik. Cara ini disebut early stopping, dan pengaturan patience menentukan berapa epoch tanpa perbaikan yang masih diizinkan.

Apakah batch size yang lebih besar membuat training lebih cepat?

Setiap epoch biasanya selesai lebih cepat, karena GPU memproses satu batch besar lebih efisien daripada banyak batch kecil. Namun, model juga mendapat lebih sedikit pembaruan per epoch, jadi mungkin butuh lebih banyak epoch, learning rate lebih besar, atau keduanya untuk mencapai loss yang sama. Melewati ukuran tertentu, menambah batch size tidak lagi mengurangi jumlah pembaruan yang dibutuhkan.

Apa itu gradient accumulation?

Gradient accumulation menjumlahkan gradient dari beberapa batch kecil dan menerapkan satu pembaruan setelah batch terakhir. Cara ini meniru efek batch besar ketika batch besar itu tidak muat di memori GPU. Training dengan 4 akumulasi batch berisi 8 berperilaku mirip training dengan batch berisi 32, walaupun statistik batch normalization tetap memakai batch yang lebih kecil.

Apakah data validasi dan data uji perlu diacak?

Tidak perlu. Evaluasi tidak memperbarui weight, jadi urutan contoh tidak mengubah metrik. Shuffling hanya berpengaruh pada training, karena urutan menentukan contoh mana yang berada dalam satu batch dan bagaimana urutan pembaruannya.

Penjelasan terkait

Referensi

  1. Goodfellow, Bengio & Courville (2016), "Deep Learning", section 8.1.3: Batch and Minibatch Algorithms
  2. Bottou (2010), "Large-Scale Machine Learning with Stochastic Gradient Descent", COMPSTAT
  3. Masters & Luschi (2018), "Revisiting Small Batch Training for Deep Neural Networks"
  4. Devlin et al. (2018), "BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding"

Terakhir diperbarui