Introducción
Las redes neuronales son un conjunto de algoritmos inspirados en el funcionamiento del cerebro humano, diseñados para reconocer patrones. Son una de las técnicas más poderosas y versátiles en el campo del Machine Learning, especialmente útiles para tareas complejas como el reconocimiento de imágenes, el procesamiento del lenguaje natural y la predicción de series temporales.
Conceptos Clave
- Neuronas Artificiales: La unidad básica de una red neuronal, similar a una neurona biológica.
- Capas: Las redes neuronales están compuestas por capas de neuronas. Hay tres tipos principales de capas:
- Capa de entrada: Recibe las características de los datos de entrada.
- Capas ocultas: Procesan las entradas a través de una serie de transformaciones.
- Capa de salida: Produce la predicción final.
- Pesos y Sesgos: Los pesos determinan la importancia de cada entrada, y los sesgos permiten ajustar la salida de la neurona.
- Función de Activación: Introduce no linealidad en el modelo, permitiendo a la red aprender relaciones complejas. Ejemplos comunes incluyen ReLU, Sigmoid y Tanh.
- Propagación hacia Adelante (Forward Propagation): El proceso de pasar las entradas a través de la red para obtener una salida.
- Propagación hacia Atrás (Backpropagation): El proceso de ajustar los pesos y sesgos de la red para minimizar el error de predicción.
Arquitectura de una Red Neuronal
Estructura Básica
Capa | Descripción |
---|---|
Entrada | Recibe los datos de entrada. |
Oculta | Realiza cálculos intermedios para transformar las entradas en salidas. |
Salida | Proporciona la predicción final del modelo. |
Ejemplo de Red Neuronal
import numpy as np # Función de activación Sigmoid def sigmoid(x): return 1 / (1 + np.exp(-x)) # Derivada de la función Sigmoid def sigmoid_derivative(x): return x * (1 - x) # Datos de entrada (4 ejemplos con 3 características cada uno) inputs = np.array([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]]) # Salidas esperadas outputs = np.array([[0], [1], [1], [0]]) # Inicialización de pesos aleatorios np.random.seed(1) weights = 2 * np.random.random((3, 1)) - 1 # Entrenamiento de la red neuronal for epoch in range(10000): # Propagación hacia adelante input_layer = inputs outputs_pred = sigmoid(np.dot(input_layer, weights)) # Cálculo del error error = outputs - outputs_pred # Ajuste de pesos mediante backpropagation adjustments = error * sigmoid_derivative(outputs_pred) weights += np.dot(input_layer.T, adjustments) print("Pesos ajustados después del entrenamiento:") print(weights) print("Salida después del entrenamiento:") print(outputs_pred)
Explicación del Código
- Función de Activación Sigmoid: Se utiliza para introducir no linealidad en la red.
- Datos de Entrada y Salida: Se definen los datos de entrada y las salidas esperadas.
- Inicialización de Pesos: Los pesos se inicializan aleatoriamente.
- Entrenamiento: Se realiza la propagación hacia adelante para calcular las salidas predichas y luego se ajustan los pesos utilizando backpropagation.
Ejercicio Práctico
Ejercicio
Implementa una red neuronal simple para resolver el problema XOR. El problema XOR es un problema clásico en el que la salida es 1 si una de las entradas es 1, pero no ambas.
Datos de Entrada y Salida
Entrada 1 | Entrada 2 | Salida |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Solución
import numpy as np # Función de activación Sigmoid def sigmoid(x): return 1 / (1 + np.exp(-x)) # Derivada de la función Sigmoid def sigmoid_derivative(x): return x * (1 - x) # Datos de entrada (4 ejemplos con 2 características cada uno) inputs = np.array([[0, 0], [0, 1], [1, 0], [1, 1]]) # Salidas esperadas outputs = np.array([[0], [1], [1], [0]]) # Inicialización de pesos aleatorios np.random.seed(1) weights_input_hidden = 2 * np.random.random((2, 2)) - 1 weights_hidden_output = 2 * np.random.random((2, 1)) - 1 # Entrenamiento de la red neuronal for epoch in range(10000): # Propagación hacia adelante input_layer = inputs hidden_layer = sigmoid(np.dot(input_layer, weights_input_hidden)) output_layer = sigmoid(np.dot(hidden_layer, weights_hidden_output)) # Cálculo del error error_output_layer = outputs - output_layer error_hidden_layer = error_output_layer.dot(weights_hidden_output.T) * sigmoid_derivative(hidden_layer) # Ajuste de pesos mediante backpropagation adjustments_hidden_output = hidden_layer.T.dot(error_output_layer * sigmoid_derivative(output_layer)) adjustments_input_hidden = input_layer.T.dot(error_hidden_layer) weights_hidden_output += adjustments_hidden_output weights_input_hidden += adjustments_input_hidden print("Pesos ajustados después del entrenamiento:") print("Pesos de entrada a capa oculta:") print(weights_input_hidden) print("Pesos de capa oculta a salida:") print(weights_hidden_output) print("Salida después del entrenamiento:") print(output_layer)
Explicación del Código
- Datos de Entrada y Salida: Se definen los datos de entrada y las salidas esperadas para el problema XOR.
- Inicialización de Pesos: Los pesos se inicializan aleatoriamente para las conexiones entre la capa de entrada y la capa oculta, y entre la capa oculta y la capa de salida.
- Entrenamiento: Se realiza la propagación hacia adelante para calcular las salidas predichas y luego se ajustan los pesos utilizando backpropagation.
Conclusión
En esta sección, hemos cubierto los conceptos básicos de las redes neuronales, incluyendo su estructura y funcionamiento. También hemos implementado una red neuronal simple para resolver el problema XOR. Las redes neuronales son una herramienta poderosa en el Machine Learning y son la base de técnicas más avanzadas como el Deep Learning. En el siguiente módulo, exploraremos algoritmos de Machine Learning no supervisado, como el clustering y el análisis de componentes principales.
Curso de Machine Learning
Módulo 1: Introducción al Machine Learning
- ¿Qué es el Machine Learning?
- Historia y evolución del Machine Learning
- Tipos de Machine Learning
- Aplicaciones del Machine Learning
Módulo 2: Fundamentos de Estadística y Probabilidad
- Conceptos básicos de estadística
- Distribuciones de probabilidad
- Inferencia estadística
- Teorema de Bayes
Módulo 3: Preprocesamiento de Datos
Módulo 4: Algoritmos de Machine Learning Supervisado
- Regresión lineal
- Regresión logística
- Árboles de decisión
- Máquinas de soporte vectorial (SVM)
- K-Vecinos más cercanos (K-NN)
- Redes neuronales
Módulo 5: Algoritmos de Machine Learning No Supervisado
- Clustering: K-means
- Clustering jerárquico
- Análisis de componentes principales (PCA)
- Análisis de agrupamiento DBSCAN
Módulo 6: Evaluación y Validación de Modelos
Módulo 7: Técnicas Avanzadas y Optimización
- Ensemble Learning
- Gradient Boosting
- Redes neuronales profundas (Deep Learning)
- Optimización de hiperparámetros
Módulo 8: Implementación y Despliegue de Modelos
- Frameworks y bibliotecas populares
- Implementación de modelos en producción
- Mantenimiento y monitoreo de modelos
- Consideraciones éticas y de privacidad
Módulo 9: Proyectos Prácticos
- Proyecto 1: Predicción de precios de viviendas
- Proyecto 2: Clasificación de imágenes
- Proyecto 3: Análisis de sentimientos en redes sociales
- Proyecto 4: Detección de fraudes