97 votos

Por qué optimizar la probabilidad logarítmica máxima en lugar de la probabilidad

En la mayoría de las tareas de aprendizaje automático en las que se puede formular alguna probabilidad $p$ que debería maximizarse, en realidad optimizaríamos la probabilidad logarítmica $\log p$ en lugar de la probabilidad para algunos parámetros $\theta$ . Por ejemplo, en el entrenamiento de máxima verosimilitud, suele ser la log-verosimilitud. Cuando se hace con algún método de gradiente, esto implica un factor:

$$ \frac{\partial \log p}{\partial \theta} = \frac{1}{p} \cdot \frac{\partial p}{\partial \theta} $$

Ver aquí o aquí para ver algunos ejemplos.

Por supuesto, la optimización es equivalente, pero el gradiente será diferente, por lo que cualquier método basado en el gradiente se comportará de forma diferente (especialmente los métodos de gradiente estocástico). ¿Hay alguna justificación para que el $\log p$ funciona mejor que el gradiente $p$ ¿Gradiente?

3 votos

hay que tener en cuenta que normalmente maximizamos la probabilidad utilizando derivadas. Por otra parte, en muchos casos se aplica la condición de independencia, lo que significa que la probabilidad es el producto de algunas funciones de densidad de probabilidad iid. Además el producto de muchos valores pequeños (en el intervalo [0,1]) resulta en un valor muy pequeño. Esto da lugar a una dificultad de cálculo.

0 votos

@AlejandroRodriguez mira mi responder aquí para más detalles.

105voto

Charan Puntos 11

Los métodos de gradiente suelen funcionar mejor optimizando $\log p(x)$ que $p(x)$ porque el gradiente de $\log p(x)$ es generalmente más bien escalado . Es decir, tiene un tamaño que refleja de forma consistente y útil la geometría de la función objetivo, facilitando la selección de un tamaño de paso adecuado y llegando al óptimo en menos pasos.

Para ver lo que quiero decir, compare el proceso de optimización del gradiente para $p(x) = \exp(-x^2)$ y $f(x) = \log p(x) = -x^2$ . En cualquier momento $x$ el gradiente de $f(x)$ es $$f'(x) = -2x.$$ Si lo multiplicamos por $1/2$ obtenemos el tamaño de paso exacto necesario para llegar al óptimo global en el origen, sin importar $x$ es. Esto significa que no tenemos que trabajar demasiado para conseguir un buen tamaño de paso (o "tasa de aprendizaje" en la jerga de ML). No importa dónde esté nuestro punto inicial, sólo tenemos que establecer nuestro paso a la mitad del gradiente y estaremos en el origen en un paso. Y si no sabemos el factor exacto que se necesita, podemos elegir un tamaño de paso alrededor de 1, hacer un poco de búsqueda de líneas, y encontraremos un gran tamaño de paso muy rápidamente, uno que funciona bien sin importar dónde $x$ es. Esta propiedad es robusta frente a la traslación y el escalado de $f(x)$ . Mientras que el escalamiento $f(x)$ hará que la escala óptima de los pasos difiera de 1/2, al menos la escala de los pasos será la misma sin importar lo que $x$ es, por lo que sólo tenemos que encontrar un parámetro para obtener un esquema de optimización eficiente basado en el gradiente.

En cambio, el gradiente de $p(x)$ tiene propiedades globales muy pobres para la optimización. Tenemos $$p'(x) = f'(x) p(x)= -2x \exp(-x^2).$$ Esto multiplica el gradiente perfectamente agradable y bien comportado $-2x$ con un factor $\exp(-x^2)$ que decae (más rápido que) exponencialmente como $x$ aumenta. En $x = 5$ ya tenemos $\exp(-x^2) = 1.4 \cdot 10^{-11}$ por lo que un paso a lo largo del vector gradiente es de aproximadamente $10^{-11}$ veces demasiado pequeño. Para obtener un tamaño de paso razonable hacia el óptimo, tendríamos que escalar el gradiente por el recíproco de eso, una enorme constante $\sim 10^{11}$ . Un gradiente tan mal escalado es peor que inútil a efectos de optimización: sería mejor que intentáramos dar un paso unitario en la dirección ascendente que fijar nuestro paso escalando contra $p'(x)$ ¡! (En muchas variables $p'(x)$ se vuelve un poco más útil ya que al menos obtenemos información direccional del gradiente, pero el problema de la escala permanece).

