Bienvenidos. En esta clase vamos a hablar de un método llamado "decaimiento del ratio de aprendizaje", que es básicamente un método que permite tener ratios de aprendizajes grandes al inicio del entrenamiento e ir bajándolos paulatinamente en la medida que nos vamos acercando al óptimo. La intuición de por qué funcionaría el decaimiento del ratio entrenamiento viene de imaginarnos una función de costo con esta forma de optimización, donde gradient descent , como ya hemos visto, puede bajar de una forma sinuosa, incluso al llegar a cerca del óptimo. Quizás en ese contexto, la tasa de entrenamiento se vuelva demasiado alta y nunca termine de converger. Si nosotros tuviésemos una estructura de decaimiento de la tasa de entrenamiento, podríamos bajar mucho más rápido cuando estamos lejos del objetivo, donde las pendientes son más claras e ir bajando a medida que nos acercamos al óptimo para no divergir tanto alrededor de ese óptimo y llegar hasta ese de una manera mucho más rápida. Entendiendo cuál es la lógica de por qué es bueno que la tasa de aprendizaje vaya bajando con las iteraciones de entrenamiento, la pregunta lógica sería: ¿con qué esquema lo hacemos? Realmente se ha probado de todo. Se pueden hacer cosas tan sencillas como hacer una tabla donde: epoch 1, la tasa es tanto; epoch 2, la tasa es tanto; epoch 100, la tasa es tanto y hacerlo manualmente, pero lo normal es que se haga con una función, una función del tipo que tome de argumentos el número de epoch, a algún parámetro normalmente se le llama r (por ratio). Algunas tienen más parámetros, otras no. Las que vamos a ver no tienen otros parámetros, pero son básicamente estas 3 que vemos acá. 1 sobre 1 más r por el epoch, que es una función que a medida que epoch sube tiende a 0. Así todo, nunca llega 0 pero tiende a 0. Otra sería la función exponencial donde r tiene que ser un valor menor que 1 y mayor que 0, para que siendo elevado cada vez a números de epoch más altos, tienda a 0. Sería parecido al anterior, pero ambas convergen a 0, pero nunca llegan a ellas. Y la última es r dividida a la raíz del epoch. Todas estas son funciones que se suelen usar, virtualmente se puede usar cualquier función monótonamente decreciente, básicamente. Un punto secundario que quizás valga la pena mencionar ahora, porque estamos viendo que hay muchas mejoras sobre gradient descent , alteraciones o modificaciones sobre gradient descent, que tienden a acelerar el aprendizaje o el entrenamiento de los modelos y que también nos evitan que caigamos en mínimos locales. Lo hemos mencionado en alguna otra oportunidad. Todos estos métodos, en general, aceleran el entrenamiento y también, en alguna medida u otra, evitan los mínimos locales. Vale la pena mencionar que hay una idea, quizás errada, en general, respecto a qué es un mínimo local. Normalmente, uno piensa que el mínimo globales estamos en una situación así, donde este es donde quiero estar y si yo empiezo, me hago el gradient descent acá, voy a terminar en este mínimo y de acá no salgo y nunca voy a poder llegar hasta acá. La realidad es que para que esto pase, esto lo vemos en una dimensión o en dos dimensiones, donde solamente una variable tiene que quedar en mínimo para que esto sea un mínimo global y esto sea un mínimo local. Pero para que sea un mínimo local en un millón de dimensiones, todas las dimensiones tienen que tener un mínimo en ese lugar y no es lo que suele pasar. Cuando nos encontramos con un lugar donde el gradiente es 0, lo más normal es que estemos en lo que se llama un punto de ensilladura, que es, esencialmente, un punto donde el gradiente es 0, pero no es mínimo y máximo. No es en todas las dimensiones mínimos o en todas las dimensiones máximos. En este caso que vemos en tres dimensiones, en una dimensión es mínimo y en otra dimensión es máximo, y por eso en realidad no es un óptimo, es un punto por ahí; pero es un punto por ahí que tiene gradiente 0, entonces lo tenemos que examinar como un punto de interés. Estos puntos se llaman puntos de ensilladura porque algún matemático con mucha creatividad le dio que esto tenía la forma de una silla de caballo, una montura. Y más a menudo que tener puntos ensilladura o mínimo locales, lo que más va a demorar nuestro entrenamiento es tener situaciones como esta, en realidad. Situaciones de meseta, donde yo tenga un gradiente muy pequeño que tenga que ir siguiendo despacito, despacito, despacito, llega hasta acá después desplazarme y después volver y caer por el costado hasta que sigo y progreso en un camino que me lleva al óptimo. Esto es mucho más habitual que los mínimos locales. Incluso hasta es más difícil de evitar, porque los mínimos locales, luego que tenemos inicializaciones al azar. Los mínimos locales hasta pueden ser evitados entrenando múltiples redes y alguna de ellas caerá en un mínimo local y algunas no, por la naturaleza estocástica de la iniciación de pesos, por más que sea una inicialización mejor para evitar los gradientes explosivos. Entonces, los mínimos locales no son tan graves, pero este tipo de situaciones, cuando tenemos función objetivo muy difíciles, como esta, son mucho más difíciles de solucionar. Por eso, todos estos métodos que venimos viendo de momento, de modificación del algoritmo gradient descent, son muy importantes y en las próximas clases vamos a ver algunos otros métodos que son aún mejores o más rápidos para entrar en nuestras redes, aún en circunstancias donde tenemos este tipo de mesetas. Hemos visto una forma de adaptar el ratio de aprendizaje para poder entrenar nuestras redes de una manera más rápida. En las próximas clases vamos a ver un par de algoritmos más, que van en el mismo sentido con mucho más trabajo arriba. Son algoritmos un poco más complejos y que hoy en día son los estándares, los que se usan todos los días para entrenar redes complejas.