La primera vez que vi una red neuronal dibujada, con sus circulitos y sus flechas, pensé que era otra cosa que la estadística de toda la vida. Luego me tocó programar una regresión logística a mano y me hice la pregunta tonta de esta lección: ¿una regresión logística es una red neuronal?
La respuesta corta es que sí. Una regresión logística es una red neuronal de una sola neurona. No se parecen ni son primas: son el mismo modelo con dos nombres. Si es la misma neurona, la pregunta interesante cambia: ¿qué añaden las redes grandes, y cuándo merece la pena pagarlas?
Elige tu carta: ♣ si empiezas de cero, ♦ si sabes qué es una función o una media, ♠ si quieres la notación. Puedes cambiarla en cualquier momento.
Una neurona, dos nombres
Novato
Imagina que quieres adivinar si mañana lloverá. Miras pistas: hay nubes, hace viento, por la tarde sale el sol. No todas cuentan igual: las nubes pesan mucho, el viento un poco y el sol resta. Sumas lo que pesa cada pista, y esa suma mueve una aguja que va de “seguro que no” a “seguro que sí”.
Esa balanza es una regresión logística, un método de estadística de toda la vida para responder preguntas de sí o no. Y también es una neurona, la pieza con la que se construyen las redes neuronales. Es la misma balanza con dos nombres.
Falta lo más importante: aprender. Al principio, la balanza no sabe cuánto pesa cada pista. Le enseñas muchos días pasados y, cada vez que falla, le echas una bronca, más gorda cuanto más segura estaba. Para evitar broncas, la balanza va ajustando los pesos poco a poco. Y con esta balanza pasa algo tranquilizador: empieces por donde empieces, siempre acabas en los mismos pesos.
Intermedio
Una regresión logística tiene tres piezas, y conviene conocerlas porque cada una explica un fallo distinto.
1. Una suma con pesos. Cada columna de tus datos se multiplica por un número, su peso, y todo se suma junto con un término fijo. Al resultado lo llamaremos la puntuación. Todo lo que el modelo sabe está ahí: si la señal está en una combinación de dos columnas o en una curva, el modelo no la ve a menos que se la des ya construida.
2. La sigmoide. Es una curva en forma de S que aplasta cualquier puntuación entre 0 y 1: una muy negativa da casi 0, una muy positiva casi 1, y cero da justo 0,5. No está elegida por estética: sale de suponer que la respuesta es una moneda trucada cuyo truco depende de una suma con pesos. Por eso lo que devuelve se puede leer como una probabilidad.
3. El castigo. Compara la probabilidad con la respuesta correcta y castiga mucho estar muy seguro y equivocarse. En la jerga se llama pérdida; esta en concreto, log-loss o entropía cruzada. Para aprender, el modelo mira hacia dónde baja el castigo y mueve los pesos un poco en esa dirección, una y otra vez: es el descenso de gradiente.
Y aquí está la propiedad que lo cambia todo: en la regresión logística, el castigo tiene un solo fondo. Cualquier forma de bajar llega al mismo sitio, así que la semilla aleatoria da igual. Una red con capas ocultas pierde esa garantía: tiene muchos valles, y dónde acabas depende de dónde empiezas.
Lo comprobé: la regresión logística de scikit-learn y una neurona entrenada a mano dan los mismos pesos hasta el tercer decimal. Un detalle práctico: muchas librerías añaden por defecto un freno que encoge los pesos, así que, si quieres leerlos, quítalo.
Técnico
| En ♦ decíamos | En ♠ se escribe |
|---|---|
| la puntuación | z = wᵀx + b |
| los pesos; el término fijo | w ∈ ℝᵈ; b (sesgo) |
| la sigmoide, que aplasta entre 0 y 1 | σ(z) = 1/(1 + e⁻ᶻ) |
| la probabilidad | p = σ(z) = P(y = 1 | x) |
| una moneda trucada | y ~ Bernoulli(p); enlace logit (GLM) |
| el castigo (pérdida, log-loss) | BCE = −[y log p + (1 − y) log(1 − p)] |
| hacia dónde baja el castigo | −∇L = −Xᵀ(p − y)/n |
| un solo fondo | convexa: ∇²L = XᵀSX/n ⪰ 0 |
| un freno que encoge los pesos | regularización L2; en sklearn, C = 1/λ |
La regresión logística es un modelo lineal generalizado: y ~ Bernoulli(p) con enlace canónico logit, así que logit(p) = wᵀx + b y p = σ(wᵀx + b). La sigmoide no es una elección de diseño: es la inversa del enlace canónico de la Bernoulli. Una neurona con activación σ entrenada con entropía cruzada binaria (BCE) es exactamente ese modelo, con la misma verosimilitud.
Con la pérdida media L(w) = (1/n) Σᵢ BCE(yᵢ, σ(wᵀxᵢ)), el gradiente es ∇L = Xᵀ(p − y)/n y la Hessiana, ∇²L = XᵀSX/n con S = diag(pᵢ(1 − pᵢ)). Como S tiene diagonal positiva, XᵀSX ⪰ 0: la pérdida es convexa, y estrictamente convexa si X tiene rango completo. Por eso el descenso de gradiente, Newton o IRLS llegan al mismo óptimo. Con datos separables, el óptimo no existe (‖w‖ → ∞) y hace falta regularizar.
Lo comprobé con scikit-learn sin regularización (C=np.inf) frente a una neurona entrenada con descenso de gradiente:
import numpy as np
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
X, y = make_classification(n_samples=2000, n_features=5,
flip_y=0.1, random_state=0)
clf = LogisticRegression(C=np.inf).fit(X, y)
w, b = np.zeros(5), 0.0
for _ in range(20000):
# una neurona: lineal + sigmoide
p = 1 / (1 + np.exp(-(X @ w + b)))
# gradiente de la log-loss
w -= 0.5 * X.T @ (p - y) / len(y)
b -= 0.5 * (p - y).mean()
# los mismos pesos
print(clf.coef_[0].round(3), w.round(3))Con scikit-learn 1.9.1, los pesos coinciden hasta el tercer decimal. No es casualidad de este conjunto de datos: es el mismo problema convexo resuelto por dos caminos.
Yo me pasé una semana creyendo que tenía que elegir entre estadística y deep learning. Resulta que llevaba años haciendo deep learning de una neurona sin saberlo.
Quién fabrica las features
Novato
Si la balanza del final es la misma, ¿qué tiene de especial una red neuronal grande? Lo que pasa antes de la balanza.
Piensa en una olla. Si cocinas con ingredientes ya picados, los echas y listo. Así son los datos en forma de tabla: edad, importe, número de visitas. Cada columna ya es una pista con sentido, y la balanza las pesa directamente.
Una foto es una patata entera. Un punto de color suelto no te dice si hay un gato. Alguien tiene que picar la foto en pistas útiles, como “aquí hay unas orejas” o “esto parece un bigote”. Las capas de una red neuronal hacen justo eso: aprenden solas a picar. A esas pistas fabricadas los entendidos las llaman features. Al final, todo cae en la misma olla: la misma balanza de antes.
Intermedio
Si la neurona del final es la misma, lo que añade una red profunda es lo que pasa antes de esa neurona. Una red con diez capas que responde sí o no es, en su última capa, una regresión logística. La diferencia es que sus entradas no son tus columnas: son features, combinaciones nuevas que las capas ocultas han aprendido de los datos.
El ejemplo clásico es el XOR: cuatro puntos en las esquinas de un cuadrado, con la clase cambiada en cada diagonal. Una neurona solo sabe trazar una recta, y ninguna recta los separa. Pero si le das una columna nueva, el producto de las dos columnas, los puntos se separan solos. Esa columna nueva es una feature: o la fabricas tú a mano, o la fabrica una capa oculta.
Esto da la regla práctica más útil que conozco. Si tus datos son una tabla y las columnas ya significan algo, las features buenas existen y las capas ocultas tienen poco que aportar. Si son píxeles, audio o texto, ninguna suma con pesos de píxeles ve un gato: alguien tiene que fabricar las features. Pueden fabricarlas las capas ocultas con tus datos, cientos de árboles que suman su voto (el boosting, en tablas) o un modelo ya entrenado con datos de medio mundo, del que solo ajustas el final.
Un detalle práctico: en las librerías de deep learning, la red devuelve la puntuación sin aplastar, y la sigmoide se aplica dentro del castigo, donde las cuentas no se rompen con números enormes.
Técnico
| En ♦ decíamos | En ♠ se escribe |
|---|---|
| las capas ocultas | h = tanh(W⁽¹⁾x + b⁽¹⁾) |
| las features que fabrican | h ∈ ℝ⁸: representación aprendida |
| la neurona del final | p = σ(w⁽²⁾ᵀh + b⁽²⁾) |
| el producto de las dos columnas | x₁x₂ |
| cientos de árboles que suman su voto | p = σ(Σₖ fₖ(x)), gradient boosting |
| un modelo ya entrenado con datos de medio mundo | embedding preentrenado + fine-tuning |
| la puntuación sin aplastar | logit z; BCEWithLogitsLoss |
Una red binaria de L capas es p = σ(wᵀφ(x) + b), con φ = h⁽ᴸ⁻¹⁾ ∘ … ∘ h⁽¹⁾ aprendida conjuntamente con w. Condicionada a φ, la última capa es una regresión logística sobre las features h. Lo mismo vale para casi todo clasificador binario actual: en boosting binario (XGBoost binary:logistic, LightGBM binary), p = σ(Σₖ fₖ(x)) con fₖ árboles; en un modelo preentrenado afinado, φ es el embedding.
En el XOR, con x ∈ {−1, 1}², la clase es y = 1 si x₁x₂ > 0: ningún hiperplano en (x₁, x₂) la separa, pero en (x₁, x₂, x₁x₂) basta el hiperplano x₁x₂ = 0. La capa oculta del laboratorio (8 neuronas tanh) llega a una frontera equivalente sin que nadie le diga qué producto buscar, a cambio de |θ| = 33 en lugar de 4, de perder la convexidad y de que W⁽¹⁾ ya no se lea.
Pruébalo. El XOR y el anillo son los dos ejemplos clásicos de puntos que una recta no puede separar. Elige un conjunto y un modelo, y entrénalo:
Lo que más me gusta de este experimento es la fila del medio. La misma neurona que fracasa con el XOR acierta en cuanto le das hecho a mano el producto de las dos coordenadas. La capa oculta llega al mismo sitio sin que nadie le diga qué buscar, a cambio de 33 números que ajustar en lugar de 4 y de que ya no puedas leer qué ha aprendido.
Por qué la sigmoide salió de las capas ocultas
Novato
Si una red es “muchas balanzas en fila”, lo natural sería usar la misma aguja, la de la curva en S, en todas. Así se hizo durante años, y salió mal.
Para aprender, una red recibe un aviso al final, “te has equivocado por tanto”, y ese aviso tiene que viajar hacia atrás, de la última capa a la primera, para que cada una ajuste sus pesos. Es como el teléfono escacharrado: cada capa con esa curva repite el aviso, como mucho, a un cuarto del volumen. Tras cinco personas, el mensaje llega a menos de la mitad de un uno por ciento. Con diez, no llega ni un susurro, y las primeras capas casi no aprenden.
La solución fue cambiar la aguja de las capas de en medio por otra que no baja el volumen cuando el aviso es positivo. La curva en S no se jubiló: se fue a trabajar de portera. Sigue al final de la red, para decir “88 % de que sí”, y dentro de los grandes modelos de lenguaje, decidiendo cuánta información deja pasar.
Intermedio
Si una red es “muchas neuronas logísticas apiladas”, lo natural sería usar sigmoides en todas las capas. Así se hizo durante años, y salió mal.
El motivo está en la pendiente de la sigmoide. Como mucho vale 0,25, justo en el centro de la S, y en los extremos es casi cero, porque la curva ya está plana. Para entrenar una red, el aviso de cuánto y hacia dónde mover cada peso (el gradiente) se calcula de la última capa a la primera, multiplicando por la pendiente de cada capa: eso es la retropropagación. Con varias sigmoides seguidas, lo que llega a la primera capa tiene un techo de 0,25 multiplicado por sí mismo una vez por capa, y eso antes de contar lo que estiran o encogen los pesos.
Con 10 capas, la señal que llega al principio es menos de una millonésima. Las primeras capas casi no aprenden. Es el problema del gradiente que se desvanece, que Hochreiter describió en 1991. En la práctica fue igual de malo: Glorot y Bengio entrenaron en 2010 redes de 5 capas ocultas y el error de test fue del 82,61 % con sigmoides, del 27,15 % con tangente hiperbólica y del 15,60 % con tangente hiperbólica y una inicialización mejor. En las capas ocultas, la sigmoide dejó su sitio a la ReLU, una función que deja pasar los positivos tal cual y pone a cero los negativos.
La sigmoide no desapareció: cambió de trabajo. Fuera de la cadena de capas ocultas no se multiplica por sí misma decenas de veces, y su rango de 0 a 1 es justo lo que hace falta para una probabilidad o para una puerta.
| Dónde | Qué hace la sigmoide |
|---|---|
| Salida de un clasificador de sí o no | Convierte la última puntuación en una probabilidad. Es la regresión logística del final de la red |
| Clasificación con varias etiquetas a la vez | Una sigmoide independiente por clase: una foto puede ser “playa” y “atardecer” |
| Puertas de las redes LSTM y GRU | Decide qué fracción de la memoria pasa, de 0 a 1 |
| SwiGLU, dentro de LLaMA y PaLM | Una rama, a través de una sigmoide, decide cuánto pasa de la otra |
Técnico
| En ♦ decíamos | En ♠ se escribe |
|---|---|
| la pendiente de la sigmoide | σ′(z) = σ(z)(1 − σ(z)) |
| como mucho 0,25 | σ′ ≤ ¼, con igualdad en z = 0 |
| el aviso de cuánto y hacia dónde mover cada peso (gradiente) | δ⁽ˡ⁾ = ∂L/∂z⁽ˡ⁾; ∂L/∂W⁽ˡ⁾ = δ⁽ˡ⁾h⁽ˡ⁻¹⁾ᵀ |
| multiplicar por la pendiente de cada capa (retropropagación) | δ⁽ˡ⁾ = diag(σ′(z⁽ˡ⁾)) W⁽ˡ⁺¹⁾ᵀ δ⁽ˡ⁺¹⁾ |
| 0,25 multiplicado por sí mismo una vez por capa | (¼)ⁿ |
| lo que estiran o encogen los pesos | ‖W⁽ˡ⁾‖ (norma espectral) |
| una inicialización mejor | Glorot/Xavier: Var(W) = 2/(nᵢₙ + nₒᵤₜ) |
| la ReLU | ReLU(z) = max(0, z) |
| una puerta | g = σ(Wx + b) ⊙ v |
Con h⁽ˡ⁾ = σ(z⁽ˡ⁾) y z⁽ˡ⁾ = W⁽ˡ⁾h⁽ˡ⁻¹⁾ + b⁽ˡ⁾, la retropropagación da δ⁽ˡ⁾ = diag(σ′(z⁽ˡ⁾)) W⁽ˡ⁺¹⁾ᵀ δ⁽ˡ⁺¹⁾, y el gradiente de la primera capa es ∂L/∂W⁽¹⁾ = δ⁽¹⁾xᵀ. Como σ′ = σ(1 − σ) ≤ ¼, con n capas sigmoides ‖δ⁽¹⁾‖ ≤ (¼)ⁿ ∏ₗ ‖W⁽ˡ⁾‖ · ‖∂L/∂h⁽ⁿ⁾‖. Salvo que las normas de los pesos compensen el factor 4 por capa, el gradiente decae exponencialmente con la profundidad (Hochreiter, 1991 y 1998). Si los |z| están en las colas, σ′ ≈ 0 y la cota es mucho más baja.
Glorot y Bengio (AISTATS 2010, Tabla 1) lo midieron con 5 capas ocultas en Shapeset-3×2: error de test del 82,61 % con sigmoide, 27,15 % con tanh y 15,60 % con tanh e inicialización normalizada, Var(W) = 2/(nᵢₙ + nₒᵤₜ), hoy llamada Xavier o Glorot. Además, σ no está centrada en cero: las activaciones medias de 0,5 sesgan las actualizaciones y saturan las capas altas. La ReLU, max(0, z), tiene derivada 1 en z > 0 y rompe el producto de factores menores que ¼.
Fuera de la cadena profunda, σ sigue en dos papeles: como enlace de salida, p = σ(z), en binario y en multietiqueta (una σ por clase en lugar de softmax), y como puerta multiplicativa. En una LSTM, la puerta de entrada es iₜ = σ(Wᵢ[hₜ₋₁, xₜ] + bᵢ). En SwiGLU (Shazeer, 2020), FFN(x) = (Swish(xW) ⊙ xV)W₂ con Swish(u) = u·σ(βu): LLaMA y PaLM la usan en cada bloque del transformer.
La sigmoide es como yo: la echaron de las capas ocultas y acabó de portera en todos los modelos de lenguaje.
Cuándo usar cada cosa
La decisión casi nunca va de “lo complejo que es el problema”. Va de qué forma tiene tu dato, cuántos ejemplos con la respuesta correcta tienes y quién tiene que entender cada decisión. Este árbol vale para los tres niveles:
Novato
Para pelar una naranja no te compras un robot de cocina. El robot es caro, tarda en montarse y, si algo sale mal, no sabes por qué. Compensa cuando tienes que hacer pan para un pueblo entero.
Con los modelos pasa igual. Si tus datos son una tabla con columnas que ya significan algo, la balanza de toda la vida suele bastar, y además puedes explicar cada decisión: “te he dicho que no por esta columna”. Si tus datos son fotos, sonido o texto, hace falta quien pique los ingredientes, y ahí sí compensa una red. Un consejo que sirve siempre: prueba primero la balanza. Tardas minutos y te dice cuánto tendría que ganar el robot para que merezca la pena.
Intermedio
Tabla: lo clásico casi siempre basta. Christodoulou y su equipo revisaron 71 estudios de predicción clínica con 282 comparaciones entre regresión logística y machine learning. Midieron el acierto con el AUC, la probabilidad de que el modelo puntúe más alto un caso positivo que uno negativo. En las comparaciones con poco riesgo de sesgo (estudios bien hechos), la diferencia fue cero. La ventaja del machine learning solo aparecía en los estudios con mucho riesgo de sesgo. Leí el resumen del artículo, no el texto completo. En tablas grandes donde nadie tiene que entender las decisiones, los árboles que suman su voto suelen ganar a las redes, y la logística sigue siendo el punto de comparación con el que empezar.
Imágenes, audio o texto: hace falta aprender las features. Pero no siempre hace falta un modelo enorme. Bucher y Martini compararon en 2024 modelos pequeños afinados (ya entrenados y ajustados con unos cientos de ejemplos propios) con grandes modelos de lenguaje sin ejemplos, que solo reciben las instrucciones:
En dos de las cuatro tareas, el mejor modelo de lenguaje sin ejemplos queda por debajo de decir siempre la clase más común. Los modelos afinados rinden bien con entre 200 y 500 ejemplos etiquetados, según los autores. Un modelo de lenguaje sin ejemplos sirve para empezar el primer día y para etiquetar esos primeros cientos de ejemplos, pero no suele ser lo que quieres en producción.
Un último aviso: que un número salga entre 0 y 1 no lo convierte en una probabilidad de fiar. La logística sale bien calibrada de serie: si dice 80 %, acierta alrededor del 80 % de las veces. Las redes profundas modernas, no tanto, aunque se puede arreglar después con un solo ajuste.
Técnico
| En ♦ decíamos | En ♠ se escribe |
|---|---|
| el acierto medido con el AUC | AUC = P(s(x⁺) > s(x⁻)) |
| la diferencia fue cero | Δ logit(AUC) = 0,00, IC 95 % [−0,18, 0,18] |
| riesgo de sesgo | RoB (risk of bias) |
| decir siempre la clase más común | baseline de clase mayoritaria |
| afinados; sin ejemplos | fine-tuning; zero-shot |
| árboles que suman su voto | GBDT (XGBoost, LightGBM) |
| bien calibrada | P(y = 1 | p̂ = q) ≈ q; ECE |
| un solo ajuste | temperature scaling: p = σ(z/T) |
Christodoulou et al. (J Clin Epidemiol, 2019): 71 estudios y 282 comparaciones. Con RoB bajo (145), Δ logit(AUC) = 0,00 [−0,18, 0,18]; con RoB alto (137), +0,34 [0,20, 0,47]. La ventaja aparente del ML se concentra donde la validación es peor. Solo leí el resumen. En un banco de 45 conjuntos tabulares, Grinsztajn et al. (2022) encuentran que los modelos de árboles siguen siendo el estado del arte con datos de tamaño medio (unas 10.000 filas): las redes sufren con features no informativas y con funciones objetivo irregulares.
En texto, Bucher y Martini (2024) comparan el mejor modelo afinado con el mejor LLM generativo zero-shot (GPT-3.5, GPT-4 y Claude 3 Opus) en cuatro tareas. En dos de ellas, el zero-shot queda por debajo del baseline de clase mayoritaria (0,73 y 0,50). Según los autores (§5.5), el fine-tuning rinde bien con entre 200 y 500 etiquetas.
Reto final
En tres frases
- Una regresión logística es una red neuronal de una sola neurona: la misma suma con pesos, la misma curva en S (la sigmoide) y el mismo castigo.
- Lo que añade el deep learning son las capas de antes, que fabrican las features; la sigmoide salió de esas capas porque apaga el aviso del error, y hoy trabaja en la salida y en las puertas.
- Si tus datos son una tabla con columnas que ya significan algo, empieza por la logística, que tarda minutos y te dice cuánto tiene que ganar lo complejo; si son píxeles, audio o texto, alguien tiene que fabricar las features.
Fuentes
- Regresión logística como modelo lineal generalizado y sigmoide como enlace canónico: Stanford CS229, apuntes. Convexidad de la log-loss: Boyd y Vandenberghe, Convex Optimization, §7.1.1.
- Valores por defecto de
LogisticRegression(L2,C=1.0): documentación de scikit-learn. - Gradiente que se desvanece y derivada máxima de la sigmoide: Hochreiter, tesis de 1991 (PDF, en alemán) y artículo de 1998 (PDF).
- Error de test con sigmoide, tanh y tanh con inicialización normalizada: Glorot y Bengio, AISTATS 2010, Tabla 1.
- SwiGLU: Shazeer, arXiv:2002.05202; su uso en LLaMA y PaLM. Puertas de LSTM: Hochreiter y Schmidhuber, 1997.
- Machine learning frente a regresión logística en predicción clínica: Christodoulou et al., J Clin Epidemiol 110, 12 (2019), doi:10.1016/j.jclinepi.2019.02.004. Leído el resumen.
- Árboles frente a redes en datos tabulares: Grinsztajn et al., arXiv:2207.08815.
- Modelos afinados frente a LLM sin ejemplos: Bucher y Martini, arXiv:2406.08660, Tablas 1 a 4 y §5.5.
- Calibración de redes modernas: Guo et al., ICML 2017, arXiv:1706.04599, Tabla 1.
BCEWithLogitsLoss: documentación de PyTorch.
Cómo está hecha esta lección: a partir de mis notas de machine learning, con ayuda de Claude para ordenarlas y redactar los tres niveles. Las cifras se comprobaron en las tablas originales de cada artículo el 4 de octubre de 2026. El laboratorio de la neurona entrena en tu navegador con descenso de gradiente, igual que el código del nivel ♠. Los dibujos son propios.