Para tener primero una visión sobre lo que es una derivada, veamos una recta sencilla digamos que es "f(x)" o (y). Si yo calculo, por ejemplo, el "f(2)" va a ser seis y "f(2)" más un poquitito dos coma cero cero cero uno, es seis coma cero cero tres. Nos resulta bastante claro que por cada poquitito que yo aumento a "x", "f(x)" sube tres veces ese poquitito. Eso es lo que llamamos la pendiente de esta curva. En este caso, como es una recta, la pendiente es algo bastante constante. Si yo tomo el valor de de "f(2)", que es seis, digamos "f(2)" coma cero cero algo, esto no esta a escala, claramente, vemos que esto sube más que proporcionalmente. Sabiendo el movimiento de ancho y de alto que tenemos en este cambio, podemos determinar la pendiente; que la pendiente la podemos ver como el incremento de "f" dividido el incremento de "x". Esta es la notación formal. Son dos formas de escribir la notación formal. Este delta, este triangulito es la letra griega delta mayúscula, que se usa para denotar variación o incremento dependiendo el contexto. Lo mismo para "x", entonces, el delta de "f(x)" es lo mismo que "f(x)" más el delta de "x" menos el valor de "f(x)" original. Cuánto vale "f(x)" en "x" más ese poquitito menos lo que valÃa en "x", esa es la variación y lo que varÃa "x" es lo que estamos definiendo como delta "x". Si vemos que, en efecto, la pendiente es tres; la derivada, esto es una diferencia numérica finita, la derivada no se calcula para cero coma cero cero cero algo, se calcula para valores infinitesimales (infinitesimal quiere decir infinitamente pequeños), y formalmente, es decir, la derivada es qué pasa cuando ese delta de "x" tiende a cero. Es casi cero. En otros casos, veÃamos recién que sobre la recta la derivada era siempre tres. En otros casos vamos a tener curvas que tienen distintas velocidades de crecimiento, como por ejemplo la curva cuadrática que no crece de la misma manera para valores pequeños de "x". Un pequeño cambio de "x" acá genera en un pequeño cambio de "y" acá o de esa "x" acá. Y un pequeño cambio de "x" acá genera cambios mucho más grandes. Entonces, en estos casos, por ejemplo, si "f(2)" es cuatro, "f(2)" coma alguito es cuatro veces eso. En este caso la pendiente es cuatro. Pero, ¿qué pasa por ejemplo cuando "f(x)" es tres? En este caso la pendiente es seis. Entonces vemos que en estos casos la pendiente no es para toda la curva igual, sino que lo que estamos viendo en realidad es la pendiente de la curva tangente, que es una recta que apenas toca la curva en cada punto, y vemos que si uno toma la tangente acá, esta tangente tiene una pendiente bastante plana, mientras que una tangente acá tiene una pendiente bastante inclinada hacia arriba. Por eso querÃa decir que variaciones pequeñas de "x" en este lugar genera grandes variaciones de "f(x)" y variaciones pequeñas a valor de cero generan pequeñas variaciones de "f(x)". El otro concepto importante que tienen que entender para cuando vamos a optimizar las redes neuronales son los grafos. Un grafo también es otra palabra que suena difÃcil y rara. Un grafo no es más que una sucesión de nodos unidos por algún vÃnculo. En las redes neuronales, un grafo es estos nodos, estos circulitos que vimos unidos por flechas a las variables de "input". Para no hacerlo muy complicado con una red neuronal, vamos a ver un grafo relativamente más sencillo. Digamos que tenemos una función de "a", "b" y "c". Esa función es "tres veces "a" más "b" por "c"". Podemos definir subfunciones, si se quiere, en funciones intermedias, como por ejemplo la función "u" que es "b" por "c". La función "v" que es "a" más la función "u" que acabamos de definir y finalmente "f" lo podemos definir como tres "v". El grafo que define todas estas uniones funcionales, serÃa asÃ. Vean lo que querÃa decir. Estos son nodos como los circulitos que dibujamos en las redes neuronales y estas uniones son las aristas del grafo que unen nodos entre sà con algún criterio. Es importante que entiendan cómo funciona este grafo. Ahora vamos a la próxima slide cómo funcionan las derivadas dentro del grafo, porque una red neuronal es, en efecto, un grafo que tiene un pase hacia adelante, de izquierda a derecha, que es cuando hacemos una predicción, pero vamos a ver que cuando hacemos "gradient descent" y tenemos una red neuronal más profunda, tenemos que hacer un pase hacia atrás para encontrar cómo afecta a cada una de las variables "input" a un valor que está alejado en el cálculo. Lo vemos ahora más limpio, tenemos de nuevo este grafo y por lo que vimos antes, podemos determinar que la derivada de "f" respecto de "d" es tres. Se acuerdan que en una función lineal como la que vimos hace dos slide. Pero nosotros no queremos la derivada de "f" respecto de "v", queremos la derivada de "f" respecto de "a", porque acá es donde están nuestros parámetros que vamos a optimizar. Si nos olvidamos de "f" por un minuto, podemos saber que la derivada de "v" respecto de "a" es 1, porque esto es una función lineal y es constante. Entonces, existe algo de matemática, que se llama la regla de la cadena, que nos dice que la derivada de "f" respecto de "a", cuando hay una función intermedia o "v", es la derivada de "f" respecto de "v" por la derivada "v" respecto de "a". Esta regla es la que hace que "back propagation" pueda usar "gradient descent" para optimizar los parámetros en una red neuronal. Pasa lo mismo con "b" y "c". La derivada de "f" respecto de "b" y "c" es la misma. Es un poquito más complicada porque pasa por más nodos la derivada, pero en esencia es lo mismo. Esta posibilidad de tener derivadas de los primeros nodos respectos del "output" de la red neuronal es lo que nos va a permitir más adelante poder optimizar los parámetros de las primeras capas de una red neuronal contra la pérdida que hay sobre la producción. Este es un pequeño repaso, de algunas cuestiones matemáticas que van a ser algo relevante durante el curso. Quiero enfatizar que no se desalienten si les resulta muy complicado esto. Piensen que lo que les acabo de decir es objeto de meses de curso, de análisis matemático o de análisis numérico. No se preocupen, si no lo entienden del todo, de a poco lo van a ir entendiendo, al menos en la parte que necesitan entender para poder aplicarlo exitosamente al uso de redes neuronales. Particularmente, más que nada las derivadas, y la propagación de los grafos computacionales, ya esta implementada en librerÃas especializadas para esto. Lo que tienen que tratan de entender es por qué funciona más o menos de determinada manera la optimización para tener a veces un sentido más claro de cómo funciona la red neuronal. Pero, Sigan adelante y no se desaliente si esto les parece un poquito complicado. Van a ver que no es tan complicado una vez que lo usen.