Saya mengerti bahwa penurunan gradien stokastik dapat digunakan untuk mengoptimalkan jaringan saraf menggunakan backpropagation dengan memperbarui setiap iterasi dengan sampel yang berbeda dari dataset pelatihan. Seberapa besar ukuran batch?
Saya mengerti bahwa penurunan gradien stokastik dapat digunakan untuk mengoptimalkan jaringan saraf menggunakan backpropagation dengan memperbarui setiap iterasi dengan sampel yang berbeda dari dataset pelatihan. Seberapa besar ukuran batch?
Jawaban:
"Ukuran sampel" Anda berbicara tentang disebut sebagai ukuran bets , . Parameter ukuran batch hanyalah salah satu dari hiper-parameter yang akan Anda tala ketika Anda melatih jaringan saraf dengan mini-batch Stochastic Gradient Descent (SGD) dan bergantung pada data. Metode paling dasar dari pencarian hyper-parameter adalah dengan melakukan pencarian grid pada laju pembelajaran dan ukuran batch untuk menemukan pasangan yang membuat jaringan berkumpul.
Untuk memahami apa ukuran bets seharusnya, penting untuk melihat hubungan antara penurunan gradien bets, SGD online, dan SGD mini-batch. Berikut adalah rumus umum untuk langkah pembaruan berat dalam mini-batch SGD, yang merupakan generalisasi dari ketiga jenis. [ 2 ]
Perhatikan bahwa dengan 1, fungsi kerugian bukan lagi variabel acak dan bukan merupakan perkiraan stokastik.
SGD konvergen lebih cepat daripada penurunan gradien "batch" normal karena memperbarui bobot setelah melihat subset yang dipilih secara acak dari set pelatihan. Biarkan menjadi set pelatihan kami dan biarkan . Ukuran batch hanyalah kardinalitas :.
Turunan gradien batch memperbarui bobot menggunakan gradien dari seluruh dataset ; sedangkan SGD memperbarui bobot menggunakan rata-rata gradien untuk mini-batch . (Menggunakan rata-rata sebagai lawan dari jumlah mencegah algoritma dari mengambil langkah-langkah yang terlalu besar jika dataset sangat besar. Jika tidak, Anda perlu menyesuaikan tingkat belajar Anda berdasarkan ukuran dataset.) Nilai yang diharapkan dari ini perkiraan stokastik gradien yang digunakan dalam SGD sama dengan gradien deterministik yang digunakan dalam keturunan gradien batch. .
Setiap kali kami mengambil sampel dan memperbarui bobot kami itu disebut mini-batch . Setiap kali kita menjalankan seluruh dataset, itu disebut zaman .
Katakanlah kita memiliki beberapa vektor data , vektor bobot awal yang parameter jaringan saraf kita, , dan fungsi kehilangan yang kita coba untuk meminimalkan . Jika kita memiliki contoh pelatihan dan ukuran batch , maka kita dapat membagi contoh pelatihan tersebut menjadi C-batch mini:
Untuk kesederhanaan kita dapat mengasumsikan bahwa T dibagi habis oleh B. Meskipun, ketika ini tidak terjadi, karena sering tidak, berat yang tepat harus ditugaskan untuk setiap mini-batch sebagai fungsi dari ukurannya.
Algoritma iteratif untuk SGD dengan epochs diberikan di bawah ini:
Catatan: dalam kehidupan nyata kita membaca contoh data pelatihan ini dari memori dan, karena pra-pengambilan cache dan trik memori lainnya yang dilakukan oleh komputer Anda, algoritme Anda akan berjalan lebih cepat jika akses memori disatukan , yaitu ketika Anda membaca memori agar dan tidak melompat-lompat secara acak. Jadi, sebagian besar implementasi SGD mengocok dataset dan kemudian memuat contoh ke dalam memori dalam urutan yang akan dibaca.
Parameter utama untuk vanilla (tanpa momentum) SGD yang dijelaskan di atas adalah:
Saya suka menganggap epsilon sebagai fungsi dari hitungan zaman hingga tingkat pembelajaran. Fungsi ini disebut jadwal tingkat pembelajaran .
Jika Anda ingin memiliki tingkat pembelajaran tetap, cukup tentukan epsilon sebagai fungsi konstan.
Ukuran kumpulan menentukan berapa banyak contoh yang Anda lihat sebelum melakukan pembaruan berat. Semakin rendah, semakin ribut sinyal latihan, semakin tinggi, semakin lama waktu yang dibutuhkan untuk menghitung gradien untuk setiap langkah.
Kutipan & Bacaan Lebih Lanjut:
For simplicity we can assume that D is evenly divisible by B
. Bukankah maksud Anda T harus dibagi habis oleh B?
B is typically chosen between 1 and a few hundreds, e.g. B = 32 is a good default value, with values above 10 taking advantage of the speed-up of matrix-matrix products over matrix-vector products.
(dari makalah Bengio 2012)