class: center, middle, inverse # Deep Dive into Deep Learning *** #### Oscar Stanchi .gh_link[ [github](https://github.com/indirivacua/deep-learning-lectures) ] --- # Conceptos básicos * Entrenar modelo (_aprendizaje_): minimizar función de error $E$ (problema de optimización), de modo de encontrar el mejor valor de los parámetros * Supervisado: se realiza con un conjunto de datos (**dataset**) etiquetado; útil para regresión, clasificación, etc * Normalización Min-Max: $X = (X - X.\text{min}()) / (X.\text{max}() - X.\text{min}())$ * Deja los datos en un rango de 0 a 1 * Normalización Z-score: $X = (X - X.\text{mean}()) / X.\text{std}()$ * No limita el rango de los datos, solo los transforma dejándolos centrados en la media $\mu$ y la desviación estándar $\sigma$ en 1 --- class: center, middle, inverse # Regresión Lineal --- # Regresión Lineal Simple * Modelo: $ y = f(x) = m \cdot x + b $ * Parámetros: $m$ y $b$ (pendiente y ordenada al origen) * Asunción: relación lineal entre $x$ e $y$ * Función de Error: **Error Cuadrático Medio (MSE)** * $ E(m,b) = (1/n) \sum\_{i=1}^{n} E\_{i}(m,b) $ * $ E\_{i}(m,b) = (y\_{i} - f(x\_{i}))^{2} $ * $\text{abs}(\cdot)$ no es derivable * $(\cdot)^{2}$ penaliza errores grandes * Es convexa, forma de parábola con un único mínimo (global) .rlinear_1d[ ![](img/rlinear_1d.png) ] --- ## Descenso de Gradiente 1D .dg_1d[ ![](img/dg_1d.png) ] * Algoritmo general, iterativo y escalable * Asunción: $E(w)$ debe ser derivable * Problemas: * Sensible a mínimos locales * Determinación del criterio de convergencia (terminación) * $ \delta E(w) / \delta w = 0 $ o $ E < \varepsilon $ * Funcionamiento: * Se comienza con un parámetro aleatorio (o sensato) para $w=w\_{0}$ * **Ecuación fundamental de cambio**: $ w = w - \alpha \cdot \delta E(w) / \delta w $ * $\alpha$ es la tasa de aprendizaje o tamaño del paso * $\alpha << 1$ genera mucha iteraciones * $\alpha >> 1$ puede causar la **divergencia** del algoritmo * $\delta E(w) / \delta w$ es la dirección y magnitud del cambio hacia donde la función crece * Nos indica la dirección de crecimiento, hay que moverse en **dirección contraria** * Se actualiza el parámetro $w$ y se calcula el Error del nuevo valor --- ## Descenso de Gradiente 2D * Idem a 1D, pero $E(w\_{1},w\_{2})$ ahora tiene dos parámetros (paraboloide) * $\nabla E = \left ( \delta E / \delta w\_{1}, \delta E / \delta w\_{2} \right )$ * $ w\_{1} = w\_{1} - \alpha \cdot \delta E(w\_{1},w\_{2}) / \delta w\_{1} $ * $ w\_{2} = w\_{2} - \alpha \cdot \delta E(w\_{1},w\_{2}) / \delta w\_{2} $ .dg_2d[ ![](img/dg_2d.png) ] --- ### Cálculo de Derivadas para Regresión Lineal * $ \delta E(m,b) / \delta m = (1/n) \sum\_{i=1}^{n} 2 \cdot (y\_{i} - f(x\_{i})) \cdot x\_{i} $ * $ \delta E(m,b) / \delta b = (1/n) \sum\_{i=1}^{n} 2 \cdot (y\_{i} - f(x\_{i})) $ ### Descenso de Gradiente en Redes Neuronales * Dependiendo del valor inicial de los parámetros $w\_{i}$, cambiará el resultado final de la convergencia * El Error en redes neuronales no es convexo (varios mínimos locales, único mínimo global) .dg_rn[ ![](img/dg_rn.png) ] --- ## Backpropagation * **Descenso de Gradiente** * **Algoritmo** de optimización * **Backpropagation** * **Técnica** de optimización * Calcula gradientes con respecto a los pesos de una red * Se basa en aplicar derivadas parciales y la regla de la cadena .backpropagation[ ![](img/backpropagation.png) ] --- ## Parámetros Iniciales y Normalización en Descenso del Gradiente * Los valores de los parámetros iniciales (ej. $m\_{0}$ y $b\_{0}$), afectan al DG * La normalización de la entrada también afecta al DG * Un contorno no es equitativo si los datos no están normalizados * Cambios en $m$ (horizontal) afecta más que en $b$ (vertical) * No normalizar conlleva a que el algoritmo implique más iteraciones .dg_norm[ ![](img/dg_norm.png) ] --- # Regresión Lineal Multivariable (ENTRADA) * Modelo: $ y = f(x\_{1},x\_{2},\dots,x\_{n}) = w\_{1} \cdot x\_{1} + w\_{2} \cdot x\_{2} + \cdots + w\_{n} \cdot x\_{n} + b $ * Se aproxima por un **(hiper)-plano** en lugar de por un recta * El valor de un peso $w\_{i}$ indica la importancia del mismo para la variable de entrada $x\_{i}$ * Notar que un ejemplo $x \in \mathbb{R}^{n}$ cuando en RL simple $ x \in \mathbb{R}$ * Función de Error: **MSE** * $ E(w\_{1},w\_{2},\dots,w\_{n},b) = (1/n) \sum\_{i=1}^{n} E\_{i}(w\_{1},w\_{2},\cdots,w\_{n},b) $ * $ E\_{i}(w\_{1},w\_{2},\cdots,w\_{n},b) = (y\_{i} - f(x\_{1},x\_{2},\dots,x\_{n}))^{2} $ * Descenso de Gradiente: * $w\_{1} = w\_{1} - \alpha \cdot \delta E(w\_{1},w\_{2},\dots,w\_{n},b) / \delta w\_{1} $ * $w\_{2} = w\_{2} - \alpha \cdot \delta E(w\_{1},w\_{2},\dots,w\_{n},b) / \delta w\_{2} $ * $\cdots$ * $w\_{n} = w\_{n} - \alpha \cdot \delta E(w\_{1},w\_{2},\dots,w\_{n},b) / \delta w\_{n} $ * $b = b - \alpha \cdot \delta E(w\_{1},w\_{2},\dots,w\_{n},b) / \delta b $ * Cálculo de derivadas para Regresión Lineal: * Tratar a $m$ como $w\_{i}$ y $b$ como $b$ e utilizar las mismas que antes .rlinear_2d[ ![](img/rlinear_2d.png) ] --- # Regresión Lineal Multivariable (SALIDA) * Modelo: $Y = F(X) = X \times W + B$ * Transforma un vector de $N$ elementos en un vector de $M$ elementos * Intuición: combinación de $M$ modelos de RL + cálculo matricial y vectorial * Vector de entrada $X$ de dimensión $N$ * Vector de salida $Y$ de dimensión $M$ * Matriz de pesos $W$ de dimensión $N \times M$ * Cada columna son los pesos de un modelo * Vector de bias (sesgo) $B$ de dimensión $M$ * Un valor por cada modelo o por cada salida * Ejemplo: $ X = \left [ 3, 10, 9 \right ]$, $Y = \left [ f\_{1}(X), f\_{2}(X) \right ]$ * RL 1: $W\_{1}=\left [ 1, 2, 3 \right ]$, $B\_{1} = -46$ * RL 2: $W\_{1}=\left [ 4, 5, 6 \right ]$, $B\_{1} = -108$ $$ \left [ 3, 10, 9 \right ] \times \begin{bmatrix} 1 & 4 \\\ 2 & 5 \\\ 3 & 6 \end{bmatrix} + \left [ -46, -108 \right ] = \left [ 4, 8 \right ]$$ --- ## Cambio en la Función de Error $\small{E\_{i}}$ * **Distancia Euclidea al Cuadrado** (_pitágoras_): calcula distancia entre dos puntos en un espacio N-dimensional * $E\_{i} = \left ( y\_{i,1} - f\_{1}(x\_{i}) \right ) ^ {2} + \left ( y\_{i,2} - f\_{2}(x\_{i}) \right ) ^ {2}$ * Existirá un término por cada salida del modelo * La función de Error "total" o "promedio" no se ve afectada .rlinear_multi_ei[ ![](img/rlinear_multi_ei.png) ] --- ## Épocas y Lotes * Coste computacional del DG: $O(NP) + O(IP) = O(INP)$ * $N$ ejemplos, $P$ parámetros, $I$ iteraciones * Solución: dividir los datos en lotes (subconjuntos) * Coste computacional: $O(BP)$ siendo $B$ el número de lotes * **Épocas (Epochs)**: cantidad de recorridos completos (_iteraciones_) del dataset en el entrenamiento * **Lote (Batch)**: cantidad de ejemplos por época * Iteraciones reales **por epoch**: $N/\text{batch\\_size}$ * Iteraciones reales **totales**: $(N/\text{batch\\_size})\cdot\text{epochs}$ * Ejemplo: $N=8$, $\text{batch\\_size}=2$ y $\text{epochs}=3$ * Iteraciones reales por epoch = 4, totales = 12 .batches_example[ ![](img/batches_example.png) ] --- ### Descenso de Gradiente Estocástico / Por Lotes / Ruidoso * DG original ($B=N$): utiliza **todas** las muestras/ejemplos al calcular * Gradientes exactos, no permite escapar de min. locales (si $f$ es convexa garantiza min. global), **lento y no escalable** * DGE ($1 < B < N$): utiliza una **muestra** de las muestras ($B$ adecuado) * Gradientes ruidosos, permite escapar de min. locales (no garantiza min. global), **rápido y escalable** .sgd[ ![](img/sgd.png) ] * SGD vs. Momemtum vs. Adagrad vs. Adam * Algunos logran escapar de mínimos locales .opt_anim[ ![](img/opt_anim.gif) ] --- class: center, middle, inverse # Regresión Logística --- # Regresión Logística (Clasificación BINARIA) * **Regresión Logística = Regresión Lineal + Función Logística** * Se aplica la FL (_sigmoide_) a la salida de la RL * Función Logística: $\sigma (x) = 1 / \left ( 1 + e^{-x} \right ) = P(y=1 \mid x; w)$ * Dominio: $\left ( -\infty, \infty \right )$ * Imagen: $\left [ 0, 1 \right ]$ * Derivada sencilla: $\delta \sigma (x) / \delta x = \sigma(x) \left ( 1 - \sigma(x) \right )$ * Modelo: $f(x)=\sigma(m \cdot x + b) = 1 / \left ( 1 + e^{-m \cdot x - b} \right )$ * **Interpretación de la salida como probabilidad** * $m$ cambia la pendiente de la parte lineal * $b$ mueve la función en el eje de abscisas * MSE no es convexo con éste, la función de Error no será la misma * Umbral $u$: permite pasar de un modelo probabilístico a clases (_frontera de decisión_) * Función de Error: **Entropía Cruzada (BINARIA)** * $E\_{i} = y\_{i} \cdot \left (-\log{\left ( 1 - f(x\_{i} \right )} \right ) + (1 - y\_{i}) \cdot \left (-\log{\left ( 1 - f(x\_{i} \right )} \right )$ * La función de Error "total" o "promedio" no se ve afectada: * $ E(m,b) = (1/n) \sum\_{i=1}^{n} E\_{i}(m,b) $ (ídem RL) * Mide distancia entre distribuciones de probabilidad .rlogistic[ ![](img/rlogistic.png) ] --- ## Cálculo de Derivadas para Regresión Logística * Son CASI idénticas a las de RL (salvo por el "por 2") * $ \delta E(m,b) / \delta m = (1/n) \sum\_{i=1}^{n} (y\_{i} - f(x\_{i})) \cdot x\_{i} $ * $ \delta E(m,b) / \delta b = (1/n) \sum\_{i=1}^{n} (y\_{i} - f(x\_{i})) $ ## Accuracy * Accuracy = % de ejemplos que se clasificaron correctamente * $\text{Acc} = (1/n) \sum\_{i=1}^{n}\left ( {y\_{i}}' - y\_{i} \right )$ * Ejemplo: N=8, aciertos=4 * accuracy=aciertos/N=0.5=50% (promedio de la col. de aciertos) .bin_accuracy_example[ ![](img/bin_accuracy_example.png) ] --- ## Codificación One-Hot vs. Etiquetas * Su diferencia principal recae en el tamaño del vector $Y$ de _labels / target_ * One-Hot: $N \times C$ * Etiquetas: $N \times 1$ * Implica un orden en los resultados (no es buena práctica) .onehot_labels[ ![](img/onehot_labels.png) ] --- .rlogistic_title_fix[ # Regresión Logística (Clasificación MULTICLASE) ] * En lugar de una **Sigmoide** al final de la RL se utiliza una **Softmax** * Tiene como tarea pasar el vector de salida a probabilidades $$\sigma(Y)\_{i} = \frac{ e^{y\_{i}} }{ \sum\_{j=1}^{m} e^{y\_{j}} }$$ * Notar que $e^{y} > 0 \;\; \forall \;\; y \in Y$, donde además acentúa valores altos * Ejemplo: $Y = \left [ 4, 8, 3 \right ]$ 1. Se aplica la exponencial al resultado de la RL * $E = \left [ e^{4}, e^{8}, e^{3} \right ]$ 2. Normalizar $E$ con el valor $N$ * $N = e^{4} + e^{8} + e^{3} \\\ \begin{aligned}\text{Softmax} &= \left [ e^{4}/N, e^{8}/N, e^{3}/N \right ] \\\ &= \, \left[ 0.018, 0.975, 0.007 \right ]\end{aligned}$ * Notar que $ 0 < \text{Softmax}_{i} < 1$, además que $\sum \text{Softmax} = 1$ * El umbral (if f(x) > u then 1 else 0) es reemplazado por `argmax(softmax(Y))` --- ## Cambio en la Función de Error $\small{E\_{i}}$ * **Entropía Cruzada (Normal)** * $E\_{i} = -\ln \left ( P \left [ \text{clase\\_verdadera} \right ] \right )$ * Penaliza la salida de clase verdadera (_true class_) * Si $P \left [ \text{clase\\_verdadera} \right ] < 1$, penaliza * La función de Error "total" o "promedio" no se ve afectada .rlogistic_multiclass_error_example[ ![](img/rlogistic_multiclass_error_example.png) ] --- class: center, middle, inverse # Redes Neuronales --- # Red Neuronal para REGRESIÓN * Los modelos lineales no pueden resolver problemas no-lineales * Las redes neuronales permiten modelar polinomios complejos .xor_problem[ ![](img/xor_problem.png) ] * Intuición: apilar transformaciones (_capas_) de RL * A mayor cantidad de capas y/o neuronas, más complejo * Arquitecturas: secuenciales (**_feedforward_**) o recursivas (cíclicas) .nn_topology[ ![](img/nn_topology.png) ] --- ## `forward`: tamaño de parámetros y cálculo de salida .nn_forward[ ![](img/nn_forward.png) ] $$\left ( m \times n \right ) \cdot \left ( n \times p \right ) = \left ( m \times p \right)$$ * El tamaño de B
i
es siempre el tamaño de de columnas de W
i
* RL1 recibe tamaño 1x3, por lo que W1=3x? * Elegimos W1=3x4 * RL2 recibe tamaño 1x4, por lo que W2=4x? * Elegimos W2=4x5 * RL3 recibe tamaño 1x5, por lo que W3=5x? * Como el modelo decide por 2 salidas, W3=5x2 * Los valores elegidos son la cantidad de **neuronas** de las **capas ocultas** --- ## Función de Error y Activaciones No-Lineales * Función de Error: se la considera una capa más, pero no se usa al predecir (diff. e/ `model.train()` vs. `model.eval()`) .nn_error[ ![](img/nn_error.png) ] * **Funciones de Activación No-Lineales** * $N=((X \cdot W_1+B_1) \cdot W_2+B_2) \cdot W_3+B_3=\textcolor{red}{X \cdot W_4+B_4}$ * Deben ser derivables: $\text{Sigmoide}(x)$, $\tanh(x)$, $\text{Re\\_LU}(x)$, etc .act_func[ ![](img/act_func.png) ] --- ### Aplicación de las Funciones de Activación No-Lineales * Se las consideran capas SIN parámetros * **No se entrenan** * Si `activation=None` entonces es Lineal .act_func_example[ ![](img/act_func_example.png) ] ### Ejecución por Lotes .nn_batches[ ![](img/nn_batches.png) ] --- # Red Neuronal para CLASIFICACIÓN * Se intercambia la última capa (_head_) Lineal por una **Regresión Logística** (`activation=softmax`) * El número de neuronas de salida deberá ser igual a la cantidad de clases .nn_clasification[ ![](img/nn_clasification.png) ] ## RN y Modelos Lineales
**
Redes Neuronales = Regresión Lineal/Logística + Funciones de Activación
**