¡Construye y juega! ¡Su propio modelo V&L equipado con LLM! | de Yuichi Inoue | septiembre de 2023


En los artículos de investigación sobre modelos GIT, se explicó que se utiliza un codificador de visión potente y se adoptan parámetros aleatorios para el modelo de lenguaje. Esta vez, dado que el objetivo es, en última instancia, utilizar un modelo de lenguaje de clase 7B, se aplicará un modelo previamente entrenado al modelo de lenguaje. Se examinarán los siguientes módulos para realizar ajustes. El Proyección GIT, al ser un módulo inicializado, siempre se incluye. Algunas combinaciones pueden parecer redundantes, pero se exploran sin demasiada preocupación en este ensayo.

Los módulos configurados para el entrenamiento reciben gradientes, mientras que el resto se modifica para que no tengan gradientes.

# Especificar los parámetros a entrenar (entrenar todos aumentaría el uso de memoria)
para nombre, p en model.model.named_parameters():
si np.any([k en nombre para k en llaves_finetune]):
p.requires_grad = Verdadero
demás:
p.requires_grad = Falso

El Vision Encoder y el LLM utilizados para este examen son:

  • openai/clip-vit-base-patch16
  • facebook/opt-350m

El entrenamiento utiliza el conjunto de datos COCO y tiene una duración de 5 épocas.

Estos son los módulos objetivo entrenados durante cada experimento:

  • Proyecto: Proyección GIT. Inicializado aleatoriamente, por lo que siempre está entrenado.
  • LORA: Se aplicaron Consulta, Clave y Valor de la autoatención en el modelo de lenguaje.
  • OPTAR: Todas las capas fueron entrenadas.
  • ViT: Todas las capas fueron entrenadas.
  • Cabeza: Se capacitó al lm_head final de OPT.

(Nota: si bien LoRA se puede aplicar a ViT, esta vez no se incluyó para evitar que los experimentos sean demasiado complicados).

Esta figura muestra la pérdida de entrenamiento. Proj, LoRA, OPT, ViT y Head en la leyenda son los módulos entrenados explicados anteriormente. (figura realizada por el autor)

Como se muestra en el gráfico de pérdida de entrenamiento, es evidente que algunos grupos no se están desempeñando bien. Este fue el caso cuando se incluyó OPT en la capacitación. Aunque todos los experimentos se llevaron a cabo en condiciones bastante similares, podrían ser necesarios ajustes más detallados, como la tasa de aprendizaje, al ajustar el modelo de lenguaje. A continuación se examinarán los resultados, excluyendo los modelos en los que se incluye OPT en la capacitación.

Esta figura muestra la pérdida de entrenamiento sin resultados de ajuste completos. Proj, LoRA, OPT, ViT y Head en la leyenda son los módulos entrenados explicados anteriormente. (figura realizada por el autor)
Esta figura muestra la pérdida de validación. Proj, LoRA, OPT, ViT y Head en la leyenda son los módulos entrenados explicados anteriormente. (figura realizada por el autor)

Tanto el entrenamiento como la validación La pérdida disminuyó más con el Proyección+LoRA modelo. Final de puesta a punto Cabeza La capa mostró resultados casi idénticos. Si también se entrena ViT, la pérdida parece ligeramente mayor y los resultados parecen inestables. Incluso cuando se agrega LoRA durante el entrenamiento de ViT, la pérdida tiende a ser alta. Para ajustar estos datos, parece que el uso de un modelo ViT previamente entrenado sin actualizar sus parámetros produce resultados más estables. La eficacia de LoRA ha sido reconocida en varios lugares y de este experimento se desprende que agregar LoRA al LLM mejoró tanto la pérdida de capacitación como de validación.

Revisando los resultados de la inferencia sobre algunos datos de prueba:

Resultados de ejemplo de GIT-OPT. Las imágenes se citan del conjunto de datos M3IT y los resultados del texto se obtuvieron mediante el modelo del autor.

Cuando se entrena OPT en sí, los resultados son tan pobres como el resultado de la pérdida, lo que hace que el modelo se quede sin palabras. Además, cuando se entrena ViT, el resultado tiene sentido semántico, pero describe algo completamente diferente de la imagen dada. Sin embargo, los otros resultados parecen capturar las características de las imágenes hasta cierto punto. Por ejemplo, la primera imagen menciona "gato" y "plátano", y la segunda identifica "señal de tráfico". Al comparar los resultados con y sin LoRA, este último tiende a usar repetidamente palabras similares, pero usar LoRA parece hacerlo un poco más natural. Entrenando al Cabeza da como resultado resultados intrigantes, como usar "jugar" en lugar de "comer" para la primera imagen. Si bien hay algunos elementos antinaturales en estos resultados, se puede deducir que el entrenamiento logró capturar características de la imagen.

Para ajustar las condiciones en experimentos anteriores, se utilizó un modelo de lenguaje ligeramente más pequeño, OPT-350m. Ahora, la intención es cambiar el modelo de lenguaje a un modelo 7B. No solo se conformará con OPT, sino que también se introducirán LLM más potentes, LLaMA y MPT.

La integración de estos dos modelos se puede realizar de forma similar a OPT. Refiriéndose a las funciones directas del LlamaModelo y Modelo MPT, combine los vectores de imagen proyectados con tokens de texto y cambie la máscara de Atención causal Mascarilla a Atención de GIT Mascarilla. Una cosa a tener en cuenta: para MPT, la máscara no es (0, -inf), sino (False, True). Los procesos posteriores se pueden implementar de manera similar.

