Los métodos de gradiente generalmente funcionan mejor optimizando que porque el gradiente de generalmente está más bien escalado . Es decir, tiene un tamaño que refleja de manera consistente y útil la geometría de la función objetivo, lo que hace que sea más fácil seleccionar un tamaño de paso apropiado y llegar al óptimo en menos pasos.p ( x ) log p ( x )logp(x)p(x)logp(x)
Para ver lo que quiero decir, comparar el proceso de optimización de gradiente para y . En cualquier punto , el gradiente de esSi multiplicamos eso por , obtenemos el tamaño de paso exacto necesario para llegar al óptimo global en el origen, sin importar quép(x)=exp(−x2)f(x)=logp(x)=−x2xf(x)
f′(x)=−2x.
1/2xes. Esto significa que no tenemos que trabajar demasiado para obtener un buen tamaño de paso (o "tasa de aprendizaje" en la jerga ML). No importa dónde esté nuestro punto inicial, solo establecemos nuestro paso a la mitad del gradiente y estaremos en el origen en un solo 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ínea y encontraremos un gran tamaño de paso muy rápidamente, uno que funcione bien sin importar dónde es. Esta propiedad es robusta para la traducción y escala de . Si bien la escala hará que la escala de pasos óptima difiera de 1/2, al menos la escala de pasos será la misma sin importar cuál sea , por lo que solo tenemos que encontrar un parámetro para obtener una optimización eficiente basada en gradientes esquema.
xf(x)f(x)x
En contraste, el gradiente de tiene propiedades globales muy pobres para la optimización. TenemosEsto multiplica el gradiente perfectamente agradable y de buen comportamiento con un factor que decae (más rápido que) exponencialmente a medida que aumenta. En , ya tenemos , por lo que un paso a lo largo del vector de gradiente es aproximadamente 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 constantep(x)
p′(x)=f′(x)p(x)=−2xexp(−x2).
−2xexp(−x2)xx=5exp(−x2)=1.4⋅10−1110−11 p ′ (x) p ′ (x)∼1011. Un gradiente tan escalado es peor que inútil para fines de optimización: sería mejor intentar un paso de unidad en la dirección ascendente que establecer nuestro paso escalando contra . (En muchas variables, vuelve un poco más útil, ya que al menos obtenemos información direccional del gradiente, pero el problema de escala persiste).
p′(x)p′(x)
En general, no hay garantía de que tenga propiedades de escala de gradiente tan buenas como este ejemplo de juguete, especialmente cuando tenemos más de una variable. Sin embargo, para casi cualquier problema no trivial, va a ser mucho mejor que . Esto se debe a que la probabilidad es un gran producto con un montón de términos, y el registro convierte ese producto en una suma, como se señala en varias otras respuestas. Siempre que los términos en la probabilidad se comporten bien desde el punto de vista de la optimización, su registro generalmente se comporta bien y la suma de las funciones se comporta bien. Por buen comportamiento me refiero alogp(x)logp(x)p(x)f′′(x)no cambia demasiado o demasiado rápido, lo que lleva 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 garantizar que ese gran montón de términos de suma tenga una segunda derivada muy razonable.