Esta semana el mundo académico de la inteligencia artificial está en estado de shock absoluto, y la onda expansiva está llegando a foros técnicos y sitios como Hacker News. Hace un par de meses, en la competición ILSVRC (ImageNet Large Scale Visual Recognition Challenge), un equipo de la Universidad de Toronto formado por Alex Krizhevsky, Ilya Sutskever y Geoffrey Hinton ha presentado algo que ha destrozado a la competencia.

Hasta ahora, la visión por ordenador funcionaba mediante "feature engineering". Expertos matemáticos diseñaban algoritmos (como SIFT o HOG) para detectar manualmente bordes, texturas o formas en una imagen, y luego se lo pasaban a un clasificador. Los mejores sistemas del mundo tenían un margen de error del 26%.

El algoritmo de este equipo, bautizado informalmente como "AlexNet", ha bajado la tasa de error al 15.3%. Es una humillación técnica al resto de investigadores. Y lo han hecho reviviendo una tecnología que muchos daban por muerta: las redes neuronales.

La fuerza bruta de las GPUs y la convolución

El paper "ImageNet Classification with Deep Convolutional Neural Networks" es fascinante de leer. Durante décadas, las redes neuronales profundas eran un suicidio computacional. Tardaban meses en entrenarse y sufrían del problema de la "desaparición del gradiente" (las neuronas dejaban de aprender a medida que añadías capas).

¿Qué ha cambiado? Dos cosas clave a nivel técnico.

Primero, el hardware. En lugar de usar la CPU, los investigadores han portado los cálculos matriciales masivos a la tarjeta gráfica (GPU). Específicamente, entrenaron su gigantesca red de 60 millones de parámetros en dos tarjetas NVIDIA GTX 580 de 3GB durante seis días seguidos. Las GPUs, diseñadas para calcular píxeles en videojuegos simultáneamente, resultan ser los motores matemáticos perfectos para las redes neuronales.

Segundo, la función de activación. Han descartado las clásicas funciones Sigmoide o Tangente Hiperbólica y han usado algo muy simple llamado ReLU (Rectified Linear Unit). A nivel de código, la matemática de una neurona ahora es tan tonta como esto:

# La función de activación ReLU que ha salvado el Deep Learning
def relu(x):
    # Si el valor es negativo, devuelve 0. Si es positivo, devuelve el valor.
    return max(0.0, x)

# Aplicado a una lista de valores resultantes de la suma ponderada
valores_salida = [-1.5, 2.3, 0.0, -0.8, 5.1]
valores_activados = [relu(x) for x in valores_salida]
# Resultado: [0.0, 2.3, 0.0, 0.0, 5.1]

Parece increíble que una simple función que convierte los negativos en cero haya resuelto el problema matemático que impedía entrenar redes con muchas capas ocultas. Además, es computacionalmente baratísima de calcular en una GPU.

Reflexión: ¿El fin del diseño manual de algoritmos?

Lo que me vuela la cabeza de AlexNet es el cambio de paradigma. Ya no tienes que programar un algoritmo para que busque las orejas de un gato en una foto. Si configuras una arquitectura de Red Neuronal Convolucional (CNN) y le vomitas millones de imágenes etiquetadas, las primeras capas matemáticas de la red "aprenden" por sí solas a detectar bordes, las capas medias aprenden a detectar texturas, y las capas finales identifican al gato.

El algoritmo aprende a extraer sus propias características. Si esto es cierto, y las GPUs siguen escalando en potencia bruta... ¿Qué será lo siguiente?