Del perceptrón a la red multicapa
Una neurona artificial es una regresión logística. Lo que cambia todo es apilarlas: con una capa oculta y una no linealidad alcanza para aproximar cualquier función continua.
Para este tema conviene tener claro:Regresión logística
Una neurona artificial hace algo que ya conocemos: suma sus entradas con pesos y aplica una función. Es una regresión logística con otro nombre. Todo el poder aparece al conectarlas en capas, y el motivo es más preciso de lo que suele contarse.
El perceptrón y lo que no podía
El perceptrón original, de 1958, calcula una suma ponderada y devuelve uno o cero según supere un umbral. Aprende ajustando los pesos ante cada error.
Su límite lo señalaron Minsky y Papert: al ser lineal, no puede representar el XOR, una función de dos variables trivial. Ese resultado frenó el campo durante años, y la respuesta —apilar capas— ya estaba disponible; lo que faltaba era cómo entrenarlas.
Antes de seguir, predecí
Apilar capas, y por qué hace falta la no linealidad
Una red multicapa conecta neuronas en niveles: la salida de una capa es la entrada de la siguiente. Las capas intermedias se llaman ocultas porque no se observan ni en la entrada ni en la salida.
Hay una condición que no se puede saltear: entre capas tiene que haber una no linealidad. Sin ella, componer transformaciones lineales da otra transformación lineal, y diez capas equivaldrían a
una sola. La no linealidad es lo que hace que apilar sirva.
Las activaciones: de la sigmoide a ReLU
La función que introduce esa no linealidad es la activación. La sigmoide fue la clásica y tiene un defecto grave: se satura en los extremos, donde su derivada es casi cero, y en una red profunda esos factores chicos se multiplican hasta que el gradiente desaparece.
ReLU —devolver el valor si es positivo y cero si no— resolvió eso con algo casi ridículo por lo simple: su derivada es uno en la zona positiva, así que el gradiente pasa intacto. Es barata y es el default; su problema conocido son las neuronas que quedan siempre en cero, y de ahí las variantes que dejan una pendiente pequeña del lado negativo.
El teorema de aproximación universal y su letra chica
El teorema de aproximación universal dice que una red con una sola capa oculta, suficientes neuronas y una activación no lineal puede aproximar cualquier función continua con la precisión que se quiera.
Conviene leerlo con cuidado, porque promete menos de lo que parece. Dice que existe esa red, no que el entrenamiento la vaya a encontrar. Y “suficientes neuronas” puede ser una cantidad impracticable: en la práctica, varias capas con pocas neuronas cada una representan lo mismo con muchísimos menos parámetros. La profundidad es una ventaja de eficiencia, no de expresividad.
Las decisiones de diseño, que son pocas
Las decisiones de diseño son pocas y concretas. Cuántas capas y de qué ancho —capacidad—. La activación, que hoy es ReLU o alguna variante. La capa de salida, que depende de la tarea: lineal para regresión, sigmoide para binaria, softmax para multiclase.
Y la inicialización de los pesos, que no es un detalle: arrancar todo en cero deja todas las neuronas de una capa calculando lo mismo para siempre, porque reciben gradientes idénticos. Se inicializa al azar con una escala calculada según el tamaño de la capa, justamente para que las señales no se apaguen ni exploten al atravesarla.
Cuándo una red y cuándo no
Para datos tabulares, una red multicapa rara vez le gana a un ensamble de árboles, y pide más trabajo: escalado, ajuste de hiperparámetros y más datos.
Donde domina es donde los atributos crudos no sirven por sí solos y hay que construir representaciones: imágenes, audio, texto. Ahí las capas aprenden una jerarquía de atributos que nadie programó, y esa es la diferencia real con los modelos clásicos.
Una red mínima, y lo que decide cada línea
import torch.nn as nn
modelo = nn.Sequential(
nn.Linear(entrada, 256),
nn.ReLU(), # sin esto, las tres capas equivalen a una sola
nn.BatchNorm1d(256), # estabiliza las escalas entre capas
nn.Dropout(0.3), # regulariza: apaga neuronas al azar en entrenamiento
nn.Linear(256, 64),
nn.ReLU(),
nn.Linear(64, 1), # sin activación al final: la pérdida la incluye
)La línea imprescindible es la primera ReLU. Sin una no linealidad entre capas, componer
transformaciones lineales da otra transformación lineal, y una red de veinte capas tendría
exactamente la misma capacidad expresiva que una sola.
La última capa sin activación es una convención que se equivoca seguido: las funciones de pérdida de clasificación de las bibliotecas aplican la sigmoide o la softmax internamente, por estabilidad numérica. Agregarla también en el modelo la aplica dos veces y el entrenamiento no converge.
Cuándo una red y cuándo no
| Tipo de dato | Qué conviene | Por qué |
|---|---|---|
| Tablas con columnas heterogéneas | boosting | las redes pierden y son más caras |
| Imágenes | convolucionales | la localidad es parte del problema |
| Texto | transformers preentrenados | aprender el idioma desde cero es carísimo |
| Audio y señales | redes | estructura temporal |
| Pocos datos etiquetados | modelo simple, o ajustar uno preentrenado | una red desde cero necesita muchísimo |
Cierre
Una neurona es una regresión logística; apilarlas sirve sólo si hay no linealidad entre capas. ReLU evita el desvanecimiento que traía la sigmoide, la aproximación universal existe pero no garantiza encontrarla, la profundidad ahorra parámetros y la inicialización decide si la red arranca a aprender.
Autoevaluación
¿Lo entendiste?
Práctica