Google Translate arrancó en el 2006 y es utilizado por ~ 500 millones de personas por mes.
En 2016 el equipo de Google Brain reemplaza el motor viejo por uno nuevo basado en redes neuronales
En 9 meses obtienen mejoras análogas las que habían tenido en los últimos 10 años
Uno no es lo que es por lo que escribe, sino por lo que ha leído.
"Uno no es lo que es por lo que escribe, sino por lo que ha leído."
Si traducimos esa frase en el viejo sistema de Google Translate:
“One is not what is for what he writes, but for what he has read.”
En la nueva versión que utiliza ML:
"You are not what you write, but what you have read.”
“One is not what he is by what he writes, but by what he has read.”
La historia completa de cómo fue todo este cambio está en: The Great A.I. Awakening, NYTimes
En Netflix hay un documental excelente llamado AlphaGo que cuenta la historia.
Identifying Exoplanets with Deep Learning: A Five Planet Resonant Chain Around KEPLER-80 and an Eighth Planet Around KEPLER-90 (PDF)
Edward Ott y 4 colaboradores de la Universidad de Maryland utilizan reservoir computing para predecir la dinámica de sistemas caótico
Hubo una serie de avances en ML y en particular en el uso de redes neuronales
La "hipótesis" es una función de mi vector \( \textbf{x} \): \begin{eqnarray*} \textbf{h}_{W,b}( \textbf{x} ) & = f \left( \sum_{i=1}^3 W_{i} x_i + b \right) \\ & = f(\textbf{W}^T \textbf{x} + b) \end{eqnarray*}
\( f(z) = {1 \over {1 + e^{-z}}} \) o \( f(z) = tanh(z) \)
Para obtener los parámetros \( W,b \) utilizo un conjunto de entrenamiento de \( m \) muestras \( (x^{(i)}, y^{(i)} ) \) y busco minimizar la siguiente función:
\begin{eqnarray*} J(\textbf{W}, \textbf{b}, \textbf{x}, \textbf{y}) = { 1 \over 2 } \Vert h_{\textbf{W,b}}(\textbf{x}) - \textbf{y} \Vert^2 \\ \end{eqnarray*}
La fórmula completa si ahora promedio sobre mi conjunto de \( m \) muestras es:
\begin{eqnarray*} J(\textbf{W}, \textbf{b}) = { 1 \over m } \left [ \sum_{i=1}^{m} J(\textbf{W}, \textbf{b}, \textbf{x}^{(i)}, \textbf{y}^{(i)}) \right ] + {\lambda \over 2} \sum_{l=1}^{n_l - 1} \sum_{i=1}^{s_l} \sum_{j=1}^{s_{l+1}} \left ( \textbf{W}_{ji}^{(l)} \right ) ^2 \\ \end{eqnarray*}
Para minimizar \( J(\textbf{W}, \textbf{b}) \) hay un algoritmo standard llamado gradient descent
Básicamente la matriz de pesos se actualiza mediante la siguiente regla:
\begin{eqnarray*} \textbf{W}_{ij}^{(l)} & := \textbf{W}_{ij}^{(l)} - \alpha { \partial \over {\partial \textbf{W}_{ij}^{(l)}} } J(\textbf{W}, \textbf{b}) \\ \textbf{b}_{i}^{(l)} & := \textbf{b}_{i}^{(l)} - \alpha { \partial \over {\partial \textbf{b}_{i}^{(l)}} } J(\textbf{W}, \textbf{b}) \end{eqnarray*}
Para calcular las derivadas hay un algoritmo eficiente llamado Backpropagation
Las más simples tienen unas pocas capas. El ejemplo de abajo tiene una capa entrada, 2 capas escondidas y una de salida
Otra forma de ver cómo están conectadas las capas
Una red neuronal que implementa la función identidad (\( \mathbb{I} \))
Link a la charla: http://bit.ly/ml-2018