Vamos a empezar repasando lo que vimos en el último vÃdeo. Tenemos nuestra función de costo, que es lo que estamos tratando de optimizar, qué vamos a denominar "J" de ("w", "b"), donde "w" es nuestros parámetros que multiplican a nuestras variables independientes y "b" es nuestra constante. Por ahora, simplifiqué. Continuamos con la simplificación de considerar un solo "w". Esta función de costo estaba definida, si se acuerdan, por el promedio, es decir, uno dividido "m", que es nuestra cantidad de observaciones de nuestro "data set", de la sumatoria del error o la diferencia entre "y" sombrero, que vendrÃa a ser la predicción que hace nuestro algoritmo y "i", que es el valor real en cada una de las observaciones. Entonces se ha producido la relación uno para dos hasta la última observación de nuestros "data set" de entrenamiento. La sumatoria de esos errores promediadas, divididas sobre la cantidad de "m" nos da la función de costo que estamos tratando de optimizar. Si graficamos esto en un plano de tres dimensiones, tendrÃamos una función de este tipo, donde los ejes "x" y "z" son nuestros parámetros a optimizar, en este caso, "w" y "b" y nuestro eje "y" es nuestra función "J" de ("w", "b"), donde por la forma en que trabaja la regresión logÃstica, tendrÃamos esta función convexa que vemos acá. Lo que nuestro algoritmo va a intentar hacer ahora es encontrar los parámetros de "w" y de "b" que hagan mÃnima nuestra función "J" de ("w, "b"), es decir, este mÃnimo que estamos viendo acá. Nosotros podemos ver todo el plano de la superficie y podemos encontrar fácilmente ese mÃnimo, pero para un algoritmo que está iterando sobre parámetros aleatorios de "w" y de "b", encontrar el mÃnimo no es tan fácil. Para eso, lo que vamos a hacer es, vamos a arrancar los parámetros en un punto determinado aleatorio, por ejemplo, acá donde está el punto rojo, y a partir de eso vamos a empezar a hacer lo que hace el descenso del gradiente, que es movernos una pequeña cantidad en cada una de las posibles direcciones. En este caso, cuando tenemos dos parámetros "w" y "b" solamente, tendrÃan cuatro direcciones en las cuales me podrÃa mover incrementando un poquito "w" o disminuyéndolo e incrementando un poquito "b" y disminuyéndolo. Esto lo vamos a lograr a través de las derivadas, que ahora vamos a ver un poquito más en profundidad. Lo que vamos a lograr con esto es ver cuál es el camino o el sentido en el cual es máximo la minimización de nuestra función "J" ("w") y en ese sentido nos vamos a desplazar una determinada cantidad para lograr llegar al siguiente punto. Esto lo vamos a seguir haciendo hasta lograr llegar al mÃnimo. Para simplificar este problema, vamos a verlo ahora en solamente dos dimensiones. Supongamos que tengamos este gráfico donde el eje de las "X" es un parámetro solo que es "w" por ahora, y el eje de las "Y" es la función "J" de "w", igual que era en el gráfico anterior. Tenemos entonces un punto mÃnimo que es el que queremos optimizar y tenemos que arrancar el parámetro en un punto determinado. Supongamos ahora que arrancamos en este punto de acá, ¿cómo hago para llegar de este punto de "w" determinado al punto de "w" que haga mÃnimo la función J de "w"? Para eso vamos a usar la siguiente función, que lo que hace es actualizar el parámetro "w" y por eso es el 2.7 igual, tal que a "w" le resta un valor "alfa", que ahora vamos a ver en más detalle, dividido la derivada de "J"("w") dividido la derivada de "w". Este parámetro "alfa" va a ser sumamente importante y vamos a verlo en mayor profundidad más adelante, que es nuestro ratio de aprendizaje. Es decir, ¿qué tan rápido queremos que nuestro algoritmo llegue a ese punto mÃnimo? ¿Qué significa esto? Que si es muy lento ese aprendizaje va a tardar bastante en llegar al punto mÃnimo, pero si es muy rápido, es decir, los pasos que da son muy acelerados, podrÃa llegar a pasarse y cruzar del otro lado de nuestro mÃnimo. El otro parámetro, el "d" ("w") simplemente en lo que se fija es en esta derivada que ve en qué sentido conviene que se mueva este parámetro, si conviene maximizarlo o minimizarlo. Vamos a verlo con este mismo ejemplo. Supongamos que estamos en este punto, la derivada de "J" ("w") dividido a la derivada de "w" va a ser mayor a cero. Es decir, ¿qué significa esto? Que nos va a dar un valor positivo que multiplicado por el ratio aprendizaje, que es un valor también real y positivo, y restado eso a "w" nos va a dar un valor menor de "w". Es decir, que el punto siguiente "w" se va a encontrar hacia la izquierda y nos vamos a ir acercando hacia el mÃnimo. Si sin embargo, supongamos el ejemplo de que estamos en el escenario opuesto y en nuestro punto se encuentra este lado a la izquierda del punto mÃnimo, en este caso, vamos a tener una derivada de "J"("w") dividido a la derivada de "w" que va a ser menor a cero y por tanto, ese valor menor a cero, es decir, un valor negativo multiplicado por el ratio de aprendizaje que es positivo, y restado, nos va a dar un valor positivo, resta menos resta nos va dar positivo, por lo cual la actualización de "w" va a ser hacia la derecha y nos vamos a acercar a este mÃnimo local. Esto lo vamos a iterar una cantidad de veces necesaria hasta llegar a ese mÃnimo que estamos buscando, sea cualquiera el punto que estemos arrancando nuestro proceso de optimización. Esta primera intuición conceptual espero que les ayude a entender el poder que tiene el descenso de gradiente, porque lo que estamos haciendo es optimizando, en este caso, un parámetro "w", pero asà como optimizamos uno, podemos optimizar "n" parámetros que estemos utilizando en nuestra red o nuestra regresión, en un sentido de que siempre se dirigen en la dirección donde minimiza la función que estamos tratando de minimizar, que en este caso es la pérdida, con lo cual es sumamente potente para llegar siempre a buscar el mÃnimo en una forma mucho más rápida que si lo hiciéramos en un algoritmo simplemente aleatorio. El riesgo que tiene esto es de encontrar mÃnimos locales, es decir que, al desplazarse hacia un punto mÃnimo, ese mÃnimo no sea un mÃnimo absoluto, sino que sea un mÃnimo local. Pero vamos a ver que en el caso de redes neuronales, sobre todo cuando tenemos una gran cantidad de parámetros, esto pasa a ser un problema de menor importancia, por lo que vamos a llamar el concepto de la silla de caballo, que es el hecho de que nunca tenemos a todos los parámetros en un punto mÃnimo local, sino que casi siempre vamos a tener alguno de los parámetros al menos que se va a poder seguir optimizando. Esto lo vamos a ver en más detalles, pero ya con esta idea inicial espero que entiendan por qué va a ser tan potente el uso del descenso de gradiente y por qué lo vamos a usar de acá en adelante para optimizar nuestras redes. Ahora, en los próximos vÃdeos vamos a ver cómo podemos aplicar esta técnica de descenso de gradiente a nuestras regresiones.