Keras, bagaimana cara peluruhan laju pembelajaran SGD bekerja?

23

Jika Anda melihat dokumentasi http://keras.io/optimizers/ ada parameter dalam SGD untuk pembusukan. Saya tahu ini mengurangi tingkat belajar dari waktu ke waktu. Namun, saya tidak tahu bagaimana cara kerjanya tepatnya. Apakah itu nilai yang dikalikan dengan tingkat pembelajaran seperti lr = lr * (1 - decay) apakah itu eksponensial? Juga bagaimana saya bisa melihat tingkat pembelajaran yang digunakan model saya? Ketika saya mencetak model.optimizer.lr.get_value()setelah menjalankan pas di beberapa zaman itu memberikan kembali tingkat belajar asli meskipun saya mengatur pembusukan.

Saya juga harus mengatur nesterov = Benar untuk menggunakan momentum atau hanya ada dua jenis momentum yang dapat saya gunakan. Misalnya apakah ada titik untuk melakukan inisgd = SGD(lr = 0.1, decay = 1e-6, momentum = 0.9, nesterov = False)

chasep255
sumber

Jawaban:

24

Dokumentasi yang Anda maksudkan menyertakan referensi ke sumber Python (cukup klik [Source]tautan di tempat yang sesuai), yang dapat digunakan untuk menjawab pertanyaan Anda. Inilah baris yang paling relevan, menunjukkan bagaimana decaymemodifikasi tingkat pembelajaran:

lr = self.lr * (1. / (1. + self.decay * self.iterations))

The nesterovpilihan tidak harus diatur ke True untuk momentum yang akan digunakan; itu menghasilkan momentum yang digunakan dengan cara yang berbeda, karena sekali lagi dapat dilihat dari sumbernya:

v = self.momentum * m - lr * g  # velocity

if self.nesterov:
    new_p = p + self.momentum * v - lr * g
else:
    new_p = p + v
Brent Kerby
sumber
1
dan self.iterationsmengacu pada jumlah langkah SGD individu, bukan jumlah zaman, rigt?
perbaikan guille