Práctica eficiente de ajuste fino de los parámetros LLaMA, ChatGLM, BLOOM

Autor: Thomas X (ingeniero de algoritmos de PNL de Tencent)

Dirección del proyecto: https://zhuanlan.zhihu.com/p/635710004

1. Comparación de modelos base de código abierto

El entrenamiento del modelo de lenguaje grande se divide en dos etapas:

(1) Pre-entrenamiento no supervisado en corpus de texto masivo para aprender representación semántica general y conocimiento del mundo.

(2) En datos a pequeña escala, realice ajustes de instrucción y aprendizaje de refuerzo en función de la retroalimentación humana para alinear mejor la tarea final con las preferencias humanas. LIMA [1] demuestra que casi todo el conocimiento de LLM se aprende durante la capacitación previa, y solo se necesitan datos de ajuste de instrucción limitados para generar respuestas de alta calidad. Por lo tanto, el rendimiento del modelo de pedestal es crucial.Si el rendimiento del modelo de pedestal no es lo suficientemente bueno, es difícil lograr buenos resultados con el ajuste fino de la instrucción y el aprendizaje por refuerzo.

En la actualidad, existen tres modelos principales de lenguaje grande de código abierto: LLaMA, ChatGLM y BLOOM . Sobre la base de estos tres modelos de código abierto, la industria ha llevado a cabo el ajuste fino de las instrucciones o el aprendizaje por refuerzo, y se han derivado muchos modelos grandes diferentes. Los siguientes tres grandes modelos de lenguaje se comparan en términos de datos de entrenamiento, tokenizador y estructura del modelo.

1.1 LLAMA

LLaMA[2] es un gran modelo de lenguaje propuesto por Meta. Los datos de entrenamiento son principalmente inglés latino y también contienen datos de código de GitHub. Los datos de entrenamiento están principalmente en inglés, excluyendo chino, coreano y japonés. Todos los datos de entrenamiento son de código abierto y hay alrededor de 1400B tokens después de la segmentación de palabras.

Según la cantidad de parámetros del modelo, el modelo LLaMA tiene cuatro versiones de modelo con diferentes tamaños de parámetros: 7B, 13B, 33B y 65B. Las versiones 7B y 13B usan tokens de 1T para entrenamiento, y las versiones 33B y 65B usan tokens de 1.4T para entrenamiento. [3] demostró que en el caso de un presupuesto de entrenamiento determinado, incluso si se reduce el número de parámetros del modelo, siempre que se incremente el tamaño de los datos preentrenados y el tiempo de entrenamiento (más tokens de entrenamiento), el efecto del tamaño original modelo puede alcanzarse o incluso superarse. A modo de comparación, el modelo 280B Gopher solo entrenó 300B tokens, el modelo 176B BLOOM solo entrenó 350B tokens, el GLM-130B solo entrenó 400B tokens y el modelo LLaMA entrenó 1T/1.4T tokens, aumentando significativamente la cantidad de datos de entrenamiento. A partir de los resultados, aunque la cantidad de parámetros del modelo LLaMA-13B es solo menos de 1/10 de la de GPT3, el efecto en la mayoría de las tareas supera la de GPT3.

En términos de estructura de modelo, al igual que GPT, LLaMA utiliza una estructura de modelo de transformador de solo decodificador causal. En cuanto a los detalles del modelo, se han realizado los siguientes cambios:

  • normalización de capas: Para mejorar la estabilidad del entrenamiento, no se usa la norma tradicional de post capa , sino la norma de pre capa . Específicamente, se elimina el término de sesgo en la normalización de capas y se utiliza la norma RMS (es decir, la norma de raíz cuadrática media).

  • Función de activación: No se utiliza la función de activación de ReLU, pero se utiliza la función de activación de SwiGLU . FFN generalmente tiene dos matrices de peso: primero, el vector se eleva de la dimensión d a la dimensión intermedia 4d, y luego la dimensión se reduce de 4d a d. El FFN que usa la función de activación SwiGLU agrega una matriz de peso. Hay tres matrices de peso en total. Para mantener la cantidad de parámetros consistente, se usa la dimensión central en lugar de 4d.

    , no 4d.

  • Codificación de posición: se elimina la codificación de posición absoluta y se adopta la codificación de posición rotatoria RoPE.

En cuanto a los objetivos de entrenamiento, el objetivo de entrenamiento de LLaMA es el modelo de lenguaje, que consiste en predecir la siguiente palabra en base a lo anterior.

Con respecto al tokenizador, el corpus de entrenamiento de LLaMA está principalmente en inglés, utilizando Sentence Piece como tokenizador, y el tamaño del vocabulario es de solo 32,000. Hay muy pocos tokens chinos en el vocabulario, solo unos pocos cientos, y la eficiencia de codificación del tokenizador LLaMA para la segmentación de palabras chinas es relativamente baja.

