Cara mengatur ukuran mini-batch dalam SGD dalam keras

10

Saya baru mengenal Keras dan butuh bantuan Anda.

Saya melatih jaringan syaraf dalam Keras dan fungsi kerugian saya adalah Perbedaan Kuadrat antara output dan nilai target.

Saya ingin mengoptimalkan ini dengan menggunakan Gradient Descent. Setelah melalui beberapa tautan di internet, saya mengetahui bahwa ada 3 jenis gradient descents yang digunakan secara umum:

  1. Satu sampel gradien keturunan : Di sini, gradien dihitung dari hanya satu sampel setiap iterasi -> Gradien dapat berisik.
  2. Batch gradient descent : Di sini, gradien adalah rata-rata dari gradien yang dihitung dari SEMUA sampel dalam dataset -> Gradient lebih umum, tetapi sulit diterapkan untuk kumpulan data besar.
  3. Mini-batch gradient descent : Mirip dengan Batch GD. Alih-alih menggunakan seluruh dataset, hanya beberapa sampel (ditentukan oleh batch_size) yang digunakan untuk menghitung gradien di setiap iterasi -> Tidak terlalu berisik dan juga dapat ditelusur secara komputasi -> Terbaik dari kedua dunia.

Pertanyaan:

  1. Saya ingin melakukan Mini-batch Gradient Descent di Keras. Bagaimana saya bisa melakukan ini? Haruskah saya menggunakan pengoptimal SGD?
  2. Jika SGD akan digunakan, bagaimana cara mengatur batch_size? Tampaknya tidak ada parameter untuk fungsi SGD untuk mengatur batch_size.

    optimizer = keras.optimizers.SGD(lr=0.01, decay=0.1, momentum=0.1, nesterov=False)
  3. Ada parameter batch_size di model.fit () di Keras.

    history = model.fit(x, y, nb_epoch=num_epochs, batch_size=20, verbose=0, validation_split=0.1)

    Apakah ini sama dengan ukuran batch dalam Mini-batch Gradient Descent? Jika tidak, apa artinya tepatnya melatih sejumlah input? Apakah ini berarti 'batch_size' no. dari thread berjalan secara paralel dan memperbarui bobot model secara paralel?

Jika ini membantu, inilah cuplikan kode python yang telah saya tulis sampai sekarang .

Iceflame007
sumber

Jawaban:

8

Ya kamu benar. Dalam Keras batch_sizemengacu pada ukuran batch dalam Mini-batch Gradient Descent. Jika Anda ingin menjalankan Batch Gradient Descent, Anda harus mengatur batch_sizejumlah sampel pelatihan. Kode Anda terlihat sempurna kecuali bahwa saya tidak mengerti mengapa Anda menyimpan model.fitfungsi ke riwayat objek.

Ernest S Kirubakaran
sumber
3
Dia menyimpan dalam objek sejarah karena dalam keras, fungsi "fit" tidak hanya mengembalikan model yang terlatih, tetapi objek History yang menyimpan model yang terlatih, sejarah pelatihan dan banyak hal lainnya. Ada beberapa contoh dalam contoh keras seperti itu.
Ygor de Mello Canalli
1

Mengesampingkan pertimbangan teoretis, mengingat dataset kehidupan nyata dan ukuran jaringan saraf modern yang tipikal, biasanya perlu waktu lama untuk berlatih dalam batch ukuran satu, dan Anda tidak akan memiliki cukup RAM dan / atau memori GPU untuk melatih seluruh dataset sekaligus. Jadi biasanya bukan pertanyaan "apakah" mini-batch harus digunakan, tetapi "apa ukuran" batch yang harus Anda gunakan. The batch_sizeargumen adalah jumlah observasi untuk melatih di dalam satu langkah, ukuran biasanya lebih kecil bekerja lebih baik karena memiliki efek regularizing. Selain itu, sering orang menggunakan pengoptimal yang lebih rumit (misalnya Adam, RMSprop) dan trik regularisasi lainnya, yang membuat hubungan antara kinerja model, ukuran batch, kecepatan belajar, dan waktu komputasi lebih rumit.

Tim
sumber
Terima kasih telah menjelaskan ini. Tetapi bagaimana saya melakukan normalisasi data dengan cara ini. Saya tahu saya bisa menormalkan semua data pelatihan dan pengujian, tetapi ini akan membuat mini-batch dimasukkan ke dalam proses optimisasi menjadi lebih normal.
Mr.Robot
@ Mr.Robot mengapa Anda menganggap bahwa setiap batch perlu dinormalisasi secara independen?
Tim
Saya sebelumnya membaca posting yang mengatakan bahwa data pelatihan dan pengujian harus ditangani secara terpisah (mis. Lakukan split uji kereta terlebih dahulu, lalu proses secara individual). Saya pikir ini juga akan berlaku ketika mengoptimalkan menggunakan mini-batch. Saya curiga ini mungkin baik untuk konvergensi?
Mr.Robot
@Robot reductio ad absurdum : dengan mini-batch ukuran 1, apakah Anda akan lulus sebagai data Anda hanya 0? Anda dapat mengajukannya sebagai pertanyaan terpisah jika diinginkan.
Tim
Terima kasih telah menunjukkan ini! Sekarang saya sekarang masalah dengan alasan saya.
Mr.Robot