23.5. Transferir aprendizaje y ajuste: extracción de funciones
El aprendizaje por transferencia es una poderosa técnica en el campo de la Inteligencia Artificial, particularmente en Machine Learning y Deep Learning, que permite aplicar los conocimientos adquiridos en un problema a otro, similar pero no idéntico. Esta técnica es especialmente útil cuando tenemos un conjunto de datos limitado para entrenar un modelo complejo desde cero. En su lugar, podemos aprovechar un modelo previamente entrenado, que ha sido entrenado en un gran conjunto de datos, y adaptarlo a nuestras necesidades específicas. Esto se conoce como aprendizaje por transferencia.
Uno de los enfoques de aprendizaje por transferencia es utilizar un modelo previamente entrenado como extractor de características (extractor de características). En este contexto, las capas iniciales del modelo previamente entrenado se utilizan para extraer características relevantes de los datos de entrada. Luego, estas características se pasan a nuevas capas que se entrenan desde cero para realizar la tarea específica de interés.
¿Por qué utilizar Transfer Learning como extractor de funciones?
Las redes neuronales profundas, como las redes convolucionales (CNN), tienen la capacidad de capturar características jerárquicas de los datos. Las primeras capas generalmente capturan características genéricas (como bordes y texturas), mientras que las capas más profundas capturan características más específicas del conjunto de datos en el que fueron entrenados. Al congelar estas capas iniciales y usar solo su salida, podemos aprovechar estas características genéricas sin necesidad de volver a entrenar toda la red.
¿Cómo implementar el extractor de funciones?
Para implementar un extractor de funciones usando un modelo previamente entrenado en Python, podemos usar bibliotecas como TensorFlow o PyTorch, que ofrecen una variedad de modelos previamente entrenados a través de sus módulos de aplicación (tf.keras.applications i> o torchvision.models, respectivamente).
Aquí hay un ejemplo simplificado usando TensorFlow:
de tensorflow.keras.applications importar VGG16 de tensorflow.keras.models importar modelo de tensorflow.keras.layers importar Denso, Aplanar, Entrada # Cargue el modelo VGG16 previamente entrenado sin capas superiores base_model = VGG16(pesos='imagenet', include_top=False) # Congelar capas del modelo base para capa en base_model.layers: capa.entrenable = Falso # Agregar nuevas capas que serán entrenadas x = Aplanar() (base_model.output) x = Denso(1024, activación='relu')(x) predicciones = Denso(num_classes, activación='softmax')(x) # Crea el modelo final modelo = Modelo(entradas=modelo_base.entrada, salidas=predicciones)
Este código carga el modelo VGG16 con pesos previamente entrenados en ImageNet y sin las capas superiores. Las capas del modelo base están congeladas, lo que significa que sus pesos no se actualizarán durante el entrenamiento. Luego agregamos nuevas capas que serán entrenadas para la tarea específica.
Ajuste: Ajuste del modelo
Además de utilizar un modelo pre-entrenado como extractor de características, podemos realizar un proceso llamado ajuste fino, que consiste en ajustar los pesos de algunas de las capas del modelo pre-entrenado. modelo junto con las nuevas capas. Esto permite que el modelo se adapte aún más a las características específicas del nuevo conjunto de datos.
Para realizar ajustes, después de entrenar las nuevas capas, descongelamos algunas de las últimas capas del modelo base y continuamos entrenando. Es importante utilizar una tasa de aprendizaje muy baja durante este proceso para evitar perder la información útil que ya tiene el modelo.
Consideraciones importantes
Al utilizar el aprendizaje por transferencia, es fundamental comprender la naturaleza del conjunto de datos original y la tarea para la que se desarrolló el modelo previamente entrenado. La eficacia del aprendizaje por transferencia puede verse comprometida si las características del nuevo conjunto de datos son muy diferentes de las del conjunto de datos original.
Además, al realizar ajustes, es importante monitorear el rendimiento del modelo para evitar el sobreajuste (overfitting), ya que el modelo puede volverse demasiado especializado en el características del nuevo conjunto de datos y perder la capacidad de generalizar.
En resumen, el aprendizaje por transferencia y el ajuste son técnicas poderosas que pueden ahorrar tiempo y recursos computacionales, permitiendo adaptar modelos complejos para nuevas tareas con menos datos. Con el enfoque del extractor de características, podemos reutilizar el conocimiento de modelos previamente entrenados y enfocar el entrenamiento en nuevas capas adaptadas a la tarea específica, mientras que el ajuste fino permite un ajuste más preciso del modelo a las características del nuevo setdatos.