Este documento explora diversas técnicas y arquitecturas utilizadas para optimizar modelos de aprendizaje profundo (Deep Learning), abordando desde la regularización y el ajuste de hiperparámetros hasta el diseño de arquitecturas específicas.
Técnicas de Regularización
La regularización es crucial para prevenir el sobreajuste (overfitting) y mejorar la generalización del modelo. A continuación, se presentan algunas técnicas clave:
- EarlyStopping: Esta técnica detiene automáticamente el entrenamiento cuando se empieza a producir el overfitting.
- Regul.pesos: Introduce limitaciones en los pesos o parámetros de la red para reducir la capacidad de aprendizaje. La L2-regularización es un ejemplo. Se aplica solo durante el entrenamiento.
- Dropout: Es una técnica indirecta de regularización que apaga aleatoriamente un porcentaje (
dropout_rate
) de las neuronas en cada paso de entrenamiento, evitando el overfitting. Este proceso solo se produce durante el entrenamiento, y se compensa escalando el output de cada capa.
Data Augmentation
La Data Augmentation es una técnica efectiva para mejorar la robustez del modelo frente a cambios en los datos. Consiste en la generación aleatoria de datos de entrenamiento mediante la perturbación de los datos originales del dataset. Se distinguen dos tipos de transformaciones:
- Transformaciones que dejan invariantes las etiquetas: Aumentan virtualmente el tamaño del dataset.
- Transformaciones que modifican ligeramente las etiquetas: Aumentan el bias y reducen la varianza del modelo.
Técnicas de Optimización
Estas técnicas buscan mejorar la eficiencia y el rendimiento del entrenamiento:
- Batchsize: Existe un trade-off entre el tamaño del batch size y el score.
- Batch Normalization (BN): Es una técnica potente para reducir los tiempos de entrenamiento y permitir el entrenamiento de redes neuronales profundas. Sirve para homogeneizar los datos y hacerlos menos dependientes del problema. Se implementa en la mayoría de las capas, pero no en la última. Durante el test time, el BN se congela.
- 1×1 convs: Las capas convolucionales 1×1 pueden reducir la dimensión de las features y obtener un modelo con menos parámetros sin disminuir su eficiencia. Se separa el aprendizaje de features con el espacial. Es recomendable su uso antes de la parte de clasificación.
- Selección correcta del tamaño del modelo: Dependiendo del caso de uso, puede ser preferible reducir el score del modelo si con ello se gana en rendimiento.
- Callbacks: El uso de callbacks como EarlyStopping o ReduceLROnPlateau es recomendable para entrenamientos más eficientes.
TensorFlow Optimization
El desarrollo de aplicaciones con TensorFlow implica varios pasos clave:
- Análisis del problema: Evaluar la técnica que mejor se adapta al problema. Analizar la calidad del dataset y las features necesarias. Es recomendable hacer una prueba de concepto con un modelo simple.
- Limpieza y formato: Limpiar y dar formato específico a los datos, compatible con la entrada de una red neuronal. Normalizar los datos de entrada entre 0 y 1.
- Seleccionar la arquitectura y entrenamiento: Seleccionar el tipo de red adecuado. Construir la arquitectura y elegir las funciones necesarias para entrenar y validar la red. Seleccionar el optimizador y el learning rate adecuado.
- Fine tuning y evaluación: Optimizar los hiperparámetros sobre el conjunto de validación. Utilizar random search y luego grid search. El procedimiento de evaluación debe ser fijo. Evaluar el modelo sobre el conjunto de test solo una vez.
- Transfer Learning: Aplicar los mismos hiperparámetros empleados en otro problema similar con un dataset similar. Utilizar una parte de la red para obtener variables y otra para adaptarla al modelo.
Arquitecturas Específicas
Existen arquitecturas diseñadas para problemas específicos:
- Resnet: Utiliza módulos con saltos en las conexiones de neuronas para solucionar el vanishing gradient problem. Incorpora BatchNormalization y funciones de activación como ReLu.
- Autoencoders: Sirven para encontrar un espacio representativo del dataset. Constan de un codificador (reduce la dimensión) y un decodificador (recupera la preimagen). Se pueden usar para visualización, eliminación de ruido y transfer learning.
- U-Net: Diseñada para problemas de segmentación de imágenes. Son redes del tipo encoder acompañadas de módulos ResNet, funciones ReLu y BatchNormalization.
- GANs: Generan imágenes sintéticas similares a datos reales. Contienen un discriminador que distingue entre datos reales y sintéticos. Es un proceso iterativo que busca un punto de equilibrio.
- Super Resolution: Aumenta la resolución y la calidad de una imagen. Utiliza un generador (transforma la imagen de baja calidad a alta) y un discriminador (distingue entre imágenes de alta resolución reales y sintéticas). Se utiliza perceptual loss.