“Una cadena de votantes; cada uno sopesa las pruebas y pasa una estimación al siguiente.”
Una neurona, una decisión
La unidad atómica es la neurona. Toma un puñado de números como entrada, multiplica cada uno por un peso, suma una constante (el sesgo), y aplasta el resultado a través de una función no lineal. Salida: un número. Eso es todo. No ocurre nada biológico.
Si piensas en las entradas como pruebas y en los pesos como cuánto importa cada prueba, una neurona es una pequeña cabina de votación. «¿Mostraba esta foto un bigote? ¿una oreja puntiaguda? ¿pelaje? Sí, sí, sí: salida: puntuación alta para gato.»
Por qué capas, y por qué «profunda»
Una sola capa de neuronas solo puede aprender distinciones en línea recta: «¿está este punto por encima o por debajo de la línea?» Apila dos capas y puedes aprender curvas. Apila diez y puedes aprender lo que quieras, con suficientes datos. Esto es, formalmente, el «teorema de aproximación universal».
El truco interesante es lo que ocurre dentro de las redes profundas: cada capa aprende una característica algo más abstracta que la de debajo. En las redes de visión, la primera capa detecta bordes, la segunda esquinas y texturas, la quinta ojos y ruedas, la décima caras y coches. Nadie programó esta jerarquía; emerge del objetivo de entrenamiento.
El aplastamiento no lineal
Entre cada dos capas hay una pequeña función no lineal aplicada a cada salida. Las habituales: ReLU («si es negativo, salida cero; si no, consérvalo»), GELU, sigmoide, tanh. Sin ella, apilar capas no sirve de nada; toda la red colapsaría matemáticamente en una sola capa.
La no linealidad es toda la razón por la que las redes profundas pueden modelar curvas, formas y decisiones que una sola capa no puede. Es un pequeño detalle que hace un trabajo estructural enorme.
Cómo calcula de verdad una red
En la práctica, nunca calculas una neurona cada vez. Toda una capa es una gran multiplicación de matrices: vector de entrada por matriz de pesos, más vector de sesgos, aplicación de la no linealidad, vector de salida. La capa siguiente toma esa salida y hace lo mismo. Toda la red no es más que una cadena de multiplicaciones de matrices intercaladas con no linealidades.
Por eso las GPU importan tanto. Las GPU se construyeron para los gráficos, y los gráficos son multiplicaciones de matrices. Resultaron ser el hardware perfecto para algo para lo que nadie las diseñó. Todo el auge de la IA cabalga sobre esta casualidad.
# forward pass, two layers, in 5 lines
h1 = relu(x @ W1 + b1) # input -> hidden
y = h1 @ W2 + b2 # hidden -> output
# x: input vector
# W1, W2: weight matrices
# b1, b2: bias vectors
# relu: max(0, ...) applied elementwise
La retropropagación, en un párrafo
Entrenar una red significa ajustar cada matriz de pesos y cada vector de sesgos para que la pérdida sea menor. Para saber en qué sentido ajustarlos, necesitas el gradiente de la pérdida respecto a cada parámetro. Calcularlo de forma ingenua es inviable: puede haber cientos de miles de millones de parámetros. La retropropagación es el truco que los calcula todos en una sola pasada hacia atrás, aplicando la regla de la cadena capa por capa. Se ejecuta en aproximadamente el mismo tiempo que la pasada hacia delante.
La retropropagación fue la llave que volvió prácticas las redes profundas. Las matemáticas son las mismas desde 1986; la razón por la que la usamos hoy y no en 1986 es que las GPU nos permiten ejecutarla en redes un millón de veces más grandes.
Un momento: ¿dónde está la parte del lenguaje?
Todo lo anterior es genérico. Una red neuronal para fotos de gatos y una red neuronal para texto se parecen a este nivel: multiplicaciones de matrices y no linealidades. Lo que hace que una sea buena con imágenes y otra buena con el lenguaje es (a) qué le metes y (b) cómo están cableadas las capas. Nos encontraremos con el cableado específico del lenguaje, embeddings y atención, en los capítulos 4 y 5.
Una línea por cada uno
- Una neurona es una suma ponderada seguida de un aplastamiento no lineal. Ese es todo el átomo.
- Las capas apilan neuronas; la profundidad permite que la red aprenda una jerarquía de abstracción sin que se lo digan.
- Todo el cálculo son multiplicaciones de matrices intercaladas con no linealidades, por lo que ganaron las GPU.
- La retropropagación es cómo se calculan los gradientes de forma eficiente a través de cientos de miles de millones de parámetros.
Adónde ir ahora