Para utilizar el modelo clase 7B con OPT, simplemente cambie el nombre del modelo de facebook/opt-350m a facebook/opt-6.7b.

Para LLaMA, con la disponibilidad de LLaMA2, ese será el modelo elegido. Para utilizar este modelo previamente entrenado, se necesitan aprobaciones tanto de Meta como de Hugging Face. Es necesaria una cuenta para Hugging Face, así que asegúrese de configurarla. Las aprobaciones suelen llegar en unas pocas horas. Luego, inicie sesión en Hugging Face en la terminal donde se ejecuta el entrenamiento.

iniciar sesión en huggingface-cli

Puede iniciar sesión utilizando el token creado en la cuenta Hugging Face → Configuración → Token de acceso.

Los parámetros de entrenamiento permanecen consistentes, utilizan el conjunto de datos COCO y duran 3 épocas. Según los resultados del Experimento 1, los módulos configurados para el ajuste fino fueron Proyección + LoRA.

Echemos un vistazo a los resultados.

Esta figura muestra la pérdida de entrenamiento (figura realizada por el autor)
Esta figura muestra la pérdida de validación (figura realizada por el autor)

Al revisar la pérdida, es evidente que los modelos que utilizan LLaMA2 y MPT como LLM muestran una reducción más satisfactoria. Observemos también los resultados de la inferencia.

Resultados de ejemplo de GIT-LLM. Las imágenes se citan del conjunto de datos M3IT y los resultados del texto se obtuvieron mediante el modelo del autor.

Respecto a la primera imagen, para todos los modelos, las expresiones parecen más naturales en comparación con el OPT-350m. No hay expresiones extrañas como “un plátano con un plátano”, que resaltan la fuerza de LLM. Para la segunda imagen, todavía hay algunas dificultades con frases como “un semáforo” o “un edificio”. Para imágenes tan complejas, puede ser necesario considerar actualizar el modelo ViT.

Finalmente, hagamos inferencias sobre las imágenes que se hicieron populares con GPT-4.

Resultados de ejemplo de GIT-LLM. Se cita una imagen de aquí, y los resultados del texto fueron realizados por los modelos del autor.

Aunque se esperaban respuestas fluidas desde que se utiliza el LLM, los resultados son bastante simples. Esto podría deberse a que el modelo fue entrenado únicamente en COCO.

Dados los decepcionantes resultados del experimento anterior, se decidió incorporar datos distintos de COCO para el entrenamiento. El conjunto de datos M3IT que se utiliza actualmente es bastante completo y puede manejar una cantidad significativa de datos en el mismo formato que COCO.

Esta tabla se cita de la Tabla 3 de “M3IT: un conjunto de datos a gran escala hacia el ajuste de instrucción multimodal y multilingüe”

Está previsto utilizar datos de esta fuente excluyendo las categorías "Chino" y "Vídeo". Originalmente, el conjunto de datos de entrenamiento COCO contenía 566.747 datos. Al combinarlo con fuentes adicionales, esto aumentó a 1.361.650. Aunque el tamaño aproximadamente se ha duplicado, se cree que el conjunto de datos ha adquirido mayor calidad debido a la mayor diversidad de tareas.

El manejo de múltiples conjuntos de datos de Pytorch se puede lograr fácilmente utilizando el Conjunto de datos Concat.

lista_conjunto_datos = [
datasets.load_dataset("MMInstruction/M3IT", i) para i en m3it_name_list
]
train_dataset = torch.utils.data.ConcatDataset([d["train"] para d en dataset_list])

El entrenamiento se llevó a cabo durante 1 época y el modelo LLaMA2 se utilizó para ajustar el Proyección y LoRA, de manera similar al Experimento 2.

Como no hay ninguna pérdida en comparación con este tiempo, profundicemos directamente en los resultados de la inferencia.

Resultados de ejemplo de GIT-LLaMA2. Las imágenes se citan del conjunto de datos M3IT y los resultados del texto se obtuvieron mediante el modelo del autor.
Resultados de ejemplo de GIT-LLaMA2. Las imágenes se citan del conjunto de datos M3IT y los resultados del texto se obtuvieron mediante el modelo del autor.
Resultados de ejemplo de GIT-LLaMA2. Las imágenes se citan del conjunto de datos M3IT y los resultados del texto se obtuvieron mediante el modelo del autor.

Además de resolver problemas simples, el modelo ahora aborda desafíos más complejos. Al agregar conjuntos de datos para tareas más complejas que simplemente subtitular, las capacidades se han ampliado significativamente. Lograr este nivel de precisión con solo 1 época de entrenamiento fue sorprendente.

Probémoslo con la siguiente imagen de ejemplo. Dada la mayor variedad en el conjunto de datos, se modificó ligeramente la forma en que se presentaron las preguntas.

Resultados de ejemplo de GIT-LLaMA2. Se cita una imagen de aquí, y los resultados del texto fueron realizados por los modelos del autor.

Si bien la descripción "Paraguas" todavía estaba conectada, parece que está mejorando. Para mejorar aún más, es necesario aumentar la cantidad de épocas de entrenamiento, agregar más tipos o volúmenes de conjuntos de datos y aprovechar ViT o LLM más potentes. No obstante, es impresionante que un modelo de este tipo pueda desarrollarse en sólo medio día, dados los recursos computacionales y de datos.



Enlace fuente

Deja una respuesta

Su dirección de correo electrónico no será publicada. Los campos obligatorios están marcados *

Puede utilizar estas etiquetas y atributos HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

es_ESSpanish