¿Es una práctica común minimizar la pérdida media sobre los lotes en lugar de la suma?

15

Tensorflow tiene un tutorial de ejemplo sobre la clasificación de CIFAR-10 . En el tutorial, la pérdida de entropía cruzada promedio en todo el lote se minimiza.

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')

Ver cifar10.py , línea 267.

¿Por qué no minimiza la suma en todo el lote? ¿Hace alguna diferencia? No entiendo cómo esto afectaría el cálculo de backprop.

Choque
fuente
No está exactamente relacionado con la suma / promedio, pero la elección de pérdida es una elección de diseño de aplicación. Por ejemplo, si eres bueno en tener razón en promedio, optimiza el promedio. Si su aplicación es sensible al peor de los casos (por ejemplo, un accidente automovilístico), debe optimizar el valor máximo.
Alex Kreimer
Ver también: stats.stackexchange.com/questions/358786/…
Sycorax dice Reinstate Monica

Respuestas:

15

Como mencionó pkubik, generalmente hay un término de regularización para los parámetros que no depende de la entrada, por ejemplo, en tensorflow es como

# Loss function using L2 Regularization
regularizer = tf.nn.l2_loss(weights)
loss = tf.reduce_mean(loss + beta * regularizer)

En este caso, promediar el mini lote ayuda a mantener una relación fija entre la cross_entropypérdida y la regularizerpérdida mientras se cambia el tamaño del lote.

Además, la tasa de aprendizaje también es sensible a la magnitud de la pérdida (gradiente), por lo que para normalizar el resultado de diferentes tamaños de lote, tomar el promedio parece una mejor opción.


Actualizar

Este documento de Facebook (Precisión, SGD de minibatch grande: capacitación de ImageNet en 1 hora) muestra que, en realidad, escalar la tasa de aprendizaje de acuerdo con el tamaño del lote funciona bastante bien:

Regla de escala lineal: cuando el tamaño del minibatch se multiplica por k, multiplique la tasa de aprendizaje por k.

que es esencialmente lo mismo que multiplicar el gradiente por k y mantener la tasa de aprendizaje sin cambios, por lo que supongo que no es necesario tomar el promedio.

dontloo
fuente
8

Me enfocaré en la parte:

No entiendo cómo esto afectaría el cálculo de backprop.

En primer lugar, probablemente ya haya notado que la única diferencia entre los valores de pérdida resultantes es que la pérdida promedio se reduce con respecto a la suma por el factor , es decir, que , donde es el tamaño del lote. Podemos demostrar fácilmente que la misma relación es verdadera para una derivada de cualquier variable wrt. las funciones de pérdida ( ) observando la definición de derivada: Ahora, nos gustaría multiplicar el valor de la función y ver cómo afecta a la derivada: 1BLSUM=BLAVGBdLSUMdx=BdLAVGdx

dLdx=limΔ0L(x+Δ)L(x)Δ
d(cL)dx=limΔ0cL(x+Δ)cL(x)Δ
Cuando factorizamos la constante y la movemos antes del límite, deberíamos ver que tenemos la definición de derivada original multiplicada por una constante, que es exactamente lo que queríamos demostrar:
d(cL)dx=climΔ0L(x+Δ)L(x)Δ=cdLdx

En SGD actualizaríamos los pesos usando su gradiente multiplicado por la tasa de aprendizaje y podemos ver claramente que podemos elegir este parámetro de tal manera que las actualizaciones de pesos finales sean iguales. La primera regla de actualización: y la segunda regla de actualización (imagine que ): λ

W:=W+λ1dLSUMdW
λ1=λ2B
W:=W+λ1dLAVGdW=W+λ2BdLSUMdW


El excelente hallazgo de dontloo puede sugerir que usar la suma podría ser un enfoque un poco más apropiado. Para justificar el promedio que parece ser más popular, agregaría que usar la suma probablemente pueda causar algunos problemas con la regularización del peso. Ajustar el factor de escala para los regularizadores para diferentes tamaños de lote puede ser tan molesto como ajustar la velocidad de aprendizaje.

pkubik
fuente