¿Puedes explicar la intuición básica detrás de ADAM: un método para la optimización estocástica?

Creo que la pregunta es un poco vaga, principalmente porque no sé qué tan fuertes son las habilidades matemáticas que tiene a la mano quién pregunta. Entonces, hablaré un poco sobre la base de una lectura muy ligera del documento principal donde se propuso ADAM: http://arxiv.org/pdf/1412.6980v8…. A partir de ahora lo llamo el “documento de ADAM”.

Una presentación que se encuentra en https://moodle2.cs.huji.ac.il/nu… compara varios métodos de gradiente estocástico, incluido ADAM; Por lo tanto, es una buena lectura tratar de descubrir las ventajas y desventajas de cada uno de ellos. También es interesante que un informe reciente (¿académico?) Http://cs229.stanford.edu/proj20… propone modificaciones a ADAM.

Entonces, intentemos describir cómo funciona ADAM, comenzando por el principio 🙂 e intentando mantener el nivel en un conocimiento moderado de cálculo diferencial multivariado básico.

El gradiente de descenso (Gradient descent) (GD) es uno de los algoritmos de optimización más populares. Suponga que tiene una función objetivo escalar continua [matemática] J [/ matemática], cuyo argumento es variable en [matemática] R ^ n [/ matemática], es decir, un vector (o punto) [matemática] \ mathbf {x} [/ mates]. Desea encontrar el punto óptimo [math] \ mathbf {x} \ ast [/ math] que minimiza [math] J [/ math], es decir, [math] J ([/ math] [math] \ mathbf {x} \ ast [/ math] [math]) [/ math] es el valor mínimo que puede tener para [math] J [/ math], es decir, [math] J ([/ math] [math] \ mathbf {x } \ ast [/ math] [math]) \ le J (\ mathbf {x}), \; \para todos\; \ mathbf {x} [/ math]. Este mínimo puede ser local o global , y el descenso de gradiente solo encuentra mínimos locales a menos que [math] J [/ math] sea una función convexa. Puede ver una descripción detallada con varias imágenes de GD en la página de wikipedia, así que lo bosquejaré. El objetivo de GD es recorrer un camino que va desde un punto inicial dado hasta (cerca) el óptimo [math] \ mathbf {x} \ ast [/ math].

Recordemos que el gradiente de la función [math] J [/ math] es el vector [math] G_J (\ mathbf {x}) = [(\ partial J / \ partial x_0) \ cdots (\ partial J / \ partial x_ { n-1})] [/ math] donde [math] x_0 \ cdots x_ {n-1} [/ math] son ​​los componentes escalares del vector [math] \ mathbf {x} [/ math]. El gradiente tiene la propiedad de apuntar en la dirección de máximo crecimiento (aumento) en [matemática] J [/ matemática], por lo que el gradiente negativo [matemática] -G_J (\ mathbf {x}) [/ matemática] apunta a la dirección de disminución máxima en [matemáticas] J [/ matemáticas], precisamente lo que nos interesa aquí.

Para [math] k = 0,1, \ cdots \, [/ math] se siguen los siguientes pasos en el algoritmo GD (el paso 1 se realiza solo una vez):

  1. Comience en un punto elegido inicialmente. Llámelo [math] \ mathbf {x} _k [/ math];
  2. Calcule el gradiente en ese punto, [math] G_J (\ mathbf {x} _k) [/ math];
  3. El siguiente punto en la ruta al mínimo es [math] \ mathbf {x} _ {k + 1} = [/ math] [math] \ mathbf {x} _k- \ alpha_k [/ math] [math] G_J ( \ mathbf {x} _k) [/ math];
  4. Pase al paso 2 con [math] \ mathbf {x} _k [/ math] reemplazado allí por [math] \ mathbf {x} _ {k + 1} [/ math] el nuevo punto calculado, a menos que se cumpla un criterio de detención determinado .

Donde [math] \ alpha_k [/ math] es un parámetro real positivo (tamaño de paso) lo discutiremos a continuación. No discutimos demasiado los posibles criterios de detención; por lo general, uno se detiene cuando la distancia (norma euclidiana) entre dos puntos consecutivos en el camino, digamos [math] \ mathbf {x} _p [/ math] y [math] \ mathbf {x} _ {p + 1} [/ math ], es menor que algunos predefinidos [math] \ epsilon [/ math]. Entonces [math] \ mathbf {x} _ {p + 1} [/ math] se considera como el “aproximado” [math] \ mathbf {x} \ ast [/ math] encontrado por el algoritmo.

A continuación se muestra una imagen (del curso de Andrew Ng: Machine Learning | Coursera) que muestra una ruta GD típica sobreimpuesta en la “geodésica” de una función objetivo en 2-D [matemáticas] J [/ matemáticas].

