Clase 1: Preliminares
Principalmente porque es el Estado del Arte en las aplicaciones más Impresionantes en la Inteligencia Artificial.
Principalmente porque es el Estado del Arte en las aplicaciones más Impresionantes en la Inteligencia Artificial.
Facilidad y Autograd
Cómputo
Estado del Arte
Las redes neuronales artificiales (ANN), son modelos inspirados en el mecanismo cerebral de sinapsis. Su unidad más básica es una Neurona.
Las redes neuronales artificiales (ANN), son modelos inspirados en el mecanismo cerebral de sinapsis. Su unidad más básica es una Neurona.
\[ y = \phi(w_1 \cdot x_1 + w_2 \cdot x_2 + ... + w_5 \cdot x_5)\] \[ y = \phi(w^T \cdot x)\]
donde \(w = [w_1, w_2, w_3, w_4, w_5]\) y \(x = [x_1, x_2, x_3, x_4, x_5]\).
¿Cuántas capas tiene esta red?
Depende
Una función que describe como mapear inputs (features) con outputs (labels) por medio de parámetros.
Una función que especifica cuanta información se pierde. Mayor pérdida implica más error de estimación.
Es el responsable de combinar la
hipótesis
y laloss function
. Corresponde a un procedimiento para determinar los parámetros de la hipótesis, minimizando la suma de las pérdidas en un set de entrenamiento.
Corresponde la versión multiclase de una Regresión Logística. También se le llama una
Shallow Network
.
Consideremos un problema de clasificación multiclase de \(k\) clases tal que:
Vamos a tener en total \(n \times k\) parámetros o pesos que actualizar.
Vamos a definir una función que mapea valores de \(x \in \mathbb{R}\) a vectores de \(k\) dimensiones.
\[ h: \mathbb{R}^n \rightarrow \mathbb{R}^k\] \[ x \rightarrow h_\theta(x) = \theta^T x\]
donde \(\theta \in \mathbb{R}^{n \times k}\) y \(x \in \mathbb{R}^{n\times 1}\)
En este caso usamos una hipótesis lineal
, ya que se usa una multiplicación matricial (o producto punto) para relacionar \(\theta\) y \(x\).
En este caso el output de \(h_i(x)\) devolverá la probabilidad de pertenecer a una cierta clase \(i\).
¿Cuál es el tamaño/dimensión de \(h_\theta(x)\)?
Una manera más conveniente de escribir estas operaciones es utilizar (Matrix Batch Form).
\[X \in \mathbb{R}^{m \times n} = \begin{bmatrix} &-x^{(1)T}-\\ & \vdots & \\ &-x^{(m)T}- &\\ \end{bmatrix}\]
\[y \in {1,...,k} = \begin{bmatrix} &-y^{(1)}-\\ & \vdots & \\ &-y^{(m)}- &\\ \end{bmatrix}\]
La hipótesis también se puede reescribir de manera matricial como:
\[h_\theta(X) = \begin{bmatrix} &-h_\theta(x^{(1)})^T-\\ & \vdots & \\ &-h_\theta(x^{(m)})^T-\\ \end{bmatrix}\]
\[h_\theta(X)= \begin{bmatrix} &-x^{(1)T} \theta-\\ & \vdots & \\ &-x^{(m)T} \theta-\\ \end{bmatrix} = X \theta\]
Normalmente este tipo de operaciones son las que utilizaremos para hacer nuestro código.
La salida de nuestra Shallow Network
retornará valores reales.
Para poder tener una mejor interpretación del significado de cada una aplicaremos la función Softmax
lo cual permitirá normalizar los resultados y llevará los resultados a una “distribución de probabilidad” (valores positivos que sumen 1).
Para medir el error/pérdida de información utilizaremos el Negative Log Loss
o Cross Entropy Loss
.
\[l_{ce}(h(x), y) = -log\left(p(label = y)\right)\]
Para garantizar el éxito de nuestro modelo, básicamente queremos maximizar la probabilidad de encontrar la etiqueta correcta, es decir, que \(p(label = y)\) sea lo más alto posible.
Normalmente en los problemas de optimización no se suele maximizar sino minimizar. Minimizar el valor negativo es equivalente a maximizar. Esto sería equivalente a minimizar el error del modelo.
Finalmente por razones de estabilidad numérica, minimizamos el logaritmo de la probabilidad que es una técnica bien conocida en Estadística.
\[\begin{align} l_{ce}(h(x), y) = -log\left(p(label = y)\right) &= -log \left(\frac{exp(h_{(i = y)}(x))}{\sum_{j=1}^k exp(h_j(x))}\right) \\ &= - h_{(i=y)}(x) + log\left(\sum_{j = 1}^k exp(h_j(x))\right)\end{align}\]
El último ingrediente de un algoritmo de aprendizaje es el método de optimización. Es necesario minimizar la pérdida promedio asociada a todos los puntos de un cierto set de entrenamiento. Para ello definimos esto formalmente como:
\[\underset{\theta}{minimize} = \frac{1}{m} \sum_{i=1}^m l_{ce}(h_\theta(x^{(i)}), y^{(i)})\]
¿Cómo encontramos los parámetros \(\theta\) que minimizan la pérdida de información/error de estimación?
Es un método numérico que permite minimizar funciones moviéndose en dirección contraria al Gradiente. Es computacionalmente muy eficiente y fácil de implementar en código.
Se define el gradiente como la matriz que contiene las derivadas parciales de una función \(f\). Se denota como:
\[\nabla_\theta f(\theta) \in \mathbb{R}^{n \times k} = \begin{bmatrix} \frac{\partial f(\theta)}{\partial \theta_{11}} & \cdots & \frac{\partial f(\theta)}{\partial \theta_{1k}} \\ \cdots & \ddots & \cdots \\ \frac{\partial f(\theta)}{\partial \theta_{n1}} & \cdots & \frac{\partial f(\theta)}{\partial \theta_{nk}} \end{bmatrix}\]
\(\theta_{ij}\) corresponde al parámetro que une el nodo/feature \(i\) con el nodo/predicción \(j\).
El gradiente apunta a la dirección de máximo crecimiento de la función \(f\).
Para minimizar la función, la idea es descender iterativamente por el trayecto en contra del gradiente. La regla de actualización se define como:
\[\theta := \theta - \alpha \nabla_\theta f(\theta) = \theta - \frac{\alpha}{m}\nabla_\theta l_{ce}(X\theta,y)\]
con \(\theta \in \mathbb{R}^{n \times k}\) y \(\alpha > 0\) corresponde al step size o learning rate
.
En nuestro caso \(f\) corresponderá a nuestro \(l_{ce}\) calculado anteriormente. El problema es, ¿cuánto vale el gradiente del Cross Entropy Loss
?
Simplifiquemos el problema a calcular para un sólo vector \(x\).
\[\theta := \theta - \alpha \nabla_\theta l_{ce}(\theta^Tx,y) \]
¿Cuánto vale el Gradiente?
Simplifiquemos el problema pensando que calcularemos el Gradiente para un sólo vector \(x\).
Es decir, \(x \in \mathbb{R}^{n\times1}\).
Además sabemos que \(\nabla_\theta l_{ce}(\theta^Tx, y)\) debe tener dimensiones \(n \times k\).
¿Por qué?
\[\nabla_\theta l_{ce}(\theta^T x,y) = \frac{\partial l_{ce}(\theta^T x,y)}{\partial \theta^T x} \cdot \frac{\partial \theta^Tx}{\partial \theta}\]
\[\frac{\partial l_{ce}(\theta^T x,y)}{\partial \theta^T x} = \frac{\partial l_{ce}(h_\theta(x), y)}{\partial h_\theta(x)} = \begin{bmatrix} \frac{\partial l_{ce}(h,y)}{\partial h_1} \\ \vdots\\ \frac{\partial l_{ce}(h,y)}{\partial h_k} \\ \end{bmatrix}\]
Luego el gradiente de \(l_{ce}\) respecto a \(h\) tiene dimensiones \(k \times 1\).
\[\begin{align} \frac{\partial l_{ce}(h,y)}{\partial h_i} &= \frac{\partial }{\partial h_i}\left(-h_{(i = y)} + log \sum_{j = 1}^k exp(h_j)\right) \\ &= -\frac{\partial h_{(i = y)}}{\partial h_i}+ \frac{1}{\sum_{j = 1}^k exp(h_j)} \cdot \frac{\partial}{\partial h_i}\left(\sum_{j=1}^k exp(h_j)\right) \\ &= -\frac{\partial h_{(i = y)}}{\partial h_i}+ \frac{exp(h_i)}{\sum_{j = 1}^k exp(h_j)} \\ &= - 1\{i=y\} + s_i = s_i - 1\{i=y\} \end{align} \]
\[1\{i = y\} = \begin{cases} 1, & \text{i = y} \\ 0, & \text{otherwise} \end{cases} \]
Finalmente en forma vectorial quedaría como:
\[\frac{\partial l_{ce}(\theta^T x,y)}{\partial \theta^T x} = s - e_y\]
Donde \(z\), es el vector de Softmax y \(e_y\) es un vector con un 1 en la posición \(y\) y 0 en el resto.
\[\nabla_\theta l_{ce}(\theta^T x,y) = \frac{\partial l_{ce}(\theta^T x,y)}{\partial \theta^T x} \cdot \frac{\partial \theta^Tx}{\partial \theta}\] \[\nabla_\theta l_{ce}(\theta^T x,y) = (s-e_y)\cdot x \]
Ojo con las dimensiones
Luego:
\[\nabla_\theta l_{ce}(\theta^T x,y) = x (s-e_y)^T\]
¿Cuál es el tamaño de \(\nabla_\theta l_{ce}(\theta^T x,y)\)?
\(n \times k\)
¿Por qué?
\[\begin{align}\nabla_\theta l_{ce}(X\theta,y) &= \frac{\partial l_{ce}(X\theta,y)}{\partial X\theta} \cdot \frac{\partial X\theta}{\partial \theta}\\ &= (S - I_y) \cdot X \\ &= X^T \cdot (S - I_y) \end{align}\]
Ojo con las dimensiones
¿Cuál es el tamaño de \(\nabla_\theta l_{ce}(X\theta,y)\)?
Finalmente la Regla de Actualización
de parámetros usando Gradient Descent queda como:
\[\theta := \theta - \frac{\alpha}{m} X^T (S - I_y)\]
Forward Pass
Epochs
Backpropagation
Adam
Activation Functions