Il existe un « déjeuner gratuit » pour le réglage fin des grands modèles, où une seule ligne de code peut améliorer les performances d’au moins 10 %.
Il y a même eu un doublement des performances sur Llama 2 avec des paramètres 7B, et Mistral a également vu une augmentation d’un quart.
Bien que cette méthode soit utilisée pendant la phase de mise au point supervisée, les modèles RLHF peuvent également en bénéficier.
来自马里兰州大学、纽约大学等机构的研究人员提出了名为NEFT(une) Méthode de mise au point.
Il s’agit d’une nouvelle technique de régularisation qui peut être utilisée pour améliorer les performances des modèles supervisés affinés (SFT).
Cette méthode a été incluse dans la bibliothèque TRL par HuggingFace et peut être appelée en ajoutant une ligne de code supplémentaire à importer.
Non seulement NEFT est facile à utiliser, mais il n’ajoute pas de coûts importants, et les auteurs l’appellent un « déjeuner gratuit ».
Certains internautes ont essayé de peaufiner le Mistral-7B basé sur le Guanaco (un modèle de la famille des alpagas) de cette manière, et l’amélioration des performances était évidente.
Alors, comment NEFTune « ensanglante-t-il » un grand nombre de grands modèles avec une seule ligne de code ?
Ajouter du bruit au modèle
Le nom complet de NEFTune est Noisy Embedding Fine Tuning, qui signifie « Embedded Tuning with Noise ».
Les développeurs pensent que le surapprentissage est un facteur majeur limitant les performances des grands modèles, de sorte que la méthode consistant à ajouter du bruit à la couche d’incorporation pendant la phase d’apprentissage est adoptée pour éviter l’apparition d’un surapprentissage, améliorant ainsi les performances.
Plus précisément, le texte de la base de données d’apprentissage est d’abord tokenisé et converti en vecteur d’incorporation.
Le système génère ensuite de manière aléatoire un vecteur de bruit et ajuste le bruit à une intensité définie à l’aide d’un scaler.
Le bruit mis à l’échelle est ajouté au vecteur d’incorporation en tant qu’entrée du modèle, et l’entraînement commence.
À chaque itération d’entraînement, un nouveau bruit est généré et ajouté à la couche d’incorporation.
Dans ce code, le paramètre noise_alpha de la fonction NEFTune est l’intensité du bruit (coefficient) et mag_norm est la plage de bruit dans le processus réel.
NEFT n’ajoute du bruit au modèle que pendant le processus d’apprentissage, et il n’y a pas de processus de ce type à l’étape d’inférence, et l’instruction if dans le code joue ce rôle.
En mode d’entraînement, la valeur de retour de la fonction new_func est la couche d’incorporation après l’ajout de bruit.
Ce code est posté pour expliquer le besoin, si vous voulez juste appeler NEFT, vous pouvez l’appeler directement à partir de la bibliothèque TRL sans utiliser le code complet ci-dessus.
Le code suivant est un exemple de réglage fin du modèle OPT-350M :
à partir de jeux de données d’importation load_dataset
à partir de l’import trl SFTTrainer
En termes d’ensembles de données, les développeurs ont utilisé un total de quatre ensembles de données différents tels que Alpaca et ShareGPT pour les affiner.
Selon les auteurs, les raisons du choix de ces données incluent le fait qu’elles sont plus célèbres, qu’elles ont été SOTA, etc.
De plus, pour des raisons de performances matérielles, des ensembles de données de dialogue à un seul tour ont été sélectionnés au cours de l’expérience.
Alors, comment le grand modèle se comporte-t-il après le réglage avec la méthode NEFT ?
Jusqu’à 1 fois plus de performances
L’équipe de recherche a principalement testé la qualité du texte et la capacité de dialogue générés avant et après le réglage du modèle.
Sa qualité chinoise est principalement basée sur l’ensemble de données Apaca, évalué à l’aide de ChatGPT et GPT-4.
Le modèle utilisé comme référence est Text-Davinci-003, et la proportion du modèle entraîné qui surpasse TD3 est l’indice d’évaluation.
Afin d’économiser des ressources, l’équipe de recherche a d’abord utilisé ChatGPT pour déterminer s’il fallait évaluer ou appeler GPT-4 eux-mêmes, et dans certains cas juger manuellement.
Résultats Dans différents jeux de données d’entraînement, Llama 2 a une amélioration des performances d’au moins 10 % après ajustement, et elle est directement doublée sur l’ensemble de données Alpaga.
Déployée sur OPT et Llama 1, l’approche NEFT peut également apporter des améliorations de performances.
La tâche utilisée pour évaluer la capacité de chat du modèle est le Leadorboard OpenLLM.
Il est constaté que la capacité de chat du modèle ajusté NEFT est également améliorée par rapport à Evol-Instruct.
Les auteurs évaluent également si l’amélioration de la qualité du texte et des capacités de chat sans augmentation significative des coûts entraînera un déclin d’autres capacités.
Les résultats montrent que la méthode NEFT n’a pas d’effet significatif sur les autres capacités du modèle sur différents ensembles de données et modèles.
Au cours de l’expérience, les auteurs ont également constaté que le texte généré par le modèle ne copiait pas les données d’apprentissage, ce qui suggère que le modèle avait certaines capacités de généralisation.
Pour le confirmer, les auteurs ont évalué la perte du modèle et ont constaté que la perte du jeu de données de test était inférieure aux données d’apprentissage, confirmant ce point de vue.
De plus, les auteurs ont constaté qu’après les ajustements NEFT, le texte généré par le modèle a non seulement augmenté en qualité et en longueur, mais a également augmenté le contenu sans répétition.
Afin de confirmer que l’amélioration de la qualité du texte était due à l’ajout de bruit et non à l’augmentation de la longueur du texte, les chercheurs ont également effectué des expériences d’ablation.
Les résultats montrent que le simple fait de forcer le modèle à générer du texte plus long ne peut pas obtenir l’effet de NEFT.
Adresse papier :
Voir l'original
Cette page peut inclure du contenu de tiers fourni à des fins d'information uniquement. Gate ne garantit ni l'exactitude ni la validité de ces contenus, n’endosse pas les opinions exprimées, et ne fournit aucun conseil financier ou professionnel à travers ces informations. Voir la section Avertissement pour plus de détails.
Une ligne de code améliore les performances des grands modèles de 10 %, développeur : déjeuner gratuit
Source d’origine : Qubits
Il existe un « déjeuner gratuit » pour le réglage fin des grands modèles, où une seule ligne de code peut améliorer les performances d’au moins 10 %.
Il y a même eu un doublement des performances sur Llama 2 avec des paramètres 7B, et Mistral a également vu une augmentation d’un quart.
Bien que cette méthode soit utilisée pendant la phase de mise au point supervisée, les modèles RLHF peuvent également en bénéficier.
Il s’agit d’une nouvelle technique de régularisation qui peut être utilisée pour améliorer les performances des modèles supervisés affinés (SFT).
Non seulement NEFT est facile à utiliser, mais il n’ajoute pas de coûts importants, et les auteurs l’appellent un « déjeuner gratuit ».
Ajouter du bruit au modèle
Le nom complet de NEFTune est Noisy Embedding Fine Tuning, qui signifie « Embedded Tuning with Noise ».
Les développeurs pensent que le surapprentissage est un facteur majeur limitant les performances des grands modèles, de sorte que la méthode consistant à ajouter du bruit à la couche d’incorporation pendant la phase d’apprentissage est adoptée pour éviter l’apparition d’un surapprentissage, améliorant ainsi les performances.
Le système génère ensuite de manière aléatoire un vecteur de bruit et ajuste le bruit à une intensité définie à l’aide d’un scaler.
Le bruit mis à l’échelle est ajouté au vecteur d’incorporation en tant qu’entrée du modèle, et l’entraînement commence.
À chaque itération d’entraînement, un nouveau bruit est généré et ajouté à la couche d’incorporation.
from torch.nn import fonctionnel en tant que F
def NEFTune(modèle, 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/torche.sqrt(dims)
retour embed_init + torch.zeros_like(embed_init).uniform_(-mag_norm, mag_norm)
autre:
Retour orig_embed(x)
Retour new_func
model.base_model.model.model.embed_tokens.forward = noised_embed(model.base_model.model.model.embed_tokens, noise_alpha)
Modèle de retour
Dans ce code, le paramètre noise_alpha de la fonction NEFTune est l’intensité du bruit (coefficient) et mag_norm est la plage de bruit dans le processus réel.
NEFT n’ajoute du bruit au modèle que pendant le processus d’apprentissage, et il n’y a pas de processus de ce type à l’étape d’inférence, et l’instruction if dans le code joue ce rôle.
En mode d’entraînement, la valeur de retour de la fonction new_func est la couche d’incorporation après l’ajout de bruit.
Ce code est posté pour expliquer le besoin, si vous voulez juste appeler NEFT, vous pouvez l’appeler directement à partir de la bibliothèque TRL sans utiliser le code complet ci-dessus.
Le code suivant est un exemple de réglage fin du modèle OPT-350M :
à partir de jeux de données d’importation load_dataset
à partir de l’import trl SFTTrainer
dataset = load_dataset(« imdb », split="train »)
trainer = SFTTrainer(
« Facebook/Opt-350M »,
train_dataset=jeu de données,
dataset_text_field="texte »,
max_seq_length = 512,
)
trainer.train()
En termes d’ensembles de données, les développeurs ont utilisé un total de quatre ensembles de données différents tels que Alpaca et ShareGPT pour les affiner.
Selon les auteurs, les raisons du choix de ces données incluent le fait qu’elles sont plus célèbres, qu’elles ont été SOTA, etc.
De plus, pour des raisons de performances matérielles, des ensembles de données de dialogue à un seul tour ont été sélectionnés au cours de l’expérience.
Alors, comment le grand modèle se comporte-t-il après le réglage avec la méthode NEFT ?
Jusqu’à 1 fois plus de performances
L’équipe de recherche a principalement testé la qualité du texte et la capacité de dialogue générés avant et après le réglage du modèle.
Sa qualité chinoise est principalement basée sur l’ensemble de données Apaca, évalué à l’aide de ChatGPT et GPT-4.
Le modèle utilisé comme référence est Text-Davinci-003, et la proportion du modèle entraîné qui surpasse TD3 est l’indice d’évaluation.
Afin d’économiser des ressources, l’équipe de recherche a d’abord utilisé ChatGPT pour déterminer s’il fallait évaluer ou appeler GPT-4 eux-mêmes, et dans certains cas juger manuellement.
Résultats Dans différents jeux de données d’entraînement, Llama 2 a une amélioration des performances d’au moins 10 % après ajustement, et elle est directement doublée sur l’ensemble de données Alpaga.
Il est constaté que la capacité de chat du modèle ajusté NEFT est également améliorée par rapport à Evol-Instruct.
Les résultats montrent que la méthode NEFT n’a pas d’effet significatif sur les autres capacités du modèle sur différents ensembles de données et modèles.
Pour le confirmer, les auteurs ont évalué la perte du modèle et ont constaté que la perte du jeu de données de test était inférieure aux données d’apprentissage, confirmant ce point de vue.
Afin de confirmer que l’amélioration de la qualité du texte était due à l’ajout de bruit et non à l’augmentation de la longueur du texte, les chercheurs ont également effectué des expériences d’ablation.
Les résultats montrent que le simple fait de forcer le modèle à générer du texte plus long ne peut pas obtenir l’effet de NEFT.