En general, no hay garantía de que $\log p(x)$ tendrá unas propiedades de escalado de gradiente tan grandes como las de este ejemplo de juguete, especialmente cuando tenemos más de una variable. Sin embargo, para casi cualquier problema no trivial, $\log p(x)$ va a ser mucho, mucho mejor que $p(x)$ . Esto se debe a que la probabilidad es un gran producto con un montón de términos, y el logaritmo convierte ese producto en una suma, como se ha señalado en otras respuestas. Siempre que los términos de la probabilidad sean bien educado desde el punto de vista de la optimización, su logaritmo es generalmente bien comportado, y la suma de funciones bien comportadas es bien comportada. En bien educado Es decir $f''(x)$ no cambia demasiado ni demasiado rápido, lo que da lugar a una función casi cuadrática que es fácil de optimizar mediante métodos de gradiente. La suma de una derivada es la derivada de la suma, sin importar el orden de la derivada, lo que ayuda a asegurar que ese gran montón de términos de la suma tiene una segunda derivada muy razonable.

6 votos

+1 Esta respuesta plantea y enfatiza puntos que llegan al meollo de la cuestión.

1 votos

Gracias. Quería probar esto en tensorflow. Para aquellos acostumbrados a tensorflow aquí es una implementación rápida: aquí

62voto

tristanojbacon Puntos 6

Subflujo

El ordenador utiliza una representación de punto flotante de dígitos limitados de las fracciones, por lo que multiplicar tantas probabilidades está garantizado que sea muy muy cercano a cero.

Con $log$ No tenemos este problema.

4 votos

+1 por la estabilidad numérica - ¡ésta y la respuesta de Yuril deberían ser una!

1 votos

Puedes calcular el producto en el espacio logarítmico, con lo que se convierte en una suma, y luego transferirlo de nuevo. O bien calcular $\frac{\partial \log p}{\partial \theta} \cdot p$ que es igual a $\frac{\partial p}{\partial \theta}$ . Por lo tanto, la estabilidad numérica no es la cuestión.

1 votos

Tenga en cuenta que el $p$ que has mencionado, es la multiplicación de las probabilidades de todos los eventos de la muestra, y $p$ es el elemento sujeto al desbordamiento.

47voto

Sway Puntos 524
  1. El logaritmo de la probabilidad de múltiples probabilidades conjuntas se simplifica a la suma de los logaritmos de las probabilidades individuales (y la regla de la suma es más fácil que la regla del producto para la diferenciación)

    $\log \left(\prod_i P(x_i)\right) = \sum_i \log \left( P(x_i)\right)$

  2. El logaritmo de un miembro de la familia de exponencial (que incluye la omnipresente normal) es polinómica en los parámetros (es decir, la máxima probabilidad se reduce a mínimos cuadrados para distribuciones normales)

    $\log\left(\exp\left(-\frac{1}{2}x^2\right)\right) = -\frac{1}{2}x^2$

  3. Esta última forma es más numéricamente estable y simbólicamente más fácil de diferenciar que la primera.

  4. Por último, pero no menos importante, el logaritmo es un monótona transformación que preserva las ubicaciones de los extremos (en particular, los parámetros estimados en la máxima verosimilitud son idénticos para la formulación original y la transformada logarítmicamente)

6 votos

Nunca se insistirá lo suficiente en la segunda razón. Para maximizar la log-verosimilitud de un modelo lineal con ruido gaussiano, basta con resolver un problema de mínimos cuadrados, que equivale a resolver un sistema lineal de ecuaciones.

