¿Qué es la Transferencia de Aprendizaje?

En este artículo veremos en qué consiste la Transferencia de Aprendizaje, una técnica del Deep Learning que permite aprovechar modelos pre-entrenados para resolver problemas relacionados y que de esta manera reduce los requerimientos en términos de cantidad de datos y capacidad de procesamiento requeridos.

¡Así que listo, comencemos!

Video

Como siempre, en el canal de YouTube se encuentra el video de este post:

Introducción

En los últimos años el Deep Learning ha permitido desarrollar sistemas de Inteligencia Artificial con un desempeño impresionante en tareas como el procesamiento de imágenes y video así como del lenguaje natural, por poner tan sólo algunos ejemplos.

Pero una limitación del Deep Learning es que cuando queremos entrenar un nuevo modelo requerimos usualmente cientos de miles o millones de datos así como equipos de cómputo altamente potentes, lo que hace muy difícil que en ocasiones nosotros mismos podamos crear un modelo totalmente desde cero.

Así que en este artículo vamos a discutir en detalle en qué consiste la Transferencia de Aprendizaje, una técnica que nos permite aprovechar modelos pre-entrenados para de alguna forma “personalizarlos” y usarlos para nuestro problema en particular, sin necesidad de tantos datos o de tantas capacidades computacionales.

Las limitaciones de entrenar un modelo de Deep Learning desde cero

Un modelo de Deep Learning, como por ejemplo una Red Neuronal, una Red Convolucional, una Red Recurrente o LSTM o una Red Transformer, esta diseñado para “aprender” a encontrar características en datos no estructurados (como por ejemplo el audio, las imágenes, el video o el texto) para de esta forma desarrollar tareas en áreas como el procesamiento de imágenes y video o la comprensión del lenguaje natural alcanzando desempeños similares a los de nosotros los humanos.

Pero para que estos modelos puedan desarrollar estas tareas tan complejas requieren muchísimos datos de entrenamiento y grandes capacidades computacionales.

Por poner sólo algunos ejemplos: GoogLeNet y ResNet son Redes Convolucionales que han sido usadas para la clasificación de imágenes logrando una exactitud impresionante. Pero para lograrlo han sido entrenadas usando un set de más de 1.2 millones de imágenes. Dependiendo del hardware que tengamos a disposición esto requeriría al menos unos cuantos días de entrenamiento usando una GPU.

Y otro ejemplo es GPT-3, el modelo de generación de texto creado por OpenAI, que requirió más de 45TB de archivos de texto para su entrenamiento y para el cual requeriríamos más de 1.000 GPUs y aproximadamente 1 mes para lograr entrenarlo.

¿Pero qué pasa si para nuestro problema en particular no contamos ni con la cantidad de datos suficientes ni con el hardware necesario para poder entrenar un modelo de Deep Learning desde cero? Pues en este caso tenemos una alternativa y es precisamente el uso de la Transferencia de Aprendizaje.

La Transferencia de Aprendizaje: idea intuitiva

Veamos un ejemplo práctico y sencillo que nos permitirá entender de manera intuitiva qué es esto de la Transferencia de Aprendizaje.

Supongamos que deseamos construir una Red Convolucional capaz de clasificar flores, para lo cual hemos recolectado casi unas 4.000 imágenes que contienen flores de diferentes tipos.

Si intentamos entrenar este modelo desde cero no lograríamos tener un buen desempeño, pues la cantidad de imágenes de entrenamiento es muy limitada.

Pero qué pasa si en lugar de entrenar la red desde cero tomamos una red que ya haya sido entrenada previamente, para otro tipo de imágenes, y que sabemos que tiene un buen desempeño y la modificamos de alguna forma para que aprenda ahora a clasificar imágenes de flores.

En ese caso podríamos aprovechar el hecho de que esa otra red ya sabe extraer adecuadamente características generales de una imagen, pues ha sido entrenada con un set de datos gigantesco y por tanto tiene el potencial de funcionar adecuadamente para nuestro limitado set de datos que contiene simplemente imágenes de flores.

Pues cuando queremos usar ese “conocimiento” que tiene la red pre-entrenada y aplicarlo a la solución de nuestro problema en particular, ¡lo que estamos haciendo es lo que se conoce precisamente como transferencia de aprendizaje!

La Transferencia de Aprendizaje: definición

