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
code line 170
?Alasan untuk menggunakan batch mini adalah untuk memiliki jumlah contoh pelatihan yang baik sehingga kebisingan yang mungkin berkurang dengan rata-rata efeknya, tetapi juga itu bukan batch penuh yang bagi banyak set data membutuhkan banyak memori. Satu fakta penting adalah bahwa kesalahan yang Anda evaluasi selalu jauhantara output yang diprediksi dan output nyata: itu berarti itu tidak boleh negatif, jadi Anda tidak bisa, seperti yang Anda katakan, kesalahan 2 dan -2 yang membatalkan, tetapi itu malah akan menjadi kesalahan 4 Anda kemudian mengevaluasi gradien kesalahan sehubungan dengan semua bobot, sehingga Anda dapat menghitung perubahan bobot yang paling mengurangi itu. Setelah Anda melakukannya, Anda mengambil "langkah" ke arah itu, berdasarkan besarnya alpha tingkat pembelajaran Anda. (Ini adalah konsep dasar, saya tidak akan merinci tentang backpropagation untuk deep NN) Setelah menjalankan pelatihan ini pada dataset Anda untuk sejumlah zaman, Anda dapat mengharapkan jaringan Anda untuk menyatu jika langkah belajar Anda tidak terlalu besar untuk membuatnya berbeda. Anda masih dapat mencapai minimum lokal, ini dapat dihindari dengan menginisialisasi bobot yang berbeda, menggunakan pengoptimal yang berbeda, dan mencoba mengatur.
sumber