Tensorflow memiliki contoh tutorial tentang mengklasifikasikan CIFAR-10 . Pada tutorial, rata-rata kehilangan entropi silang di seluruh batch diminimalkan.
def loss(logits, labels):
"""Add L2Loss to all the trainable variables.
Add summary for for "Loss" and "Loss/avg".
Args:
logits: Logits from inference().
labels: Labels from distorted_inputs or inputs(). 1-D tensor
of shape [batch_size]
Returns:
Loss tensor of type float.
"""
# Calculate the average cross entropy loss across the batch.
labels = tf.cast(labels, tf.int64)
cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(
logits, labels, name='cross_entropy_per_example')
cross_entropy_mean = tf.reduce_mean(cross_entropy, name='cross_entropy')
tf.add_to_collection('losses', cross_entropy_mean)
# The total loss is defined as the cross entropy loss plus all of the weight
# decay terms (L2 loss).
return tf.add_n(tf.get_collection('losses'), name='total_loss')
Lihat cifar10.py , baris 267.
Mengapa itu tidak meminimalkan jumlah lintas batch? Apakah itu membuat perbedaan? Saya tidak mengerti bagaimana ini akan mempengaruhi perhitungan backprop.
neural-networks
loss-functions
tensorflow
Bentrokan
sumber
sumber
Jawaban:
Seperti disebutkan oleh pkubik, biasanya ada istilah regularisasi untuk parameter yang tidak tergantung pada input, misalnya dalam tensorflow seperti
Dalam hal ini, rata-rata selama batch mini membantu menjaga rasio tetap antara
cross_entropy
kerugian danregularizer
kerugian saat ukuran batch diubah.Selain itu tingkat pembelajaran juga peka terhadap besarnya kerugian (gradien), sehingga untuk menormalkan hasil ukuran batch yang berbeda, mengambil rata-rata tampaknya merupakan pilihan yang lebih baik.
Memperbarui
Makalah ini oleh Facebook (Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour) menunjukkan bahwa, sebenarnya penskalaan tingkat pembelajaran menurut ukuran bets bekerja dengan sangat baik:
yang pada dasarnya sama dengan mengalikan gradien dengan k dan mempertahankan tingkat pembelajaran tidak berubah, jadi saya kira mengambil rata-rata tidak perlu.
sumber
Saya akan fokus pada bagian:
Dalam SGD kita akan memperbarui bobot menggunakan gradiennya dikalikan dengan laju pembelajaran dan kita dapat dengan jelas melihat bahwa kita dapat memilih parameter ini sedemikian rupa sehingga pembaruan bobot akhir sama dengan. Aturan pembaruan pertama: dan aturan pembaruan kedua (bayangkan bahwa ):λ W: = W+ λ1dL.SUM.dW λ1= λ2B W: = W+ λ1dL.A VGdW= W+ λ2BdL.SUM.dW
Temuan yang sangat baik dari dontloo mungkin menyarankan bahwa menggunakan jumlah mungkin pendekatan yang lebih tepat. Untuk membenarkan rata-rata yang tampaknya lebih populer saya akan menambahkan bahwa menggunakan penjumlahan mungkin dapat menyebabkan beberapa masalah dengan regularisasi berat badan. Menyetel faktor penskalaan untuk regulator untuk ukuran batch yang berbeda mungkin sama menyebalkannya seperti menyetel tingkat pembelajaran.
sumber