Así que la Transferencia de Aprendizaje consiste en tomar un modelo pre-entrenado para una tarea determinada y reutilizarlo, con ligeras modificaciones, para resolver un problema similar pero para el cual no fue entrenado originalmente.

Por ejemplo: podemos tomar un modelo entrenado para segmentar imágenes médicas, es decir para detectar las diferentes regiones que componen la imagen y usar transferencia de aprendizaje para segmentar imágenes con otro tipo de contenido.

O podemos tomar un modelo entrenado para clasificar diferentes tipos de imágenes y usarlo para detección de rostros o para detección de objetos.

O en el ámbito del procesamiento del lenguaje natural podemos tomar un modelo entrenado para “entender” el lenguaje escrito, como por ejemplo BERT, y usarlo para que a partir de una pregunta encuentre la respuesta correspondiente en un texto de nuestro interés.

Y en realidad las aplicaciones de la Transferencia de Aprendizaje son muchísimas, todo depende del problema en particular que queramos resolver y de los modelos pre-entrenados a los cuales podamos tener acceso.

Formas de hacer la Transferencia de Aprendizaje

Muy bien, teniendo claro qué es la Transferencia de Aprendizaje veamos en detalle las diferentes formas de hacerlo.

La idea básica es que tomaremos el modelo pre-entrenado y luego lo afinaremos para de esta manera especializarlo en nuestro set de datos en particular.

Y en este proceso de afinación podemos usar tres enfoques:

Reemplazar y re-entrenar sólo las capas de salida

Cuando nuestro set de datos y el set de datos usado en el modelo pre-entrenado se asemejan lo suficiente, y además tenemos “pocos” datos de entrenamiento, podemos simplemente “congelar” las capas más profundas del modelo pre-entrenado (es decir podemos no entrenar estas capas) y en lugar de ello sólo quitar las capas de salida (encargadas de realizar la clasificación) y reemplazarlas por nuevas capas de salida adecuadas para la clasificación de nuestro set de datos. Y luego re-entrenamos el modelo pero teniendo en cuenta que únicamente se actualizarán los parámetros de estas capas de salida, por lo cual requeriremos sólo muy pocas iteraciones.

Este sería el caso de nuestro modelo para detección de flores: aprovechamos que el modelo pre-entrenado ha aprendido a detectar las características en cualquier tipo de imagen, así que estas mismas capas pueden detectar las características básicas de las flores. Así que lo único que resta es cambiar las capas de salida para que en lugar de clasificar cualquier tipo de imagen podamos diferenciar una flor de otra.

Afinar una parte del modelo

Otro enfoque consiste en “congelar” las primeras capas del modelo pre-entrenado (que extraen características básicas de los datos) y afinar las capas más profundas (que extraen características más complejas) junto con las capas de salida.

Este enfoque se puede usar si vemos que con sólo modificar la capa de salida no resulta suficiente.

Afinar todo el modelo

Si a pesar de intentar las dos alternativas anteriores el modelo aún no tiene el desempeño que buscamos, podemos tomar el modelo pre-entrenado, modificar las capas de salida y re-entrenar la totalidad del modelo (es decir todas las capas) pero usando tan sólo unas cuantas iteraciones.

Esto no es lo mismo que entrenar el modelo desde cero, pues los parámetros de la red ya no se inicializarán aleatoriamente sino que ya habrán sido previamente afinados con millones de ejemplos de entrenamiento. Así que sólo requerimos unas cuantas iteraciones para que el modelo pre-entrenado logre especializarse en nuestro set de datos.

Un ejemplo sería usar el modelo BERT, entrenado para comprender el lenguaje escrito, reemplazar las capas de salida por las que necesita nuestro set de datos, y usar tan sólo unas 10 iteraciones para afinarlo y que de esta forma aprenda por ejemplo para una tarea de pregunta-respuesta o de análisis de sentimientos.

Conclusión

Muy bien, como hemos visto el potencial de la transferencia de aprendizaje es inmenso porque en últimas podremos afinar un modelo entrenado previamente y lograr que funcione adecuadamente para nuestro set de datos y para esto no será necesario contar con un set de datos inmenso ni tener un hardware tremendamente potente.

Si tienes alguna duda de este artículo no dudes en contactarme diligenciando el siguiente formulario:

Debes introducir tu nombre.
Debes introducir tu apellido.
Debes introducir un email válido.
Debes introducir un mensaje.
Debes aceptar la política de privacidad.