Clase 2: Introducción a las Redes Neuronales y formalidades
La Regresión Softmax es capaz de generar separaciones lineales para más de dos clases para cualquier punto \(x \in \mathbb{R}^{1 \times n}\):
Es claro que un problema como el que se muestra acá no podrá ser resuelto mediante un clasificador lineal (hipótesis lineal).
¿Cómo se resuelve este tipo de problemas?
no-lineales
.\[h_\theta(x) = \theta^T \phi(x)\]
tal que \(\theta \in \mathbb{R}^{n \times k}\) y \(\phi(x): \mathbb{R}^n \rightarrow \mathbb{R}^d\) con \(d > n\).
SVM es un algoritmo que hace esto de manera automática utilizando el famoso Kernel Trick
, donde \(\phi(.)\) es conocido como el Kernel.
La diferencia principal entre el
Machine Learning
y elDeep Learning
es la manera en la que se crean las features.
Arquitectura
adecuada.Una primera idea sería crearlas de manera lineal:
\[\phi(x) = W^T x\]
donde \(W \in \mathbb{R}^{n \times d}\).
En este caso nuestra hipótesis queda como: \[ h_\theta(x) = \theta^T \phi(x) = \theta^T W^T x = \tilde{\theta}^T x\]
Lamentablemente este approach no funciona, ya que \(\tilde{\theta}^T\) es sólo otra matriz que genera dos transformaciones simultáneas, pero que en este caso llevará de \(n\) a \(k\) de manera directa.
Ojo con las dimensiones.
Vamos a utilizar funciones no lineales. Cualquiera sirve tal que:
\[\phi(x) = \sigma(W^Tx)\]
donde \(W \in \mathbb{R}^{n \times d}\) y \(\sigma: \mathbb{R}^d \rightarrow \mathbb{R}^d\), es decir, \(\sigma\) es una función escalar.
De este modo nuestra hipótesis quedaría como:
\[h_\theta(x) = \theta^T \sigma(W^T x) \neq \tilde{\theta}^T x\]
Estamos aplicando una transformación no-lineal
a la transformación lineal
de \(x\) con \(W\).
Normalmente escogeremos funciones no-lineales
que sean diferenciables para poder actualizar \(\theta\) y \(W\).
Esto es lo que llamaremos el entrenamiento de una red neuronal.
Definiremos las funciones de activación como funciones no-lineales que se aplican a la salida de cada capa para evitar la
composición
de dos trasnformaciones lineales consecutivas.
Esta es la única manera de transformar hipótesis lineales en hipótesis no lineales.
Funciones Clásicas
Funciones más modernas
\[h_\theta(x) = W_2^T \phi(x) = W_2^T \sigma(W_1^T x)\]
donde \(\theta=\{W_1 \in \mathbb{R}^{n \times d}, W_2 \in \mathbb{R}^{d \times k}\}\)
\[h_\theta(X) = \sigma(XW_1)W_2\]
\[W_1 := W_1 - \frac{\alpha}{m} \nabla_{W_1} l_{ce}(h_\theta(X),y)\] \[W_2 := W_2 - \frac{\alpha}{m} \nabla_{W_2} l_{ce}(h_\theta(X),y)\]
Gradiente de \(W_1\)
\[\begin{align} \nabla_{W_1} &= \frac{\partial l_{ce}(h_\theta(X),y)}{\partial \sigma(XW_1)} \cdot \frac{\partial h_\theta(X)}{\partial \sigma(XW_1)} \cdot \frac{\partial \sigma(XW_1)}{\partial XW_1} \cdot \frac{\partial XW_1}{\partial W_1} \\ &= (Z-I_y)_{m \times k} \cdot (W_{2})_{d \times k} \cdot \sigma'(XW_1)_{m \times d} \cdot X_{m \times n} \end{align}\]
Luego, corrigiendo por dimensiones obtenemos que \[\nabla_{W_1} \in \mathbb{R}^{n \times d} = X^T_{n \times m} \left[\sigma'(XW_1) \odot (Z-I_y)W_2^T \right]_{m \times d}\]
Gradiente de \(W_2\)
\[\begin{align} \nabla_{W_2} &= \frac{\partial l_{ce}(h_\theta(X),y)}{\partial h_\theta(X)} \cdot \frac{\partial h_\theta(X)}{\partial W_2}\\ &= (Z-I_y)_{m\times k} \cdot \sigma(XW_1)_{m \times d} \end{align}\]
Luego, corrigiendo por dimensiones obtenemos que \[\nabla_{W_2} \in \mathbb{R}^{d \times k} = \sigma(XW_1)^T_{d \times m}(Z - I_y)_{m \times k}\]
Inputs
\[Z_1 = X\]
Intermediate Outputs
\[Z_{i+1} = \sigma_i(Z_iW_i), i=1,...,L\] \[Z_i \in \mathbb{R}^{m \times n_i}\]
Output (Head)
\[h_\theta(X) = Z_{L+1}\]
Parámetros
\[\theta = \left[W_1,..., W_L\right]\] \[ W_i \in \mathbb{R}^{n_i \times n_{i+1}}\]
Red Neuronal
Vamos a definir como Red Neuronal un tipo particular de hipótesis que consiste en:
Loss Function
.Si bien estas redes toman inspiración de la biólogía, poco o nada tienen que ver con neuronas reales.
Términos como Neural Network
, Deep Networks
, Deep Learning
, son ampliamente usados y algunas veces usados para diferenciar el tamaño de distintas arquitecturas.
Nosotros los vamos a usar prácticamente como sinónimos.
\[W_i := W_i - \frac{\alpha}{m} \nabla_{W_i} l(h_\theta(X),y)\]
\[\nabla_{W_i} l(Z_{L+1},y) = \underbrace{\frac{\partial l(Z_{L+1},i)}{\partial Z_{L+1}} \cdot \frac{\partial Z_{{L+1}}}{\partial Z_L} \cdot \frac{\partial Z_L}{\partial Z_{L-1}}...\cdot \frac{\partial Z_{i+2}}{\partial Z_{i+1}}}_{G_{i+1} = \frac{\partial l(Z_{L+1},y)}{\partial Z_{i+1}}}\cdot \frac{\partial Z_{i+1}}{\partial W_i}\]
Gradiente Entrante (Incoming Backward Gradient)
Luego, \[ G_i \in \mathbb{R}^{m \times n_i} = \left[ G_{i+1} \odot \sigma_i'(Z_i W_i)\right] W_i^T\]
\[\begin{align}\nabla_{W_i} l(Z_{L+1},y) &= G_{i+1} \cdot \frac{\partial Z_{i+1}}{\partial W_i} \\ &= G_{i+1} \cdot \frac{\partial \sigma_i'(Z_i W_i)}{\partial Z_i W_i} \cdot \frac{\partial Z_i W_i}{\partial W_i} \\ &= (G_{i+1})_{m \times n_{i+1}} \cdot \sigma'(Z_i W_i)_{m \times n_{i+1}} \cdot (Z_i)_{m \times n_i} \end{align}\]
Luego el Gradiente de cualquier Loss Function
con respecto a un set de parámetros \(W_i\) se escribe como:
\[\nabla_{W_i}l(Z_{L+1}, y) = Z_i^T \left[G_{i+1} \odot \sigma'(Z_i W_i)\right]\]
muy fancy
para calcular la Regla de la Cadena
de manera eficiente aplicando caching
de los resultados intermedios.
Cross Entropy
como Loss Function
).Update Rule
.\[W_i := W_i - \frac{\alpha}{m}\nabla_{W_i}l(Z_{L+1},y) = W_i - \frac{\alpha}{m} Z_i^T\left[G_{i+1} \odot \sigma'(Z_i W_i)\right]\]
Epoch
como el número de veces que repetiremos el Algoritmo de Backpropagation con todos los datos de Entrenamiento. El número de epochs
de entrenamiento será un hiperparámetro de un modelo.learning rate
como un hiperparámetro que controlará el aprendizaje del modelo.Feed Forward Networks
o FFN aunque en la práctica tienen una pequeña modificación que veremos en la siguiente clase.Este tipo de redes es muy utilizada y recibe diversos nombres: