29 votos

¿Es una práctica habitual minimizar la pérdida media de los lotes en lugar de la suma?

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

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? ¿Hay alguna diferencia? No entiendo cómo afectaría esto al cálculo del backprop.

22voto

dontloo Puntos 334

Como menciona pkubik, normalmente 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 sobre el minilote ayuda a mantener una relación fija entre el cross_entropy pérdida y la regularizer pérdida mientras se modifica 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 la media parece una mejor opción.


Actualización

Este papel de Facebook (Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour) muestra que, en realidad, escalar la tasa de aprendizaje según el tamaño del lote funciona bastante bien:

Regla de escala lineal: Cuando el tamaño del minilote se multiplica por k, se multiplica 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, así que supongo que tomar la media no es necesario.

14voto

alinani10 Puntos 58

Me centraré en la parte:

No entiendo cómo afectaría esto al cálculo del backprop.

En primer lugar, probablemente ya habrá notado que la única diferencia entre los valores de pérdida resultantes es que la pérdida media se reduce con respecto a la suma por el factor de $\frac{1}{B}$ es decir, que $L_{SUM} = B \cdot L_{AVG}$ , donde $B$ es el tamaño del lote. Podemos demostrar fácilmente que la misma relación es cierta para una derivada de cualquier variable wrt. las funciones de pérdida ( $\frac{d L_{SUM}}{{dx}} = B \frac{d L_{AVG}}{{dx}}$ ) al ver la definición de derivada: $$ \frac{dL}{{dx}} = \mathop {\lim }\limits_{\Delta \to 0} \frac{{L\left( {x + \Delta } \right) - L\left( x \right)}}{\Delta } $$ Ahora queremos multiplicar el valor de la función y ver cómo afecta a la derivada: $$ \frac{d (c \cdot L)}{{dx}} = \mathop {\lim }\limits_{\Delta \to 0} \frac{{c \cdot L\left( {x + \Delta } \right) - c \cdot L\left( x \right)}}{\Delta } $$ Cuando factorizamos la constante y la movemos antes del límite deberíamos ver que nos encontramos con la definición original de derivada multiplicada por una constante, que es exactamente lo que queríamos demostrar: $$ \frac{d (c \cdot L)}{{dx}} = c \cdot \mathop {\lim }\limits_{\Delta \to 0} \frac{{L\left( {x + \Delta } \right) - L\left( x \right)}}{\Delta } = c \cdot \frac{d L}{{dx}} $$

En SGD actualizaríamos los pesos utilizando su gradiente multiplicado por la tasa de aprendizaje $\lambda$ y podemos ver claramente que podemos elegir este parámetro de tal manera que las actualizaciones finales de los pesos sean iguales. La primera regla de actualización: $$ W := W + \lambda_1 \frac{dL_{SUM}}{dW} $$ y la segunda regla de actualización (imaginemos que $\lambda_1 = \frac{\lambda_2}{B}$ ): $$ W := W + \lambda_1 \frac{dL_{AVG}}{dW} = W + \frac{\lambda_2}{B} \frac{dL_{SUM}}{dW} $$


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

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X