Keturunan gradien tidak cukup bekerja seperti yang Anda sarankan tetapi masalah serupa dapat terjadi.
Kami tidak menghitung kerugian rata-rata dari batch, kami menghitung gradien rata-rata dari fungsi kerugian. Gradien adalah turunan dari kerugian berkenaan dengan berat dan dalam jaringan saraf gradien untuk satu berat tergantung pada input dari contoh spesifik dan juga tergantung pada banyak bobot lainnya dalam model.
Jika model Anda memiliki 5 bobot dan Anda memiliki ukuran mini-batch 2 maka Anda mungkin mendapatkan ini:
Contoh 1. Kehilangan = 2,gradients=(1.5,−2.0,1.1,0.4,−0.9)
Contoh 2. Kehilangan = 3,gradients=(1.2,2.3,−1.1,−0.8,−0.7)
Rata-rata gradien dalam batch mini ini dihitung, yaitu(1.35,0.15,0,−0.2,−0.8)
Manfaat rata-rata beberapa contoh adalah bahwa variasi dalam gradien lebih rendah sehingga pembelajaran lebih konsisten dan kurang tergantung pada spesifikasi satu contoh. Perhatikan bagaimana gradien rata-rata untuk bobot ketiga adalah , bobot ini tidak akan mengubah pembaruan bobot ini, tetapi kemungkinan besar akan menjadi nol untuk contoh berikutnya yang dipilih yang dihitung dengan bobot berbeda.0
edit dalam menanggapi komentar:
Dalam contoh saya di atas rata-rata gradien dihitung. Untuk ukuran mini-batch mana kami menghitung kerugian untuk setiap contoh kami dan bertujuan untuk mendapatkan gradien rata-rata kerugian sehubungan dengan bobot .kLiwj
Cara saya menulis dalam contoh saya, saya rata-rata setiap gradien seperti:∂L∂wj=1k∑ki=1∂Li∂wj
Kode tutorial yang Anda tautkan dalam komentar menggunakan Tensorflow untuk meminimalkan kerugian rata-rata.
Tensorflow bertujuan untuk meminimalkan1k∑ki=1Li
Untuk meminimalkan ini, ia menghitung gradien dari kehilangan rata-rata sehubungan dengan setiap berat dan menggunakan gradien-turun untuk memperbarui bobot:
∂L∂wj=∂∂wj1k∑ki=1Li
Diferensiasi dapat dimasukkan ke dalam jumlah sehingga sama dengan ekspresi dari pendekatan dalam contoh saya.
∂∂wj1k∑ki=1Li=1k∑ki=1∂Li∂wj