Una línea de código mejora el rendimiento de los modelos grandes en un 10 %, desarrollador: almuerzo gratis

Fuente original: Qubits

Fuente de la imagen: Generado por Unbounded AI

Hay un "almuerzo gratis" para el ajuste fino de modelos grandes, donde una sola línea de código puede mejorar el rendimiento en al menos un 10%.

Incluso hubo una duplicación del rendimiento en Llama 2 con parámetros 7B, y Mistral también experimentó un aumento de una cuarta parte.

Aunque este método se utiliza durante la fase de ajuste fino supervisado, los modelos RLHF también pueden beneficiarse de él.

来自马里兰州大学、纽约大学等机构的研究人员提出了名为NEFT(une) Método de ajuste fino.

Se trata de una nueva técnica de regularización que se puede utilizar para mejorar el rendimiento de los modelos supervisados ajustados (SFT).

Este método ha sido incluido en la biblioteca TRL por HuggingFace y se puede llamar agregando una línea adicional de código para importar.

NEFT no solo es fácil de operar, sino que no agrega costos significativos, y los autores lo llaman un "almuerzo gratis".

Algunos internautas intentaron afinar el Mistral-7B basado en Guanaco (un modelo de la familia de las alpacas) de esta manera, y la mejora del rendimiento fue obvia.

Entonces, ¿cómo hace NEFTune para "ensangrentar" un gran número de modelos grandes con una sola línea de código?

Añadir ruido al modelo

El nombre completo de NEFTune es Noisy Embedding Fine Tuning, que significa "Embedded Tuning with Noise".

Los desarrolladores creen que el sobreajuste es un factor importante que limita el rendimiento de los modelos grandes, por lo que se adopta el método de agregar ruido a la capa de incrustación durante la fase de entrenamiento para evitar la aparición de sobreajuste, mejorando así el rendimiento.

En concreto, el texto de la base de datos de entrenamiento se tokeniza primero y se convierte en un vector de incrustación.

A continuación, el sistema genera aleatoriamente un vector de ruido y ajusta el ruido a una intensidad determinada con un escalador.

El ruido escalado se agrega al vector de incrustación como entrada al modelo y comienza el entrenamiento.

Con cada iteración de entrenamiento, se genera nuevo ruido y se agrega a la capa de incrustación.

from torch.nn import funcional como F

def NEFTune(modelo, noise_alpha=5)
def noised_embed(orig_embed, noise_alpha):
def new_func(x):
if model.training:
embed_init = orig_embed(x)
dims = torch.tensor(embed_init.size(1) * embed_init.size(2))
mag_norm = noise_alpha/torch.sqrt(dims)
return embed_init + torch.zeros_like(embed_init).uniform_(-mag_norm, mag_norm)
más:
return orig_embed(x)
Volver new_func
model.base_model.model.model.embed_tokens.forward = noised_embed(model.base_model.model.model.embed_tokens, noise_alpha)
Modelo de devolución

En este código, el parámetro noise_alpha en la función NEFTune es la intensidad de ruido (coeficiente), y mag_norm es el rango de ruido en el proceso real.

NEFT solo agrega ruido al modelo durante el proceso de entrenamiento, y no existe tal proceso en la etapa de inferencia, y la instrucción if en el código desempeña este papel.

En el modo de entrenamiento, el valor devuelto de la función new_func es la capa de incrustación después de agregar ruido.

Este código se publica para explicar la necesidad, si solo desea llamar a NEFT, puede llamarlo directamente desde la biblioteca TRL sin usar el código completo anterior.

El siguiente código es un ejemplo de ajuste fino del modelo OPT-350M:

De load_dataset de importación de conjuntos de datos
de trl import SFTTrainer

dataset = load_dataset("imdb", split="train")

entrenador = SFTTrainer(
"Facebook/OPT-350M",
train_dataset=conjunto de datos,
dataset_text_field="texto",
max_seq_length=512,
)
entrenador.tren()

En cuanto a los conjuntos de datos, los desarrolladores han utilizado un total de cuatro conjuntos de datos diferentes, como Alpaca y ShareGPT, para ajustarlos.

Según los autores, las razones para elegir estos datos incluyen que son más famosos, han sido SOTA, etc.

Además, debido a consideraciones de rendimiento del hardware, se seleccionaron conjuntos de datos de diálogo de una sola ronda durante el experimento.

Entonces, ¿cómo se comporta el modelo grande después de la sintonización con el método NEFT?

Hasta 1 veces mejor rendimiento

El equipo de investigación probó principalmente la calidad del texto y la capacidad de diálogo generadas antes y después del ajuste del modelo.

Su calidad china se basa principalmente en el conjunto de datos de Aplaca, evaluado con ChatGPT y GPT-4.

El modelo utilizado como referencia es Text-Davinci-003, y la proporción del modelo entrenado que supera a TD3 es el índice de evaluación.

Con el fin de ahorrar recursos, el equipo de investigación utilizó primero ChatGPT para determinar si evaluar o llamar a GPT-4 ellos mismos, y en algunos casos juzgar manualmente.

Resultados En diferentes conjuntos de datos de entrenamiento, Llama 2 tiene una mejora de rendimiento de al menos el 10 % después del ajuste, y se duplica directamente en el conjunto de datos de Alpaca.

Implementado en OPT y Llama 1, el enfoque NEFT también puede traer algunas mejoras de rendimiento.

La tarea utilizada para evaluar la capacidad de chat del modelo es el OpenLLM Leadorboard.

Se encuentra que la capacidad de chat del modelo ajustado NEFT también se mejora aún más en comparación con Evol-Instruct.

Los autores también evalúan si la mejora de la calidad del texto y las capacidades de chat sin un aumento significativo en el costo conducirá a una disminución en otras capacidades.

Los resultados muestran que el método NEFT no tiene un efecto significativo sobre otras capacidades del modelo en diferentes conjuntos de datos y modelos.

Durante el experimento, los autores también encontraron que el texto generado por el modelo no copiaba los datos de entrenamiento, lo que sugiere que el modelo tenía ciertas capacidades de generalización.

Para confirmar esto, los autores evaluaron la pérdida del modelo y encontraron que la pérdida del conjunto de datos de prueba era menor que los datos de entrenamiento, lo que confirma esta opinión.

Además, los autores encontraron que después de los ajustes de NEFT, el texto generado por el modelo no solo aumentó en calidad y longitud, sino que también aumentó el contenido sin repetición.

Con el fin de confirmar que la mejora en la calidad del texto fue causada por la adición de ruido y no por el aumento en la longitud del texto, los investigadores también realizaron experimentos de ablación.

Los resultados muestran que simplemente forzar el modelo para generar texto más largo no puede lograr el efecto de NEFT.

Dirección del papel:

Ver originales
Esta página puede contener contenido de terceros, que se proporciona únicamente con fines informativos (sin garantías ni declaraciones) y no debe considerarse como un respaldo por parte de Gate a las opiniones expresadas ni como asesoramiento financiero o profesional. Consulte el Descargo de responsabilidad para obtener más detalles.
  • Recompensa
  • Comentar
  • Compartir
Comentar
0/400
Sin comentarios
Opere con criptomonedas en cualquier momento y lugar
qrCode
Escanee para descargar la aplicación Gate
Comunidad
Español
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)