0 votos

Las razones 1 y 3 sólo describen cómo calcularlo. Puedes calcularlo así y luego volver a convertirlo (multiplicar por $p$ ) para obtener $\frac{\partial p}{\partial \theta}$ . De hecho, es bastante común calcular en el espacio logarítmico para la estabilidad numérica. Pero eso no explica por qué se utiliza ese gradiente. La razón 4 tampoco es una razón por la que el $\log p$ gradiente es mejor. También se puede hacer eso con muchas otras transformaciones. La razón 2 es interesante, pero todavía no estoy exactamente seguro de por qué el gradiente de un polinomio es mejor que el gradiente de otra función.

0 votos

@Albert la derivada de un polinomio es un polinomio de un grado inferior (en concreto, cuadrático pasa a lineal), mientras que los exponenciales no se diferencian simplemente

30voto

outis Puntos 39377

Es mucho más fácil tomar una derivada de la suma de logaritmos que tomar una derivada del producto, que contiene, digamos, 100 multiplicadores.

12 votos

Además, se reducen los posibles problemas numéricos cuando los términos son muy pequeños o grandes.

8 votos

Por el contrario, la OP proporciona implícitamente una forma excelente de calcular la derivada de cualquier producto de funciones no negativas: multiplicar la suma de las derivadas de los logaritmos por el propio producto. (Esta multiplicación se realiza mejor en términos de logaritmos, lo que elimina también los problemas numéricos a los que se refiere el comentario de @Björn). Por lo tanto, la "facilidad" no ofrece ningún poder explicativo real, ni aborda la cuestión más significativa sobre la comparación de los gradientes.

11voto

Meni Rosenfeld Puntos 183

Como regla general, el problema de optimización más básico y fácil es optimizar una función cuadrática. Se puede encontrar fácilmente el óptimo de una función de este tipo sin importar por dónde se empiece. La forma en que esto se manifiesta depende del método específico, pero cuanto más se acerque su función a una cuadrática, mejor.

Como señala TemplateRex, en una gran variedad de problemas, las probabilidades que entran en el cálculo de la función de verosimilitud provienen de la distribución normal, o se aproximan a ella. Así que si trabajas con el logaritmo, obtienes una bonita función cuadrática. Mientras que si trabajas con las probabilidades, tienes una función que

  1. No es convexo (la perdición de los algoritmos de optimización)
  2. Atraviesa múltiples escalas rápidamente y, por lo tanto, tiene un rango muy estrecho en el que los valores de la función son indicativos de hacia dónde dirigir su búsqueda.

¿Qué función prefieres optimizar? este o este ?

(En realidad, esto era fácil; en las aplicaciones prácticas, la búsqueda puede empezar tan lejos del óptimo que los valores de la función y los gradientes, incluso si pudiéramos calcularlos numéricamente, serán indistinguibles de 0 e inútiles para los fines del algoritmo de optimización. Pero la transformación a una función cuadrática hace que esto sea pan comido).

Nótese que esto es totalmente coherente con los problemas de estabilidad numérica ya mencionados. La razón por la que se requiere la escala logarítmica para trabajar con esta función, es exactamente la misma razón por la que la probabilidad logarítmica se comporta mucho mejor (para la optimización y otros fines) que la original.

También se puede enfocar de otra manera. Incluso si no hubiera ninguna ventaja para el logaritmo (que la hay) - vamos a utilizar la escala logarítmica de todos modos para las derivaciones y el cálculo, así que ¿qué razón hay para aplicar la transformación exp sólo para calcular el gradiente? Podemos seguir siendo coherentes con el logaritmo.

0 votos

@TemplateRex: El logaritmo de una función positiva convexa (hacia abajo) es convexo, pero lo contrario no es cierto. Las probabilidades no son convexas por lo que no tienen nada que preservar, pero el logaritmo es convexo. Mira los gráficos que he enlazado - exp(-10x^2) es obviamente no convexo, pero -10x^2 sí lo es.

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