- ¿Qué es una Red Neuronal?
Una red neuronal es un modelo computacional inspirado en la estructura y funcionamiento del cerebro humano. Está compuesta por unidades básicas llamadas neuronas o nodos, que están organizadas en capas. Las redes neuronales son capaces de aprender patrones complejos a partir de datos y se utilizan en una amplia variedad de aplicaciones, desde la clasificación de imágenes hasta el procesamiento del lenguaje natural.
Componentes Básicos de una Red Neuronal
- Neuronas: La unidad básica de una red neuronal. Cada neurona recibe una o más entradas, las procesa y produce una salida.
- Capas: Las neuronas están organizadas en capas:
- Capa de Entrada: Recibe los datos de entrada.
- Capas Ocultas: Procesan las entradas a través de múltiples transformaciones.
- Capa de Salida: Produce el resultado final.
- Pesos y Sesgos: Cada conexión entre neuronas tiene un peso asociado, y cada neurona tiene un sesgo. Los pesos y sesgos se ajustan durante el entrenamiento para minimizar el error.
- Funciones de Activación: Determinan la salida de una neurona dada una entrada. Ejemplos comunes incluyen la función sigmoide, ReLU (Rectified Linear Unit), y tanh.
- Cómo Funciona una Red Neuronal
Propagación Hacia Adelante (Forward Propagation)
En la propagación hacia adelante, los datos de entrada se pasan a través de la red, capa por capa, hasta que se produce una salida. Este proceso implica:
-
Cálculo de la Entrada Ponderada: Para cada neurona, se calcula la entrada ponderada como la suma de los productos de las entradas y sus pesos más el sesgo. \[ z = \sum_{i=1}^{n} (w_i \cdot x_i) + b \] Donde:
- \( z \) es la entrada ponderada.
- \( w_i \) son los pesos.
- \( x_i \) son las entradas.
- \( b \) es el sesgo.
-
Aplicación de la Función de Activación: La entrada ponderada se pasa a través de una función de activación para producir la salida de la neurona. \[ a = \sigma(z) \] Donde \( \sigma \) es la función de activación.
Ejemplo de Propagación Hacia Adelante
import torch import torch.nn as nn import torch.nn.functional as F # Definición de una red neuronal simple class SimpleNN(nn.Module): def __init__(self): super(SimpleNN, self).__init__() self.fc1 = nn.Linear(3, 5) # Capa oculta con 3 entradas y 5 salidas self.fc2 = nn.Linear(5, 1) # Capa de salida con 5 entradas y 1 salida def forward(self, x): x = F.relu(self.fc1(x)) # Aplicación de ReLU en la capa oculta x = torch.sigmoid(self.fc2(x)) # Aplicación de Sigmoid en la capa de salida return x # Creación de una instancia de la red y datos de entrada model = SimpleNN() input_data = torch.tensor([1.0, 2.0, 3.0]) # Propagación hacia adelante output = model(input_data) print(output)
Retropropagación (Backpropagation)
La retropropagación es el proceso mediante el cual la red ajusta sus pesos y sesgos para minimizar el error. Este proceso implica:
- Cálculo del Error: Se calcula el error entre la salida predicha y la salida real utilizando una función de pérdida.
- Cálculo del Gradiente: Se calcula el gradiente del error con respecto a cada peso y sesgo utilizando el algoritmo de retropropagación.
- Actualización de Pesos y Sesgos: Los pesos y sesgos se actualizan en la dirección opuesta al gradiente para reducir el error.
- Ejercicio Práctico
Ejercicio: Implementar una Red Neuronal Simple
Implementa una red neuronal simple con una capa oculta utilizando PyTorch. La red debe ser capaz de realizar una tarea de clasificación binaria.
Paso 1: Definir la Red Neuronal
import torch import torch.nn as nn import torch.optim as optim class SimpleNN(nn.Module): def __init__(self): super(SimpleNN, self).__init__() self.fc1 = nn.Linear(2, 4) # Capa oculta con 2 entradas y 4 salidas self.fc2 = nn.Linear(4, 1) # Capa de salida con 4 entradas y 1 salida def forward(self, x): x = torch.relu(self.fc1(x)) # Aplicación de ReLU en la capa oculta x = torch.sigmoid(self.fc2(x)) # Aplicación de Sigmoid en la capa de salida return x
Paso 2: Crear Datos de Entrenamiento
# Datos de entrenamiento (XOR problem) inputs = torch.tensor([[0.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 1.0]]) labels = torch.tensor([[0.0], [1.0], [1.0], [0.0]])
Paso 3: Entrenar la Red Neuronal
# Crear una instancia de la red model = SimpleNN() # Definir la función de pérdida y el optimizador criterion = nn.BCELoss() optimizer = optim.SGD(model.parameters(), lr=0.1) # Entrenamiento for epoch in range(1000): optimizer.zero_grad() # Limpiar los gradientes outputs = model(inputs) # Propagación hacia adelante loss = criterion(outputs, labels) # Calcular la pérdida loss.backward() # Retropropagación optimizer.step() # Actualizar los pesos if (epoch+1) % 100 == 0: print(f'Epoch [{epoch+1}/1000], Loss: {loss.item():.4f}')
Paso 4: Evaluar la Red Neuronal
# Evaluación with torch.no_grad(): outputs = model(inputs) predicted = (outputs > 0.5).float() accuracy = (predicted == labels).sum() / labels.size(0) print(f'Accuracy: {accuracy:.4f}')
Solución del Ejercicio
La red neuronal simple debería ser capaz de aprender la función XOR después de suficiente entrenamiento. La precisión debería acercarse a 1.0 (100%) después de 1000 épocas.
- Conclusión
En esta lección, hemos introducido los conceptos básicos de las redes neuronales, incluyendo su estructura y funcionamiento. Hemos aprendido sobre la propagación hacia adelante y la retropropagación, y hemos implementado una red neuronal simple utilizando PyTorch. En la próxima lección, profundizaremos en la creación de redes neuronales más complejas y exploraremos diferentes funciones de activación.
¡Felicidades por completar esta lección! Ahora estás listo para avanzar a la siguiente sección, donde crearás tu primera red neuronal simple en PyTorch.
PyTorch: De Principiante a Avanzado
Módulo 1: Introducción a PyTorch
- ¿Qué es PyTorch?
- Configuración del Entorno
- Operaciones Básicas con Tensores
- Autograd: Diferenciación Automática
Módulo 2: Construcción de Redes Neuronales
- Introducción a las Redes Neuronales
- Creación de una Red Neuronal Simple
- Funciones de Activación
- Funciones de Pérdida y Optimización
Módulo 3: Entrenamiento de Redes Neuronales
- Carga y Preprocesamiento de Datos
- Bucle de Entrenamiento
- Validación y Pruebas
- Guardar y Cargar Modelos
Módulo 4: Redes Neuronales Convolucionales (CNNs)
- Introducción a las CNNs
- Construcción de una CNN desde Cero
- Aprendizaje por Transferencia con Modelos Preentrenados
- Ajuste Fino de CNNs
Módulo 5: Redes Neuronales Recurrentes (RNNs)
- Introducción a las RNNs
- Construcción de una RNN desde Cero
- Redes de Memoria a Largo Plazo (LSTM)
- Unidades Recurrentes con Puerta (GRUs)
Módulo 6: Temas Avanzados
- Redes Generativas Antagónicas (GANs)
- Aprendizaje por Refuerzo con PyTorch
- Despliegue de Modelos PyTorch
- Optimización del Rendimiento