El descenso de gradiente es el método con el que se entrena casi todo lo que hoy se llama inteligencia artificial. Consiste en algo muy simple: para encontrar el punto más bajo de una superficie, mirar hacia dónde baja más deprisa el terreno bajo los pies y dar un paso en esa dirección; repetir hasta que el suelo sea llano. La superficie es el error de un modelo en función de sus parámetros; el punto más bajo, los parámetros que menos se equivocan; y el «hacia dónde baja más deprisa» lo dice el gradiente, el vector de derivadas parciales, que apunta cuesta arriba y cuyo opuesto es el camino de bajada más empinado. Una red neuronal con miles de millones de parámetros se entrena exactamente así, solo que en un espacio de miles de millones de dimensiones que nadie puede dibujar.
La figura de esta página lo hace en dos dimensiones, que sí se dibujan. Las curvas de nivel muestran la altura de una función; el punto naranja es la posición actual, y cada paso lo desplaza en dirección contraria al gradiente una distancia proporcional a la pendiente y a un número que el usuario controla: la tasa de aprendizaje. Con ella empieza casi todo lo que hay que saber sobre el método. Si es pequeña, el punto baja con seguridad y con una lentitud exasperante. Si es grande, salta al otro lado del valle, y si es demasiado grande cada salto lo aleja más del fondo hasta que sale del mapa: el error crece en vez de bajar, que es lo que en la práctica se llama que el entrenamiento ha divergido.
La idea es de Cauchy, que la propuso en 1847 en una nota de cuatro páginas para resolver sistemas de ecuaciones, y durante un siglo fue un método más entre los de la optimización numérica, más lento que los que usan también la curvatura, como el de Newton. Su fortuna cambió cuando los problemas se hicieron grandes. Calcular la curvatura de una función de un millón de parámetros exige una matriz de un billón de números; calcular su gradiente cuesta lo mismo que evaluar la función una vez. Herbert Robbins y Sutton Monro mostraron en 1951 que el método sigue funcionando aunque el gradiente se estime con ruido a partir de una muestra de los datos, y esa variante, el descenso de gradiente estocástico, es la que se usa: en lugar de calcular el error sobre todos los ejemplos antes de cada paso, se calcula sobre unos cuantos, y se dan muchos pasos pequeños e imprecisos en vez de pocos exactos. Léon Bottou argumentó en 2010 que, con datos de sobra, esa imprecisión sale gratis y la velocidad no.
La segunda función de la figura, un valle curvo y estrecho tomado de la función de Rosenbrock, enseña el defecto principal del método. En un valle así, el gradiente apunta casi perpendicular a las paredes y casi nada hacia la salida, así que el punto rebota de una pared a otra avanzando muy poco por el fondo. La solución que propuso Boris Polyak en 1964 es el momento: en lugar de moverse según el gradiente actual, el punto acumula una velocidad que promedia los gradientes recientes; los rebotes laterales se cancelan y el avance a lo largo del valle se suma. El botón de la figura lo activa, y el zigzag se convierte en una curva que recorre el fondo. Los optimizadores que se usan hoy para entrenar redes grandes, como Adam, propuesto por Kingma y Ba en 2015, combinan el momento con una tasa de aprendizaje distinta para cada parámetro, ajustada según lo que ha variado su gradiente.
La tercera función tiene varios hoyos, y muestra la limitación que ningún ajuste de la tasa resuelve: el descenso de gradiente solo garantiza llegar a un mínimo, el del valle donde empezó, y no tiene forma de saber si hay otro más bajo detrás de la loma. Cuando el punto se detiene, el gradiente es cero, y desde dentro del algoritmo un mínimo local es indistinguible del global. Al pulsar en distintos puntos de partida de la figura se acaba en fondos distintos. Durante años se pensó que esto haría inviable entrenar redes neuronales profundas, cuyas funciones de error tienen un número astronómico de mínimos locales; la experiencia ha enseñado que en dimensiones muy altas la mayoría de esos mínimos son casi igual de buenos, y que el verdadero obstáculo son las mesetas y los puntos de silla, regiones enormes de pendiente casi nula donde el método se arrastra.
Lo que hizo del descenso de gradiente la herramienta central del aprendizaje automático fue un cálculo, no una idea nueva. Para dar un paso hace falta el gradiente del error respecto a cada parámetro, y en una red con muchas capas eso parecía exigir un cálculo distinto por parámetro. El algoritmo de retropropagación, que Rumelhart, Hinton y Williams publicaron en 1986 en Nature aunque lo habían anticipado otros, obtiene todos a la vez con una sola pasada hacia atrás por la red, aplicando la regla de la cadena capa a capa: cuesta lo mismo que evaluar la red dos veces. Con eso, la receta completa cabe en una frase. Pasar un lote de ejemplos por la red, medir el error, retropropagarlo para obtener el gradiente, dar un paso cuesta abajo, y repetirlo millones de veces. La figura hace lo mismo con dos parámetros en lugar de miles de millones, y las dificultades que se ven en ella —la tasa, el zigzag, los mínimos donde uno se queda atrapado— son las mismas que ocupan a quien entrena un modelo grande.
Fuentes
- Augustin-Louis CauchyMéthode générale pour la résolution des systèmes d'équations simultanéesComptes rendus hebdomadaires des séances de l'Académie des sciences 251847
- Herbert Robbins y Sutton MonroA Stochastic Approximation MethodThe Annals of Mathematical Statistics 22(3)1951
- Boris T. PolyakSome Methods of Speeding up the Convergence of Iteration MethodsUSSR Computational Mathematics and Mathematical Physics 4(5)1964
- David E. Rumelhart, Geoffrey E. Hinton y Ronald J. WilliamsLearning Representations by Back-Propagating ErrorsNature 3231986
- Léon BottouLarge-Scale Machine Learning with Stochastic Gradient DescentProceedings of COMPSTAT 2010, Physica-Verlag2010
- Diederik P. Kingma y Jimmy BaAdam: A Method for Stochastic Optimization3rd International Conference on Learning Representations (ICLR), San Diego2015