Aquí hay algunos modelos grandes derivados de LLaMA:

  • Alpaca (https://github.com/tatsu-lab/stanford_alpaca): la Universidad de Stanford perfeccionó el LLaMA de escala 7B en el conjunto de datos de seguimiento de instrucción en inglés de 52k.

  • Vicuna (https://github.com/lm-sys/FastChat): UC Berkeley ajustó LLaMA de escala 13B en los datos de conversación compartidos por el usuario recopilados por ShareGPT.

  • baize (https://github.com/project-baize/baize-chatbot): Sobre los datos generados por 100k ChatGPT, el modelo obtenido mediante el ajuste fino de LLaMA a través de LoRA.

  • StableLM (https://github.com/Stability-AI/StableLM): El modelo obtenido por el ajuste fino de Stability AI basado en LLaMA.

  • BELLE (https://github.com/LianjiaTech/BELLE): Usando solo datos producidos por ChatGPT, Lianjia ajustó LLaMA y lo optimizó para chino.

1.2 Ampliación de vocabulario: chino LLaMA

Necesidad de ampliación de vocabulario. El tamaño del vocabulario del modelo LLaMA original es 32000. El tokenizador está entrenado principalmente en corpus en inglés, y el efecto en chino y multilingüe es relativamente bajo. El efecto de LLaMA en chino es pobre. Por un lado, el modelo LLaMA está entrenado en el corpus latino principalmente en inglés, y el corpus de entrenamiento no contiene chino; por otro lado, está relacionado con el tokenizador, y el vocabulario es pequeño.Los caracteres chinos se dividen en múltiples tokens, la eficiencia de codificación es baja y el aprendizaje del modelo es difícil. El vocabulario LLaMA contiene solo unos pocos caracteres chinos. Al segmentar el texto chino, dividirá el chino en más fragmentos. Se requieren múltiples tokens para representar un carácter chino, y la eficiencia de codificación es muy baja. Después de expandir el vocabulario chino, un solo carácter chino tiende a dividirse en 1 token, lo que evita el problema de que un carácter chino se divida en múltiples tokens y mejora la eficiencia de la codificación china.

¿Cómo ampliar el vocabulario? [6] Intente expandir el vocabulario y agregue tokens chinos al vocabulario para mejorar la eficiencia de la codificación china. El método específico es el siguiente.

1. Use Fragmento de oración para entrenar un tokenizador chino en el corpus chino, usando 20,000 palabras chinas. Luego, el tokenizador chino se fusiona con el tokenizador LLaMA original, y al combinar los vocabularios de los dos, finalmente se obtiene un tokenizador fusionado, llamado tokenizador LLaMA chino. El tamaño del vocabulario es 49953.

2. Para adaptarse al nuevo tokenizador, la matriz de integración del modelo de transformador se amplía de V*h ×ℎ a V'*h×ℎ, y la ficha china recién agregada se agrega al final de la matriz de integración original para asegurar la matriz de incrustación del vocabulario original No afectado.

3. Preentrene más en el corpus chino, congele y corrija los parámetros del modelo del transformador, solo entrene la matriz de incrustación, aprenda la representación del vector de palabras del token chino recién agregado y minimice la interferencia con el modelo original.

4. En la etapa de ajuste fino de las instrucciones, todos los parámetros del modelo se pueden liberar para el entrenamiento.

El efecto de ampliar el vocabulario. A partir de los resultados de Chinese-LLaMA-Alpaca (https://github.com/ymcui/Chinese-LLaMA-Alpaca) y BELLE (https://github.com/LianjiaTech/BELLE), expandir el vocabulario chino puede mejorar la codificación china. eficiencia y rendimiento mejorado del modelo.

1.3 ChatGLM-6B

ChatGLM-6B es un modelo de lenguaje de diálogo propuesto por la Universidad de Tsinghua que admite la respuesta de preguntas bilingües chino-inglés. ChatGLM-6B adopta la misma estructura de modelo que GLM-130B [4]. A partir de julio de 2022, GLM-130B solo ha entrenado 400B tokens, con una proporción chino-inglés de 1:1. ChatGLM-6B usa más datos de entrenamiento, hasta tokens 1T, el corpus de entrenamiento solo contiene chino e inglés, y la proporción de chino e inglés es 1:1.

En cuanto a la estructura del modelo, ChatGLM-6B adopta un marco de modelo de transformador de solo decodificador de prefijo, adopta un mecanismo de atención bidireccional en la entrada y utiliza un mecanismo de atención unidireccional en la salida. En cuanto a los detalles del modelo, se han realizado los siguientes cambios:

  • Reducción del gradiente de la capa de incrustación: para mejorar la estabilidad del entrenamiento, se reduce el gradiente de la capa de incrustación. específicamente,

  • ��_��������=��_��������∗��+����_����������.��� � �ℎ()∗(1−�) donde α=0.1 =0.1 , la función detach() aquí es para devolver un nuevo tensor y separarlo del gráfico de cálculo. El efecto de la reducción del gradiente es equivalente a reducir el gradiente de la capa de incrustación 10 veces, reduciendo la norma del gradiente.

  • normalización de capas: Se adopta la norma post capa basada en Deep Norm.

  • Función de activación: se utiliza la función de activación de GeGLU. En comparación con el FFN normal, la GLU que usa la unidad de control lineal agrega una nueva matriz de peso. Hay tres matrices de peso en total. Para mantener los parámetros consistentes, la dimensión intermedia usa

     , no 4d.

  • Codificación de posición: se elimina la codificación de posición absoluta y se adopta la codificación de posición rotatoria RoPE.

En el objetivo de entrenamiento, la tarea de entrenamiento de ChatGLM-6B es el relleno de texto autorregresivo. En comparación con el modelo de lenguaje grande con estructura de solo decodificador causal, ChatGLM-6B con estructura de solo decodificador de prefijo tiene una desventaja: baja eficiencia de entrenamiento. La estructura del decodificador causal calculará la pérdida en todos los tokens, mientras que el decodificador de prefijo solo calculará la pérdida en la salida, no la pérdida de entrada. En el caso de la misma cantidad de tokens de entrenamiento, el efecto del decodificador de prefijo es peor que el del decodificador causal, porque la cantidad de tokens realmente utilizados en el proceso de entrenamiento es menor. Además, el éxito de ChatGPT ha demostrado que el modelo de lenguaje grande de la estructura del decodificador causal puede obtener muy buenas capacidades de generación de pocos disparos y cero disparos, y la capacidad del modelo puede estimularse aún más mediante el ajuste fino de las instrucciones. En cuanto a si el modelo de lenguaje grande de la estructura del decodificador de prefijos puede obtener capacidades considerables de pocos intentos y cero intentos, todavía falta una verificación suficiente.

Con respecto al tokenizador, ChatGLM entrenó a SentencePiece como tokenizador en 25 GB de datos bilingües chino-inglés, con un tamaño de vocabulario de 130 528.

Las siguientes son algunas aplicaciones de modelos a gran escala derivadas de ChatGLM:

  • langchain-ChatGLM (https://github.com/imClumsyPanda/langchain-ChatGLM): aplicación ChatGLM basada en langchain, que realiza preguntas y respuestas en base a una base de conocimiento escalable.

  • Wenda (https://github.com/l15y/wenda): una plataforma de llamadas de modelo de lenguaje a gran escala, que implementa funciones similares a ChatPDF basadas en ChatGLM-6B.

1.4 FLORACIÓN

La serie de modelos BLOOM[5] son ​​grandes modelos de lenguaje entrenados por el equipo de BigScience . Los datos de entrenamiento incluyen un total de 46 idiomas, incluidos inglés, chino, francés, español y portugués, así como 13 lenguajes de programación. 1,5 TB de texto deduplicado y limpio se convierte en 350B de tokens. La distribución de idiomas de los datos de entrenamiento se muestra en la siguiente figura.Se puede ver que el corpus chino representa el 16,2%.

Según la cantidad de parámetros del modelo, el modelo BLOOM tiene varios modelos con diferentes tamaños de parámetros: 560M, 1.1B, 1.7B, 3B, 7.1B y 176B. La serie de modelos BLOOMZ está ajustada en el conjunto de datos xP3 y se recomienda para escenarios de avisos en inglés. Los modelos de la serie BLOOMZ-MT están ajustados en el conjunto de datos xP3mt y se recomiendan para escenarios de avisos que no están en inglés.

En términos de estructura de modelo, al igual que GPT, BLOOM adopta la estructura de modelo de transformador de solo decodificador causal. En cuanto a los detalles del modelo, se han realizado los siguientes cambios:

  • norma de capa incrustada: se agrega una normalización de capa después de la capa incrustada para que el entrenamiento sea más estable.

  • Normalización de capas: Para mejorar la estabilidad del entrenamiento, no se utiliza la norma tradicional de postcapa, sino la norma de precapa.

  • Función de activación: Se utiliza la función de activación GeLU.

  • Codificación de posición: se elimina la codificación de posición absoluta y se adopta la codificación de posición relativa ALiBi. En comparación con la codificación de posición absoluta, ALiBi tiene una mejor extrapolación, es decir, aunque la longitud máxima de secuencia en la fase de entrenamiento es 2048, el modelo puede manejar secuencias más largas durante la inferencia.

En términos de objetivos de entrenamiento, el objetivo de entrenamiento de BLOOM es el modelo de lenguaje, que consiste en predecir la siguiente palabra en función de lo anterior.

Con respecto al tokenizador, BLOOM utiliza el algoritmo de codificación de pares de bytes (BPE) para entrenar el corpus multilingüe para obtener un tokenizador con un tamaño de vocabulario de 250880.

Las siguientes son algunas aplicaciones de modelos a gran escala derivadas de BLOOM:

  • Xuanyuan (https://arxiv.org/pdf/2305.12002.pdf): un gran modelo en el campo financiero, Du Xiaoman ha llevado a cabo una capacitación previa y un ajuste preciso para el campo general chino y el campo financiero sobre la base de BLOOM-176B.

  • BELLE:(https://github.com/LianjiaTech/BELLE) Lianjia solo usa los datos producidos por ChatGPT para ajustar las instrucciones de BLOOMZ-7B1-mt.

2. Detalles del modelo de lenguaje

Comparación de tokenizadores 2.1

Los tamaños de vocabulario de los tokenizadores de los modelos base anteriores son diferentes, y los resultados de segmentación de palabras del mismo texto chino producirán resultados diferentes. El procesamiento de segmentación se realizó en 69.000 corpus paralelos de comentarios de noticias en chino e inglés, y se compararon el resultado y el tiempo que lleva la segmentación de palabras.Los resultados son los siguientes. "Número promedio de tokens en chino" indica el número promedio de tokens correspondientes a cada carácter chino después de la segmentación del tokenizer.

De los resultados,

  1. El vocabulario de LLaMA es el más pequeño y LLaMA tiene el mayor número promedio de tokens tanto en chino como en inglés, lo que significa que la segmentación de palabras de LLaMA en chino e inglés es relativamente fragmentada y detallada. Especialmente en chino, la cantidad promedio de tokens es de 1,45, lo que significa que LLaMA tiene una alta probabilidad de dividir los caracteres chinos en más de 2 tokens.

  2. Después de que Chinese LLaMA amplíe el vocabulario, la cantidad promedio de tokens en chino se reduce significativamente. Un carácter chino o dos caracteres chinos se dividirán en un token, lo que mejora la eficiencia de la codificación china.

  3. ChatGLM-6B es el tokenizador con el mejor equilibrio entre la segmentación de palabras en chino e inglés . Debido al vocabulario relativamente amplio, el tiempo de procesamiento chino también ha aumentado.

  4. Aunque BLOOM tiene el vocabulario más grande, pero debido a que es multilingüe, la eficiencia de segmentación de palabras en chino e inglés es básicamente la misma que la de ChatGLM-6B. Cabe señalar que el tokenizador de BLOOM se implementa con BloomTokenizerFast de transformers, y la velocidad de segmentación de palabras es más rápida.

A partir de dos ejemplos, comparemos intuitivamente los resultados de segmentación de palabras de diferentes tokenizadores. "¿Por qué los hombres no toman anzuelos Wu y cargan Guanshan cincuenta estados?" Hay 16 caracteres en total. Los resultados de la segmentación de palabras de varios tokenizadores son los siguientes:

  • La segmentación de palabras de LLaMA es de 24 tokens:

 [ '男', '<0xE5>', '<0x84>', '<0xBF>', '何', '不', '<0xE5>', '<0xB8>', '<0xA6>', '<0xE5>', '<0x90>', '<0xB4>', '<0xE9>', '<0x92>', '<0xA9>', ',', '收', '取', '关', '山', '五', '十', '州', '。'] 
  • La segmentación de palabras en chino LLaMA es de 14 tokens:

[ '男', '儿', '何', '不', '带', '吴', '钩', ',', '收取', '关', '山', '五十', '州', '。']
  • La segmentación de palabras de ChatGLM-6B es de 11 tokens:

[ '男儿', '何不', '带', '吴', '钩', ',', '收取', '关山', '五十', '州', '。'] 
  • La segmentación de palabras de Bloom es de 13 fichas:

 ['男', '儿', '何不', '带', '吴', '钩', ',', '收取', '关', '山', '五十', '州', '。'] 

"Varios pimientos y hongos osmanthus, el marido de Qi Weiren, Hui Chou." La longitud es de 15 caracteres. Los resultados de la segmentación de palabras de varios tokenizadores son los siguientes:

  • La segmentación de palabras de LLaMA es de 37 tokens:

[ '<0xE6>', '<0x9D>', '<0x82>', '<0xE7>', '<0x94>', '<0xB3>', '<0xE6>', '<0xA4>', '<0x92>', '与', '<0xE8>', '<0x8F>', '<0x8C>', '<0xE6>', '<0xA1>', '<0x82>', '<0xE5>', '<0x85>', '<0xAE>', ',', '<0xE5>', '<0xB2>', '<0x82>', '<0xE7>', '<0xBB>', '<0xB4>', '<0xE7>', '<0xBA>', '<0xAB>', '夫', '<0xE8>', '<0x95>', '<0x99>', '<0xE8>', '<0x8C>', '<0x9D>', '。']
  • La segmentación de palabras chinas LLaMA es de 17 tokens:

[ '杂', '申', '椒', '与', '菌', '桂', '兮', ',', '岂', '维', '纫', '夫', '蕙', '<0xE8>', '<0x8C>', '<0x9D>', '。'] 
  • La segmentación de palabras de ChatGLM-6B es de 17 tokens:

 [ '杂', '申', '椒', '与', '菌', '桂', '兮', ',', '岂', '维', '纫', '夫', '蕙', '<0xE8>', '<0x8C>', '<0x9D>', '。'] 
  • La segmentación de palabras de Bloom es de 17 tokens:

 ['杂', '申', '椒', '与', '菌', '桂', '兮', ',', '岂', '维', '�', '�', '夫', '蕙', '�', '�', '。'] 

Como se puede ver en el ejemplo anterior, el vocabulario LLaMA contiene una cantidad muy pequeña de caracteres chinos y el carácter común "er" también se divide en tres tokens. El vocabulario de LLaMA chino, ChatGLM-6B y Bloom cubre la mayoría de los caracteres chinos comunes y también contiene algunas palabras chinas comunes, por ejemplo, la palabra "recibir" se divide en un token; para algunas palabras raras, como "茝" también se dividirá en 2-3 fichas. En general, LLaMA suele dividir un carácter chino en dos o más tokens, y la eficiencia de codificación china es baja; LLaMA chino, ChatGLM-6B y Bloom tienen una mayor eficiencia de codificación para la segmentación de palabras chinas.

2.2 Normalización de capas

Como se muestra en la siguiente figura, según la posición de la normalización de la capa, se puede dividir en norma de capa posterior y norma de capa previa.

norma de capa posterior. En el transformador original, la capa de normalización se coloca después de la conexión residual, llamada post LN. El modelo de transformador profundo que usa Post LN es propenso a la inestabilidad de entrenamiento. Como se muestra en la siguiente figura, a medida que aumenta el número de capas del transformador en la etapa posterior a LN, la norma de gradiente aumenta gradualmente, lo que genera inestabilidad en el entrenamiento.

norma previa a la capa. [7] Cambiar la posición de la capa de normalización y colocarla en el proceso de conexión residual, antes del bloque de autoatención o FFN, denominado "Pre LN". Como se muestra en la siguiente figura, la norma de gradiente de la norma de la capa previa en cada capa del transformador es aproximadamente igual, lo que favorece la mejora de la estabilidad del entrenamiento. En comparación con el post LN, el entrenamiento de transformador profundo que usa el pre LN es más estable, lo que puede aliviar el problema de la inestabilidad del entrenamiento. Pero la desventaja es que el pre LN puede afectar ligeramente el rendimiento del modelo de transformador. Uno de los desafíos de los grandes modelos de lenguaje es cómo mejorar la estabilidad del entrenamiento. Para mejorar la estabilidad del entrenamiento, los modelos de lenguaje grandes como GPT3, PaLM, BLOOM y OPT utilizan la norma de capa previa.

El proceso de cálculo de la normalización de capas es el siguiente:

Las dos partes importantes de la normalización de capas son la invariancia de traducción y la invariancia de escala. [8] cree que el éxito de la normalización de capas es la invariancia de escala, no la invariancia de traducción. Por lo tanto, se elimina la traducción en el proceso de cálculo, solo se retiene y simplifica la escala, y se propone la Norma RMS (Normalización de capa cuadrática media), que es la norma cuadrática media. El proceso de cálculo es el siguiente

En comparación con la normalización de capa normal, la norma RMS elimina la parte del cálculo del valor medio para la traducción, la velocidad de cálculo es más rápida y el efecto es básicamente el mismo, o incluso ligeramente mejorado . Los modelos de lenguaje grande como Gopher, LLaMA y T5 usan la norma RMS.

[9] propuso que Deep Norm puede aliviar el problema de la actualización explosiva del modelo y limitar la actualización del modelo a una constante, lo que hace que el proceso de entrenamiento del modelo sea más estable. Específicamente, el método Deep Norm aumenta la escala de la conexión residual (α>11) antes de implementar Layer Norm, además, reduce la escala de los parámetros del modelo (β<11) en la fase de inicialización. publicar LN.

2.3 Función de activación

Cada capa del transformador se divide en dos partes : bloque de autoatención y bloque FFN . FFN generalmente primero aumenta la dimensión del vector de la dimensión d a la dimensión intermedia 4d, y luego reduce la dimensión de 4d a d. La fórmula de cálculo de FFN es la siguiente:

Entre ellos, f()) es una función de activación no lineal. Las funciones de activación más utilizadas son la función gelu (unidad lineal de error gaussiano) y la función swish. La función swish es una función de activación automática.

Gelu también es una función de activación que ajusta el valor de salida a través de un mecanismo de activación. Similar a la función swish, puede aproximarse mediante la función tanh o la función δ().

[10] propuso la unidad lineal cerrada GLU (Gated Linear Units). En comparación con la FFN normal, solo hay dos matrices de peso. La FFN que usa GLU agrega una matriz de peso adicional, es decir, V en la siguiente fórmula, y hay tres pesos en total matriz para un mejor rendimiento del modelo.

La fórmula de cálculo de GLU usando la función de activación gelu es:

La fórmula de cálculo de GLU utilizando la función de activación swish es:

2.4 Codificación de posición

Para los modelos de transformadores, la codificación posicional es esencial. Debido a que el módulo de atención no puede capturar la secuencia de entrada, no puede distinguir tokens en diferentes posiciones. La codificación de posición se divide en codificación de posición absoluta y codificación de posición relativa.

La forma más directa es la codificación de posición de tipo entrenamiento, que toma la codificación de posición como un parámetro entrenable y entrena una matriz vectorial de codificación de posición. GPT3 adopta este enfoque. La desventaja de entrenar la codificación de posición es que no hay extrapolación, es decir, si la longitud máxima de la secuencia es 2048 durante el entrenamiento, solo puede procesar secuencias con una longitud máxima de 2048 durante la inferencia, y más allá de esta longitud, no puede procesarse. .

Su Shen [11] propuso RoPE para la codificación de posición rotacional. La codificación de posición de estilo de entrenamiento actúa sobre la incorporación del token, mientras que la codificación de posición rotacional RoPE actúa sobre el bloque de autoatención de cada capa del transformador.Después de calcular Q/K, la codificación de posición rotacional actúa sobre Q/K y luego calcula el puntuación de atención. La codificación de posición rotatoria realiza la codificación de posición relativa a través de la codificación absoluta, que tiene una buena extrapolación. Vale la pena mencionar que RoPE no contiene parámetros entrenables. Los modelos de lenguaje grande como LLaMA, GLM-130B y PaLM utilizan RoPE de codificación de posición rotacional.

ALiBi (Atención con sesgos lineales) [12] también actúa sobre el bloque de autoatención de cada capa del transformador, como se muestra en la figura a continuación, después de calcular el puntaje de atención, agregue directamente una matriz de sesgo preestablecida a la matriz de puntaje de atención. La matriz de sesgo aquí está preestablecida, fija y no se puede entrenar. Este sesgo penaliza la puntuación de atención según la distancia relativa entre q y k. Cuanto mayor sea la distancia relativa, mayor será el término de penalización. Es equivalente a cuanto mayor sea la distancia entre dos fichas, menor será la contribución mutua. La codificación de posición ALiBi tiene una buena extrapolación. BLOOM usa esta codificación posicional.

3. Método eficiente de ajuste fino de parámetros

A medida que los parámetros del modelo de lenguaje grande se hacen cada vez más grandes, el costo del ajuste completo del modelo grande es muy alto. El alto costo se refleja principalmente en los altos requisitos de recursos de hardware y el alto uso de la memoria de video, la velocidad de capacitación lenta y el largo consumo de tiempo, y los altos costos de almacenamiento. El ajuste fino de parámetros eficientes (técnicas de ajuste fino de parámetros eficientes, PEFT) solo entrena una pequeña cantidad de parámetros cuando se ajusta un modelo grande, en lugar de entrenar los parámetros completos de varios modelos. El método de ajuste fino de parámetros eficiente tiene las siguientes ventajas:

  • Menos uso de memoria de video, bajos requisitos de recursos de hardware

  • El entrenamiento es más rápido y lleva menos tiempo.

  • Menor costo de almacenamiento, diferentes tareas pueden compartir la mayoría de los parámetros de peso

  • Potencialmente mejor rendimiento del modelo, aliviando el problema de sobreajuste

Sintonización rápida 3.1

El significado original de ajuste de solicitud [13] se refiere a obtener un mejor efecto de modelo modificando la solicitud de entrada . El mensaje aquí es un "mensaje duro". Modificamos directamente el indicador de entrada, que no es derivable.

En correspondencia con el "mensaje duro", el " ajuste de mensaje suave " empalma un tensor entrenable con incrustaciones del texto de entrada . Este tensor entrenable se puede optimizar mediante retropropagación para mejorar el rendimiento de la tarea de destino. efecto del modelo. El tensor entrenable aquí puede entenderse como la incrustación correspondiente al texto del mensaje, que es un mensaje suave. Como se muestra en la siguiente figura, la forma de este tensor entrenable es

el ajuste rápido congela los parámetros originales del modelo grande y solo entrena este tensor rápido agregado recientemente. El efecto de la sintonización rápida mejorará a medida que aumente la cantidad de parámetros del modelo base.

3.2 sintonización de prefijo

El ajuste de prefijo [14] es similar al ajuste de solicitud, agregando un tensor específico de la tarea a la entrada, este tensor es entrenable, manteniendo los parámetros del modelo preentrenado sin cambios . Las principales diferencias son las siguientes:

1. El ajuste de prefijo agrega el parámetro de prefijo (tensor entrenable ) a todas las capas del transformador , mientras que el ajuste rápido solo agrega la matriz entrenable a la incrustación de entrada . Específicamente, el ajuste de prefijo agregará el tensor de prefijo como past_key_value a todas las capas del transformador.

2. Use un FFN separado para codificar y optimizar el parámetro de prefijo en lugar de optimizar directamente el aviso suave, ya que puede causar inestabilidad y dañar el rendimiento. Después de actualizar el aviso suave, FFN ya no se usa.

El papel de la sintonización de prefijo es diferente al de la sintonización rápida, que es algo similar a la codificación de posición entrenable y la codificación de posición rotacional RoPE. El primero actúa directamente sobre la incrustación de entrada, y el segundo actúa sobre el bloque de autoatención de todas las capas del transformador.Después de calcular K y V, se empalma con el tensor de prefijo entrenable.

3,3 adaptador

El adaptador [16] es algo similar a la sintonización de prefijos, los cuales agregan parámetros entrenables adicionales a cada capa del transformador. La diferencia es que el ajuste del prefijo consiste en agregar el prefijo a la incrustación de entrada y el adaptador inserta la capa del adaptador en dos posiciones, como se muestra en la figura a continuación.

3.4 Adaptador LLaMA

El adaptador LLaMA [16] combina la sintonización de prefijo y el adaptador. Similar a la sintonización de prefijo, el adaptador LLaMA agrega un tensor de aviso entrenable a la inserción de entrada. Cabe señalar que el prefijo es aprendido y mantenido por una matriz de incrustación, no dada externamente. Cada capa de transformador tiene su propio prefijo de aprendizaje diferente, lo que permite una adaptación más personalizada de diferentes capas de modelo.

Como se muestra en la figura anterior, el adaptador LLaMA introduce un mecanismo de atención y un mecanismo de activación inicializados en cero. La motivación es que la combinación de ajuste de adaptador y prefijo con tensores inicializados aleatoriamente (mensajes de prefijo y capas de adaptador) probablemente dañe el conocimiento semántico del modelo de lenguaje pre-entrenado, lo que resulta en un ajuste fino inestable y una pérdida de alto rendimiento en la etapa inicial. etapa de entrenamiento.

Otra diferencia importante es que el adaptador LLaMA solo agrega indicaciones de adaptación que se pueden aprender a las capas de transformador profundas L en lugar de a todas las capas de transformador. Los autores creen que este método puede afinar de manera más efectiva las representaciones del lenguaje que se enfocan en información semántica de alto nivel.

La idea básica del adaptador LLaMA y el ajuste de prefijos está relacionada con la adición de indicaciones suaves entrenables. Hay algunas diferencias sutiles entre los dos. Al agregar un indicador de software, solo se modifican la tecla de entrada y las secuencias de valores, pero la consulta no se modifica. Además, dependiendo del factor de activación (establecido en 0 al comienzo del entrenamiento), se decide si se utiliza el mecanismo de atención modificado por prefijo.

En general, la principal diferencia entre el adaptador LLaMA y el ajuste de prefijo es: el adaptador LLaMA solo modifica las capas profundas del transformador L e introduce un mecanismo de activación para lograr un entrenamiento estable. Aunque el adaptador LLaMA se experimenta en LLaMA, es aplicable a otros modelos grandes de la estructura GPT.

Como se muestra en la figura a continuación, cada capa de transformador del adaptador LLaMA tiene sus propios parámetros de aprendizaje diferentes, un tensor de prefijo y un factor de activación. La forma del tensor de prefijo es

3.5 LoRA

El modelo de transformador contiene muchas capas densas para la multiplicación de matrices. Algunos artículos creen que el modelo de lenguaje preentrenado tiene un rango bajo, incluso si se asigna a un subespacio más pequeño, aún puede aprender de manera eficiente. Basado en esta teoría, LoRA (Low-Rank Adaptation) [18] asume que la actualización del parámetro de peso del modelo durante el proceso de adaptación/ajuste fino también tiene una dimensión intrínseca baja.

����=(�(��1)⊗��)�2�

���ℎ(�)=�⋅�(��)

Para LLaMA-6B, LoRA se usa para inyectar el módulo de derivación en la consulta y el valor del bloque de autoatención de cada capa del transformador.Los parámetros entrenables son los siguientes.

4. Práctica eficiente de ajuste fino de parámetros

La biblioteca PEFT de huggingface ha implementado los métodos de ajuste fino de parámetros eficientes mencionados anteriormente. Pruebe diferentes métodos eficientes de ajuste fino de parámetros en los tres modelos básicos de LLaMA-7B, ChatGLM-6B y BLOOM-7B, y compare sus efectos de ajuste fino.

El entrenamiento se realiza en un A100 de 40GB con 8 tarjetas en una sola máquina. Para ahorrar memoria de video y acelerar el entrenamiento, se utilizan ZeRO stage3 y la descarga de CPU del marco deepspeed, y el entrenamiento de precisión mixta float16 está habilitado sin recálculo de activación. Establezca el tamaño del lote de una sola tarjeta en 4, la longitud máxima de la secuencia en 512, el número de pasos de acumulación de gradiente en 4 y la tasa de aprendizaje en 1e-4. Entrenar 3 épocas sobre datos chinos de alpaca.

La siguiente figura es la curva de cambio de pérdida de LLaMA-7B para un ajuste fino de parámetros eficiente y un ajuste fino completo. El indicador acc mide la precisión del modelo de lenguaje al predecir la siguiente palabra. A partir de la curva de cambio de pérdida, para el modelo de pedestal LLaMA-7B, los efectos de la afinación rápida y la afinación de prefijo son relativamente pobres En términos de pérdida de entrenamiento, la afinación rápida es incluso mejor que la afinación de prefijo. Esto puede deberse a que el ajuste de prefijo combina tensores inicializados aleatoriamente en cada capa del transformador, lo que probablemente dañe el conocimiento semántico del modelo de lenguaje previamente entrenado, lo que resulta en un ajuste deficiente. En comparación con la sintonización rápida y la sintonización de prefijo, el efecto del adaptador LLaMA se ha mejorado significativamente, lo que puede deberse a la introducción de un mecanismo de activación en el adaptador LLaMA para lograr un entrenamiento estable. Entre los métodos de ajuste fino de parámetros eficientes, el efecto de LoRA es el mejor.Desde la perspectiva de la pérdida de verificación, el efecto de LoRA es solo ligeramente inferior al ajuste fino de parámetros completo. En general, para LLaMA-7B, ajuste fino de parámetros completos > LoRA > adaptador LLaMA > ajuste rápido > ajuste de prefijo.

La siguiente figura es la curva de cambio de pérdida del LLaMA-7B chino para un ajuste fino de parámetros eficiente y un ajuste fino completo. El LLaMA-7B chino está preentrenado en el modelo de pedestal LLaMA-7B. La comparación de efectos de varios métodos ligeros de ajuste fino es básicamente la misma que la de LLaMA-7B. El efecto del ajuste rápido y el ajuste del prefijo es relativamente pobre, el efecto del adaptador LLaMA se ha mejorado significativamente y el efecto de LoRA es básicamente el mismo que el del ajuste fino de parámetros completos.

La siguiente figura es la curva de cambio de pérdida de ChatGLM-6B para un ajuste fino de parámetros eficiente y un ajuste fino completo.

Desde la perspectiva de la curva de cambio de pérdida, el efecto de LoRA es incluso mejor que el ajuste fino de parámetros completos.

La siguiente figura es la curva de cambio de pérdida de BLOOM para un ajuste fino de parámetros eficiente y un ajuste fino completo. Para el modelo base BLOOM-7B, el efecto de la afinación de prefijos es ligeramente mejor que la afinación rápida. En términos de pérdida de verificación, los efectos de la sintonización rápida y la sintonización de prefijos son básicamente equivalentes a la sintonización fina de parámetros completos. LoRA logró una pérdida de verificación menor que el ajuste fino de parámetros completos.

En general, se resumen las curvas de cambio de pérdida de ajuste fino de los cuatro modelos base. Para diferentes modelos base, el método de ajuste fino de parámetros completos es propenso a problemas de sobreajuste. A medida que aumenta la época de entrenamiento, la pérdida de entrenamiento presenta un patrón gradual. disminuyó, pero la pérdida de validación comenzó a aumentar a partir de la tercera época. Sin embargo, el método de ajuste fino de parámetros eficiente solo entrena una cantidad muy pequeña de parámetros nuevos y congela los parámetros del modelo de lenguaje preentrenado, evitando efectivamente el problema del ajuste excesivo. Para estos diversos métodos eficientes de ajuste fino de parámetros, la curva de pérdida de verificación y la curva de pérdida de entrenamiento básicamente se superponen y tienen la misma tendencia.

Después de comparar los efectos de los métodos de ajuste fino eficientes para diferentes parámetros, ¿qué modelo base tiene un mejor efecto de ajuste fino? El tokenizador y el tamaño del vocabulario de los diferentes modelos base son diferentes, por lo que la pérdida de entrenamiento entre ellos no es comparable. La siguiente figura es la curva de cambio de pérdida del ajuste fino de LoRA en diferentes modelos base. Dado que no es comparable, no tiene importancia práctica.

Como se muestra en la figura a continuación, puede intentar comparar los efectos de diferentes modelos base y métodos eficientes de ajuste fino para diferentes parámetros de ejemplos específicos. Para los modelos LLaMA y LLaMA chino, el efecto de la sintonización rápida y la sintonización de prefijos es muy pobre y no puede generar respuestas en chino fluidas. Aunque los datos previos al entrenamiento de LLaMA no contienen chino, aún puede generar buenas respuestas en chino después de ajustar las instrucciones. Además, las respuestas generadas por el ajuste fino de LoRA son significativamente mejores que las del adaptador LLaMA.

En comparación con LLaMA, el LLaMA chino con vocabulario ampliado genera mejores respuestas después de un ajuste fino. Esto también verifica que el vocabulario extendido ayuda a mejorar el efecto de LLaMA en chino.

Para BLOOM, tanto la afinación rápida como la afinación de prefijos pueden generar respuestas fluidas en chino, y las respuestas generadas por la afinación de prefijos son mejores que las afinaciones rápidas. El modelo ChatGLM-6B genera una respuesta corta, que es relativamente simple.

5. Resumen

Este documento primero compara los tres principales modelos de lenguaje grande de código abierto LLaMA, ChatGLM y BLOOM a partir de los datos de entrenamiento, el tokenizador y los detalles de la estructura del modelo, y presenta los modelos derivados de estos tres modelos básicos; luego presenta diferentes modelos de lenguaje grande en detalle. detalles del tokenizador, normalización de capas, función de activación y codificación de posición; luego describe los métodos eficientes de ajuste fino de ajuste rápido, ajuste de prefijo, adaptador LLaMA y parámetros LoRA; finalmente, compara los efectos de diferentes modelos de lenguaje base y diferentes parámetros finos -métodos de sintonización.

6. Enlaces de referencia

1. Zhou C, Liu P, Xu P, et al. Lima: Menos es más para la alineación[J]. preimpresión de arXiv arXiv:2305.11206, 2023.

2. Touvron H, Lavril T, Izacard G, et al. Llama: Modelos lingüísticos básicos abiertos y eficientes[J]. preimpresión de arXiv arXiv:2302.13971, 2023.

3. Hoffmann J, Borgeaud S, Mensch A, et al. Entrenamiento de modelos de lenguaje grande óptimos para computación[J]. preimpresión de arXiv arXiv:2203.15556, 2022.

4. Zeng A, Liu X, Du Z, et al. Glm-130b: un modelo preentrenado bilingüe abierto[J]. preimpresión de arXiv arXiv:2210.02414, 2022.

5. Scao TL, Fan A, Akiki C, et al. Bloom: un modelo de lenguaje multilingüe de acceso abierto de 176b-parámetro[J]. preimpresión de arXiv arXiv:2211.05100, 2022.

6. Cui Y, Yang Z, Yao X. Codificación de texto eficiente y eficaz para chino LLaMA y Alpaca[J]. preimpresión de arXiv arXiv:2304.08177, 2023.

7. Xiong R, Yang Y, He D, et al. Sobre la normalización de capas en la arquitectura del transformador[C]//International Conference on Machine Learning. PMLR, 2020: 10524-10533.

8. Zhang B, Sennrich R. Normalización de la capa cuadrática media de la raíz [J]. Avances en sistemas de procesamiento de información neuronal, 2019, 32.

9. Wang H, Ma S, Dong L, et al. Deepnet: escalado de transformadores a 1000 capas[J]. preimpresión de arXiv arXiv:2203.00555, 2022.

10. Las variantes de Shazeer N. Glu mejoran el transformador [J]. preimpresión de arXiv arXiv:2002.05202, 2020.

11. Su J, Lu Y, Pan S, et al. Roformer: Transformador mejorado con incrustación de posición rotatoria [J]. preimpresión de arXiv arXiv:2104.09864, 2021.

12. Presione O, Smith NA, Lewis M. Tren corto, prueba larga: la atención con sesgos lineales permite la extrapolación de longitud de entrada [J]. preimpresión de arXiv arXiv:2108.12409, 2021.

13. Lester B, Al-Rfou R, Constant N. El poder de la escala para el ajuste rápido de parámetros eficientes [J]. preimpresión de arXiv arXiv:2104.08691, 2021.

14. Li XL, Liang P. Ajuste de prefijos: optimización de indicaciones continuas para la generación [J]. preimpresión de arXiv arXiv:2101.00190, 2021.

15. Houlsby N, Giurgiu A, Jastrzebski S, et al. Aprendizaje de transferencia eficiente de parámetros para NLP[C]//Conferencia internacional sobre aprendizaje automático. PMLR, 2019: 2790-2799.

16. Zhang R, Han J, Zhou A, et al. Llama-adaptador: ajuste fino eficiente de los modelos de lenguaje con atención de inicio cero [J]. preimpresión de arXiv arXiv:2303.16199, 2023.

17. Hu EJ, Shen Y, Wallis P, et al. Lora: Adaptación de bajo rango de grandes modelos de lenguaje [J]. preimpresión de arXiv arXiv:2106.09685, 2021.

Supongo que te gusta

Origin blog.csdn.net/qq_39970492/article/details/131246323
Recomendado
Clasificación