Introducción
Las Redes Neuronales Artificiales (ANN) son modelos computacionales inspirados en el cerebro biológico. Consisten en capas de unidades (neuronas) conectadas entre sí, capaces de aprender representaciones jerárquicas de los datos a partir de ejemplos. El Aprendizaje Profundo (Deep Learning) se refiere al uso de redes con múltiples capas ocultas que permiten aprender características abstractas de alto nivel.
Tema 1: Perceptrón y ADALINE
1.1 El Perceptrón (Rosenblatt, 1958)
El perceptrón es la unidad fundamental de las redes neuronales. Recibe n entradas x₁,...,x_n con pesos w₁,...,w_n y produce una salida binaria:
donde F es la función de activación (originalmente una función escalón). El perceptrón puede separar clases linealmente separables, pero falla con problemas no lineales como XOR.
1.2 ADALINE (Adaptive Linear Neuron)
ADALINE (Widrow y Hoff, 1960) usa una función de activación lineal durante el entrenamiento y minimiza el error cuadrático medio (MSE). La regla de actualización de pesos es la regla delta (gradiente descendente):
donde η es la tasa de aprendizaje. ADALINE fue el precursor de las reglas de gradiente descendente usadas hoy en Deep Learning.
Tema 2: Redes Multicapa (MLP)
2.1 Arquitectura general
Una red neuronal multicapa (Multilayer Perceptron, MLP) consiste en:
- Capa de entrada: recibe las características del problema
- Capas ocultas: transformaciones no lineales sucesivas (pueden ser muchas → "profundas")
- Capa de salida: produce la predicción final (clase, valor, distribución)
La clave es que cada neurona en una capa toma todas las salidas de la capa anterior, aplica una transformación lineal y luego una función de activación no lineal.
2.2 Funciones de activación
Las funciones de activación introducen la no linealidad que permite a las redes aprender representaciones complejas. Sin no linealidad, una red multicapa colapsaría a una sola transformación lineal.
| Función | Fórmula | Rango | Uso típico |
|---|---|---|---|
| Sigmoid | 1 / (1 + e⁻ˣ) | (0, 1) | Clasificación binaria (capa de salida) |
| Tanh | (eˣ − e⁻ˣ) / (eˣ + e⁻ˣ) | (−1, 1) | Capas ocultas (centrada en 0) |
| ReLU | max(0, x) | [0, ∞) | Capas ocultas en DNN (más eficiente) |
| Leaky ReLU | max(α·x, x), α pequeño | (−∞, ∞) | Evita "neuronas muertas" |
| ELU | x si x>0; α(eˣ−1) si x≤0 | (−α, ∞) | Alternativa suave a ReLU |
| Softmax | eᶻⁱ / Σⱼ eᶻʲ | (0, 1), suma=1 | Clasificación multiclase (capa de salida) |
ReLU es la más utilizada en capas ocultas de redes profundas porque: es computacionalmente eficiente, no sufre el problema del gradiente que desaparece (vanishing gradient) en las primeras capas, y produce activaciones sparse (muchas neuronas inactivas = 0).
Tema 3: Optimizadores
El entrenamiento de una red neuronal consiste en encontrar los pesos que minimicen la función de pérdida. Los optimizadores son los algoritmos que ajustan los pesos usando el gradiente de la pérdida.
3.1 SGD — Descenso de Gradiente Estocástico
Actualiza los pesos en la dirección contraria al gradiente, con tasa de aprendizaje η. Es simple pero sensible a la elección de η y puede converger lentamente.
3.2 Adam (Adaptive Moment Estimation) — El más utilizado
Adam combina las ventajas de AdaGrad y RMSprop: mantiene medias móviles exponenciales del gradiente (m_t, primer momento) y del cuadrado del gradiente (v_t, segundo momento):
Los valores típicos son β₁=0.9, β₂=0.999, η=0.001. Adam adapta la tasa de aprendizaje de cada parámetro individualmente, lo que lo hace muy robusto a diferentes escalas de gradiente.
3.3 Comparativa de optimizadores
| Optimizador | Tasa de aprendizaje | Recomendado |
|---|---|---|
| SGD | Fija | Con momentum para CV y NLP clásico |
| RMSprop | Adaptativa por parámetro | RNN y problemas con gradientes no estacionarios |
| Adam | Adaptativa con momentum | Uso general — recomendado por defecto |
| AdamW | Adam + weight decay | Transformers y modelos grandes (GPT, BERT) |
Tema 4: Proceso de Entrenamiento
4.1 Ciclo completo de entrenamiento
El entrenamiento de una red neuronal sigue un ciclo repetido para cada batch de datos:
- Forward Propagation: los datos pasan de la capa de entrada a la de salida capa a capa. Cada capa calcula a^(l) = F(W^(l)·a^(l-1) + b^(l)). Se obtiene la predicción ŷ.
- Cálculo de la Función de Pérdida: se mide el error entre ŷ e y. Para clasificación binaria: BCE = −[y·log(ŷ) + (1−y)·log(1−ŷ)]. Para regresión: MSE = (1/n)·Σ(y−ŷ)².
- Backpropagation: se calcula el gradiente de la pérdida respecto a cada peso aplicando la regla de la cadena hacia atrás (del output al input): δ^(l) = (W^(l+1))ᵀ · δ^(l+1) ⊙ F'(z^(l)).
- Actualización de pesos: el optimizador usa los gradientes para actualizar los pesos: W ← W − η·∇_W L.
4.2 Conceptos clave del entrenamiento
- Epoch: una pasada completa por todo el dataset de entrenamiento
- Batch size: número de ejemplos usados para calcular el gradiente en cada paso
- Mini-batch SGD: batch intermedio entre SGD puro (1 ejemplo) y Batch GD (todo el dataset)
- Learning rate schedule: reducir η progresivamente para mejorar convergencia
- Early stopping: parar el entrenamiento cuando la pérdida de validación deja de mejorar
- Dropout: desactivar neuronas aleatoriamente durante entrenamiento para regularizar
- Batch Normalization: normalizar activaciones de cada capa para estabilizar el entrenamiento
4.3 Implementación en Keras
import tensorflow as tf
from tensorflow import keras
# Definición de la arquitectura
model = keras.Sequential([
keras.layers.Dense(64, activation='relu', input_shape=(n_features,)),
keras.layers.Dropout(0.2),
keras.layers.Dense(32, activation='relu'),
keras.layers.Dense(1, activation='sigmoid') # clasificación binaria
])
# Compilación
model.compile(
optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy']
)
# Entrenamiento
history = model.fit(
X_train, y_train,
epochs=50,
batch_size=32,
validation_split=0.2,
callbacks=[keras.callbacks.EarlyStopping(patience=5)]
)4.4 Problemas comunes y soluciones
| Problema | Síntoma | Solución |
|---|---|---|
| Vanishing gradient | Capas profundas no aprenden | ReLU, BatchNorm, skip connections |
| Overfitting | Val loss sube, train loss baja | Dropout, L2 regularization, more data |
| Learning rate alto | Loss oscila o diverge | Reducir η, learning rate schedule |
| Neuronas muertas | ReLU siempre 0 | Leaky ReLU, ELU, inicialización correcta |