O Tensorflow tem um tutorial de exemplo sobre a classificação do CIFAR-10 . No tutorial, a perda média de entropia cruzada no lote é minimizada.
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')
Veja cifar10.py , linha 267.
Por que não minimiza a soma do lote? Isso faz diferença? Não entendo como isso afetaria o cálculo do backprop.
Respostas:
Como mencionado por pkubik, geralmente há um termo de regularização para os parâmetros que não dependem da entrada, por exemplo, no tensorflow, é como
Nesse caso, a média do mini lote ajuda a manter uma proporção fixa entre a
cross_entropy
perda e aregularizer
perda enquanto o tamanho do lote é alterado.Além disso, a taxa de aprendizado também é sensível à magnitude da perda (gradiente); portanto, para normalizar o resultado de diferentes tamanhos de lote, tomar a média parece uma opção melhor.
Atualizar
Este artigo do Facebook (Minibatch grande e preciso SGD: treinando o ImageNet em 1 hora) mostra que, na verdade, escalar a taxa de aprendizado de acordo com o tamanho do lote funciona muito bem:
que é essencialmente o mesmo que multiplicar o gradiente por k e manter a taxa de aprendizado inalterada, então acho que não é necessário fazer a média.
fonte
Vou me concentrar na parte:
Antes de tudo, você provavelmente já percebeu que a única diferença entre os valores de perda resultantes é que a perda média é reduzida em relação à soma pelo fator1B LSUM=B⋅LAVG B dLSUMdx=BdLAVGdx dLdx=limΔ→0L(x+Δ)−L(x)Δ d(c⋅L)dx=limΔ→0c⋅L(x+Δ)−c⋅L(x)Δ d(c⋅L)dx=c⋅limΔ→0L(x+Δ)−L(x)Δ=c⋅dLdx
No SGD, atualizaríamos os pesos usando seu gradiente multiplicado pela taxa de aprendizado e podemos ver claramente que podemos escolher esse parâmetro de forma que as atualizações finais dos pesos sejam iguais. A primeira regra de atualização: e a segunda regra de atualização (imagine que ):λ W:=W+λ1dLSUMdW λ1=λ2B W:=W+λ1dLAVGdW=W+λ2BdLSUMdW
A excelente descoberta de dontloo pode sugerir que o uso da soma pode ser uma abordagem um pouco mais apropriada. Para justificar a média que parece ser mais popular, eu acrescentaria que o uso da soma provavelmente pode causar alguns problemas com a regularização de peso. Ajustar o fator de escala dos regularizadores para diferentes tamanhos de lote pode ser tão irritante quanto ajustar a taxa de aprendizado.
fonte