5.13 - BERT: la transferencia de aprendizaje en las Redes Transformer

Lección 13 de la sección “Redes Transformer” del curso Fundamentos de Deep Learning con Python.

Introducción

En la lección anterior logramos implementar y entrenar la Red Transformer concebida originalmente para resolver un problema de Machine Translation (o traducción de texto de un lenguaje a otro).

De igual forma, en la primera parte de esta sección hablamos de los bloques esenciales que conforman la arquitectura de la Red Transformer: el embedding, la codificación posicional y los codificadores y decodificadores, que a su vez contienen bloques atencionales y residuales, y que en conjunto permitían resolver el problema de la traducción de texto de un idioma a otro.

Pues resulta que estos bloques pueden ser combinados de diferentes formas para obtener nuevas funcionalidades, generando así arquitecturas derivadas de esta Red Transformer original que permiten resolver diferentes problemas del procesamiento del lenguaje natural.

En esta lección hablaremos de una primera arquitectura derivada de la Red Transformer, que se conoce como BERT y que introduce el concepto de transferencia de aprendizaje al área del Procesamiento del Lenguaje Natural, lo que ha permitido desarrollar aplicaciones muy interesantes en este campo. Veamos entonces en qué consiste esta arquitectura.

Contenido exclusivo suscriptores

Suscríbete para tener acceso al video con la explicación detallada de esta lección. Además podrás disfrutar de todos los cursos de la Academia Online

Bidirectional Encoder Representations for Transformers

BERT (sigla correspondiente a Bidirectional Encoder Representations for Transformers) fue desarrollada en el año 2018 por Jacob Devlin y otros investigadores de Google.

Atención bidireccional

Recordemos que la Red Transformer original tiene una etapa de codificación y una de decodificación. En el caso de la decodificación recordemos que cada decodificador contiene un bloque atencional con enmascaramiento, que evita que la red vea la salida que se supone debe predecir.

Pero para ciertas tareas este enmascaramiento no resulta útil. Supongamos la siguiente frase “el gato se sentó en ella porque era una alfombra muy cómoda”. Si por ejemplo enmascaramos la porción “… porque era una alfombra muy cómoda”, resultará muy difícil para el modelo inferir que “ella” se refiere a la alfombra, porque simplemente hemos ocultado esta parte de la información.

Así que los autores de BERT decidieron crear un modelo que fuese capaz de atender a todas las palabras de la secuencia, tanto a izquierda como a derecha de cada elemento. Y si analizamos la Red Transformer original veremos que esta atención bidireccional está ya implementada en la codificación. Así que los autores de BERT decidieron eliminar el decodificador y usar únicamente la etapa de codificación. Veamos entonces en detalle cómo está conformada esta arquitectura.

La arquitectura de BERT

BERT toma la arquitectura esencial de la etapa de codificación de la Red Transformer pero modifica la cantidad de elementos, generando dos posibles variantes:

  1. BERT BASE que contiene N=12 codificadores (en lugar de 6 en la arquitectura Transformer original), y un total de h=12 bloques atencionales de procesamiento (en lugar de 8). En total esto hace que el modelo tenga un total de 110 millones de parámetros (vs. los aproximadamente 30 millones de la arquitectura original).
  2. BERT LARGE que contiene N=24 codificadores, un total de h=16 bloques atencionales y adicionalmente usa una codificación en las capas intermedias d_model = 1024 (en lugar de 512 en BERT BASE y en la arquitectura original). Esto genera un modelo con un total de 340 millones de parámetros

Como vimos en la práctica anterior, la Red Transformer tendrá en general un mejor desempeño si se incrementa el tamaño del modelo, y esto es lo que ocurre también con BERT.

BERT y la transferencia del aprendizaje

Además de usar únicamente la codificación para forzar procesos de atención bidireccionales, los autores de BERT introdujeron un segundo aporte: la transferencia de aprendizaje.

En lugar de entrenar el modelo para una tarea específica del procesamiento natural del lenguaje, propusieron pre-entrenar el modelo para tareas “genéricas” (es decir un modelo que aprenda a interpretar el lenguaje escrito en general) y luego se agregan capas adicionales que, durante la afinación, son entrenadas para tareas específicas.

Es decir que se toma el mismo concepto de transferencia de aprendizaje que vimos en una de las prácticas de la sección de Redes Convolucionales, en donde usamos un modelo pre-entrenado con imágenes y luego lo afinamos para clasificar únicamente tipos de flores.

Veamos entonces cómo se realizan el pre-entrenamiento y la afinación:

Contenido exclusivo suscriptores

Recuerda suscribirte para acceder al video con la explicación detallada de esta lección. Además podrás disfrutar de todos los cursos de la Academia Online

Conclusión

Bien, acabamos de ver la estructura general de BERT, una arquitectura derivada de las Redes Transformer que hace uso únicamente de la etapa de codificación y que es pre-entrenada con un corpus gigantesco, logrando que aprenda, durante este entrenamiento, a analizar bidireccionalmente las secuencias.

Gracias a este pre-entrenamiento BERT ha traído el concepto de transferencia de aprendizaje al procesamiento del lenguaje natural, usando el modelo pre-entrenado para luego afinarlo con sets de datos más pequeños y lograr así especializarlos para resolver tareas específicas.

Con estas ideas estamos listos para la segunda práctica de esta sección del curso, en donde implementaremos BERT para una tarea de preguntas y respuestas, un problema típico del Procesamiento del Lenguaje Natural.

Ver todas las lecciones de este curso