Para encontrar un máximo de J, en lugar de un mínimo, simplemente use [math] \ mathbf {x} _ {k + 1} = [/ math] [math] \ mathbf {x} _k + \ alpha_k [/ math] [math ] G_J (\ mathbf {x} _k) [/ math] en el paso 3 del algoritmo GD. Observe el signo ‘+’ en el RHS de esta ecuación ahora.

Quizás el problema más grande al aplicar GD a alguna función objetivo [matemática] J [/ matemática] es cómo definir el valor del parámetro de tamaño de paso [matemático] \ alpha_k [/ matemático] en cada iteración de GD. En algunos casos se arregla a lo largo de todas las iteraciones. Pero GD a menudo es muy lento cerca del óptimo, por lo que es aconsejable usar un tamaño de paso variable. Las técnicas para actualizar [matemáticas] \ alpha_k [/ matemáticas] son ​​un área de estudio per se. Muchas variaciones de estos se pueden encontrar en la literatura.

( Un aparte aquí : hay muchos algoritmos relacionados con el GD que funcionan mejor, en términos de “velocidad hacia el óptimo”, pero necesitan muchos más cálculos que el GD bruto que presentamos. Existe, por ejemplo, el Método de Gradiente Conjugado (CGM) (método de gradiente conjugado), que proporciona una forma “óptima” de calcular [math] \ alpha_k [/ math], y aquellos que usan la matriz de Hesse de [math] J [/ math], la matriz con el segundo derivados de la función objetivo, que se denominan genéricamente “métodos de Newton” (método de Newton en optimización).

El siguiente paso en nuestro viaje es el Descenso de gradiente estocástico ( Descenso de gradiente estocástico) (SGD). En el descenso de gradiente estocástico (o “en línea”), el gradiente verdadero [matemática] G_J (\ mathbf {x}) [/ matemática] se aproxima mediante un gradiente calculado para “solo una parte” de [matemática] J [/ mates]. Lo que describimos aquí es el SGD simple o en bruto; existen versiones más complicadas y (aparentemente) mejores de los algoritmos SGD y ADAM es precisamente uno de ellos. Veremos esto a continuación.

Suponga (y esta es una situación muy común, si no la regla, en la práctica) que la función objetivo es una suma muy grande de funciones , es decir [matemáticas] J (\ mathbf {x}) = \ sum_ {r = 1 } ^ R J_r (\ mathbf {x}) [/ math]. [matemáticas] R [/ matemáticas] puede ser un número del orden de miles o más en muchas situaciones prácticas. Luego, el cálculo de [math] G_J [/ math], el gradiente “verdadero” de [math] J [/ math] ([math] G_J [/ math] a menudo se denomina gradiente “batch” en la jerga ML), que es la suma de los gradientes [matemática] G_ {J_r} [/ matemática] de todas las [matemática] J_r [/ matemática], se reemplaza por la suma de un subconjunto de esos gradientes “parciales”, por lo que utilizamos un “gradiente estocástico” [matemática] \ hat {G} _J = \ sum _ {\ mbox {(subconjunto de r)}} G_ {J_r} [/ matemática] que generalmente es mucho más rápido de calcular que el gradiente de lote completo [matemática] G_J [/ matemáticas]. El subconjunto de los índices [math] r = 1 \ cdots R [/ math] elegidos para calcular [math] \ hat {G} _J [/ math] puede elegirse al azar en cada iteración.

Entonces, el algoritmo para SGD es el mismo que el de GD con el reemplazo del gradiente de lote [matemático] G_J [/ matemático] en los pasos 2 y 3 por el gradiente estocástico [matemático] \ hat {G} _J [/ matemático] .

A continuación se muestra otra imagen (también del curso de Andrew Ng: Machine Learning | Coursera) que muestra una ruta SGD típica utilizando, de nuevo, una función objetivo 2-D [matemática] J [/ matemática]. La ruta SGD (en magenta) se compara “mal” con la anterior del lote CG (en rojo), y está claro que generalmente se necesita un número bastante mayor de iteraciones SGD para alcanzar el mínimo; es el precio que pagamos por el cálculo (más rápido) del gradiente estocástico, la estimación del gradiente verdadero.

Finalmente hablamos de ADAM. ADAM es en realidad un algoritmo SGD en el que el gradiente utilizado en cada iteración se actualiza desde el anterior utilizando una técnica basada en momentos .

En ADAM, así como en otros algoritmos con los que se compara en el “documento de ADAM” que mencionamos anteriormente, la característica particular que afirman está en la ecuación de actualización. Defina la actualización [math] \ Delta_k = \ mathbf {x} _ {k} – \ mathbf {x} _ {k-1} [/ math]. Entonces, [math] \ mathbf {x} _ {k} = \ mathbf {x} _ {k-1} + \ Delta_k [/ math]. En el algoritmo GD, esta actualización fue simplemente [math] \ Delta_ {k + 1} = – \ alpha_k G_J (\ mathbf {x} _k) [/ math].

En el método de impulso (vea la página SGD en la wikipedia ya mencionada), la actualización es en cambio una combinación lineal del gradiente estocástico actual y la actualización anterior, es decir, [matemáticas] \ Delta_ {k + 1} = – \ alpha_k \ sombrero {G} _J (\ mathbf {x} _k) + \ beta_k \ Delta_ {k} [/ math].

El ADAGrad (http://jmlr.org/papers/volume12/…), uno de los métodos competitivos utilizados para comparar en el documento ADAM, se basa en “… métodos de subgradiente que incorporan dinámicamente el conocimiento de la geometría de los datos observados en iteraciones anteriores para realizar un aprendizaje basado en gradientes más informativo … “(SIC, del resumen). Es decir, utiliza una estrategia compleja para obtener la “dirección” y el tamaño del paso en cada iteración SGD.

Finalmente, el método ADAM, que en forma algorítmica se presenta en la página 2 del artículo de ADAM, es (y comienzo a usar extractos del documento) “… basado en estimaciones adaptativas de momentos de orden inferior …”. Los momentos son dos y se denominan [math] m_t [/ math] y [math] v_t [/ math]. El algoritmo de actualización está en el documento y no estoy calificado (es decir, realmente no sé lo suficiente sobre …) para discutirlo en detalle; se dice que “… El método calcula las tasas de aprendizaje adaptativo individual para diferentes parámetros de las estimaciones de los primeros y segundos momentos de los gradientes …” y también “… El método está diseñado para combinar las ventajas de dos métodos recientemente populares: AdaGrad y RMSProp … “.

Por lo tanto, no soy un experto en algoritmos SGD, que es una condición sine qua non en mi humilde opinión para “explicar la intuición básica detrás de ADAM”. Veo la imagen borrosa: ADAM es mejor que la competencia porque su estrategia de actualización de la dirección de descenso es (muy probablemente) mejor , como lo atestiguan los muchos ejemplos presentados en el documento.

Quizás algún lector experto en SGD o, mejor dicho, autor del artículo, pueda aclarar la intuición detrás del método ADAM y las diferencias que muestra en relación con las otras técnicas de SGD.

Para finalizar, solo menciono una situación similar: si navega (como lo hice hace 20 años) en la literatura sobre Algoritmos Genéticos y parientes, encontrará innumerables estrategias para implementar la mutación y el cruce de cromosomas (los dos pasos básicos de evolución en AG) , a menudo solo difieren en algunos pequeños detalles. Algunos son mejores en ciertas familias de problemas y son peores cuando se aplican a diferentes problemas. Casi la misma situación de “sobreabundancia de algoritmos” se aplica a las estrategias de actualización de gradientes en el SGD.

More Interesting

¿Debería la IA tener emociones?

¿Cuál tiene menos matemáticas y más ciencias de la computación, redes o inteligencia artificial?

¿Cuáles son los sistemas de aprendizaje automático de última generación para predecir los precios del oro?

Si la mayoría de los humanos quedarán desempleados debido a que los robots / ai se harán cargo de los trabajos, entonces, ¿cómo el poder adquisitivo reducido mantendrá el motor económico en funcionamiento?

¿Cuáles son las perspectivas laborales después de la Maestría en Ciencias en Computación con especialización en Inteligencia Artificial?

¿Cómo debería un principiante comenzar a aprender 'comercio algorítmico' si se siente cómodo y confiado sobre los conceptos y habilidades de aprendizaje automático?

¿Podemos construir IA con todas las preguntas contenidas en Quora? ¿Si es así, cómo?

¿Debería AI convertirse en un jugador político? Por ejemplo, en el futuro, ¿deberían los políticos tener que debatir con AI que calcula presupuestos y políticas?

Si llegamos a AGI (inteligencia general artificial), ¿comenzaremos un nuevo tipo de esclavitud?

Mucha gente dice que el aprendizaje profundo y la inteligencia artificial son solo otro bombo. ¿Realmente habrá un futuro de IA?

Cómo comenzar a crear un bot de Python

¿Por qué las redes neuronales profundas usan tanta potencia de procesamiento?

¿Los robots nunca serán considerados propiedad? ¿Habrá algún momento en el que los robots tengan derechos legales?

¿Cuáles son los pros y los contras de las redes neuronales desde una perspectiva práctica? Comentarios personales de grandes usuarios bienvenidos.

¿Puedo obtener un trabajo de aprendizaje automático si termino la especialización de aprendizaje profundo de Andrew Ng?