Há um "almoço grátis" para ajuste fino de modelos grandes, onde uma única linha de código pode melhorar o desempenho em pelo menos 10%.
Houve até uma duplicação do desempenho no Llama 2 com parâmetros 7B, e o Mistral também viu um aumento trimestral.
Embora este método seja usado durante a fase de ajuste fino supervisionado, os modelos RLHF também podem se beneficiar dele.
来自马里兰州大学、纽约大学等机构的研究人员提出了名为NEFT(une) Método de ajuste fino.
Esta é uma nova técnica de regularização que pode ser usada para melhorar o desempenho de modelos supervisionados ajustados (SFT).
Este método foi incluído na biblioteca TRL por HuggingFace e pode ser chamado adicionando uma linha adicional de código para importar.
O NEFT não só é fácil de operar, como também não acrescenta custos significativos, e os autores chamam-lhe "almoço grátis".
Alguns internautas tentaram ajustar o Mistral-7B baseado em Guanaco (um modelo da família alpaca) desta forma, e a melhoria de desempenho foi óbvia.
Então, como o NEFTune "sangrou" um grande número de modelos grandes com uma única linha de código?
Adicionar ruído ao modelo
O nome completo de NEFTune é Noisy Embedding Fine Tuning, que significa "Embedded Tuning with Noise".
Os desenvolvedores acreditam que o overfitting é um fator importante que limita o desempenho de modelos grandes, por isso o método de adicionar ruído à camada de incorporação durante a fase de treinamento é adotado para evitar a ocorrência de overfitting, melhorando assim o desempenho.
Especificamente, o texto no banco de dados de treinamento é primeiro tokenizado e convertido em um vetor de incorporação.
Em seguida, o sistema gera aleatoriamente um vetor de ruído e ajusta o ruído a uma intensidade definida com um escalador.
O ruído dimensionado é adicionado ao vetor de incorporação como entrada para o modelo e o treinamento começa.
A cada iteração de treinamento, novos ruídos são gerados e adicionados à camada de incorporação.
de torch.nn importação funcional como F
def NEFTune(modelo, noise_alpha=5)
def noised_embed(orig_embed, noise_alpha):
def new_func(x):
se 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)
embed_init de retorno + torch.zeros_like(embed_init).uniform_(-mag_norm, mag_norm)
senão:
retorno orig_embed(x)
new_func de retorno
model.base_model.model.model.embed_tokens.forward = noised_embed(model.base_model.model.model.embed_tokens, noise_alpha)
modelo de retorno
Neste código, o parâmetro noise_alpha na função NEFTune é a intensidade do ruído (coeficiente) e mag_norm é a faixa de ruído no processo real.
O NEFT apenas adiciona ruído ao modelo durante o processo de treinamento, e não há esse processo no estágio de inferência, e a instrução if no código desempenha esse papel.
No modo de treinamento, o valor de retorno da função new_func é a camada de incorporação após a adição de ruído.
Este código é postado para explicar a necessidade, se você quiser apenas chamar NEFT, você pode chamá-lo diretamente da biblioteca TRL sem usar o código completo acima.
O código a seguir é um exemplo de ajuste fino do modelo OPT-350M:
a partir de load_dataset de importação de conjuntos de dados
de trl import SFTTrainer
conjunto de dados = load_dataset("imdb", split="train")
Em termos de conjuntos de dados, os desenvolvedores usaram um total de quatro conjuntos de dados diferentes, como Alpaca e ShareGPT, para ajustá-los.
De acordo com os autores, as razões para a escolha desses dados incluem que eles são mais famosos, foram SOTA, e assim por diante.
Além disso, devido a considerações de desempenho de hardware, conjuntos de dados de diálogo de rodada única foram selecionados durante o experimento.
Então, como o modelo grande se comporta após o ajuste com o método NEFT?
Até 1x melhor desempenho
A equipa de investigação testou principalmente a qualidade do texto e a capacidade de diálogo gerada antes e depois da afinação do modelo.
Sua qualidade chinesa é baseada principalmente no conjunto de dados Aplaca, avaliado usando ChatGPT e GPT-4.
O modelo utilizado como referência é o Text-Davinci-003, e a proporção do modelo treinado que supera o TD3 é o índice de avaliação.
A fim de economizar recursos, a equipe de pesquisa primeiro usou o ChatGPT para determinar se deveria avaliar ou chamar o GPT-4 e, em alguns casos, julgou manualmente.
Resultados Em diferentes conjuntos de dados de treinamento, o Llama 2 tem uma melhoria de desempenho de pelo menos 10% após o ajuste, e é diretamente dobrado no conjunto de dados Alpaca.
Implementada para OPT e Llama 1, a abordagem NEFT também pode trazer algumas melhorias de desempenho.
A tarefa usada para avaliar a capacidade de chat do modelo é o OpenLLM Leadorboard.
Verifica-se que a capacidade de chat do modelo ajustado NEFT também é melhorada em comparação com o Evol-Instruct.
Os autores também avaliam se melhorar a qualidade do texto e os recursos de bate-papo sem um aumento significativo no custo levará a um declínio em outros recursos.
Os resultados mostram que o método NEFT não tem efeito significativo sobre outras capacidades do modelo em diferentes conjuntos de dados e modelos.
Durante o experimento, os autores também descobriram que o texto gerado pelo modelo não copiava os dados de treinamento, sugerindo que o modelo tinha certas capacidades de generalização.
Para confirmar isso, os autores avaliaram a perda do modelo e descobriram que a perda do conjunto de dados do teste foi menor do que os dados de treinamento, confirmando essa visão.
Além disso, os autores verificaram que, após os ajustes do NEFT, o texto gerado pelo modelo não só aumentou em qualidade e extensão, mas também aumentou o conteúdo sem repetição.
Para confirmar que a melhoria na qualidade do texto foi causada pela adição de ruído e não pelo aumento do comprimento do texto, os pesquisadores também realizaram experimentos de ablação.
Os resultados mostram que simplesmente forçar o modelo a gerar texto mais longo não pode alcançar o efeito do NEFT.
Endereço em papel:
Ver original
Esta página pode conter conteúdo de terceiros, que é fornecido apenas para fins informativos (não para representações/garantias) e não deve ser considerada como um endosso de suas opiniões pela Gate nem como aconselhamento financeiro ou profissional. Consulte a Isenção de responsabilidade para obter detalhes.
Uma linha de código melhora o desempenho do modelo grande em 10%, desenvolvedor: almoço grátis
Fonte original: Qubits
Há um "almoço grátis" para ajuste fino de modelos grandes, onde uma única linha de código pode melhorar o desempenho em pelo menos 10%.
Houve até uma duplicação do desempenho no Llama 2 com parâmetros 7B, e o Mistral também viu um aumento trimestral.
Embora este método seja usado durante a fase de ajuste fino supervisionado, os modelos RLHF também podem se beneficiar dele.
Esta é uma nova técnica de regularização que pode ser usada para melhorar o desempenho de modelos supervisionados ajustados (SFT).
O NEFT não só é fácil de operar, como também não acrescenta custos significativos, e os autores chamam-lhe "almoço grátis".
Adicionar ruído ao modelo
O nome completo de NEFTune é Noisy Embedding Fine Tuning, que significa "Embedded Tuning with Noise".
Os desenvolvedores acreditam que o overfitting é um fator importante que limita o desempenho de modelos grandes, por isso o método de adicionar ruído à camada de incorporação durante a fase de treinamento é adotado para evitar a ocorrência de overfitting, melhorando assim o desempenho.
Em seguida, o sistema gera aleatoriamente um vetor de ruído e ajusta o ruído a uma intensidade definida com um escalador.
O ruído dimensionado é adicionado ao vetor de incorporação como entrada para o modelo e o treinamento começa.
A cada iteração de treinamento, novos ruídos são gerados e adicionados à camada de incorporação.
de torch.nn importação funcional como F
def NEFTune(modelo, noise_alpha=5)
def noised_embed(orig_embed, noise_alpha):
def new_func(x):
se 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)
embed_init de retorno + torch.zeros_like(embed_init).uniform_(-mag_norm, mag_norm)
senão:
retorno orig_embed(x)
new_func de retorno
model.base_model.model.model.embed_tokens.forward = noised_embed(model.base_model.model.model.embed_tokens, noise_alpha)
modelo de retorno
Neste código, o parâmetro noise_alpha na função NEFTune é a intensidade do ruído (coeficiente) e mag_norm é a faixa de ruído no processo real.
O NEFT apenas adiciona ruído ao modelo durante o processo de treinamento, e não há esse processo no estágio de inferência, e a instrução if no código desempenha esse papel.
No modo de treinamento, o valor de retorno da função new_func é a camada de incorporação após a adição de ruído.
Este código é postado para explicar a necessidade, se você quiser apenas chamar NEFT, você pode chamá-lo diretamente da biblioteca TRL sem usar o código completo acima.
O código a seguir é um exemplo de ajuste fino do modelo OPT-350M:
a partir de load_dataset de importação de conjuntos de dados
de trl import SFTTrainer
conjunto de dados = load_dataset("imdb", split="train")
formador = SFTTrainer(
"Facebook/OPT-350M",
train_dataset=conjunto de dados,
dataset_text_field="texto",
max_seq_length=512,
)
formador.treino()
Em termos de conjuntos de dados, os desenvolvedores usaram um total de quatro conjuntos de dados diferentes, como Alpaca e ShareGPT, para ajustá-los.
De acordo com os autores, as razões para a escolha desses dados incluem que eles são mais famosos, foram SOTA, e assim por diante.
Além disso, devido a considerações de desempenho de hardware, conjuntos de dados de diálogo de rodada única foram selecionados durante o experimento.
Então, como o modelo grande se comporta após o ajuste com o método NEFT?
Até 1x melhor desempenho
A equipa de investigação testou principalmente a qualidade do texto e a capacidade de diálogo gerada antes e depois da afinação do modelo.
Sua qualidade chinesa é baseada principalmente no conjunto de dados Aplaca, avaliado usando ChatGPT e GPT-4.
O modelo utilizado como referência é o Text-Davinci-003, e a proporção do modelo treinado que supera o TD3 é o índice de avaliação.
A fim de economizar recursos, a equipe de pesquisa primeiro usou o ChatGPT para determinar se deveria avaliar ou chamar o GPT-4 e, em alguns casos, julgou manualmente.
Resultados Em diferentes conjuntos de dados de treinamento, o Llama 2 tem uma melhoria de desempenho de pelo menos 10% após o ajuste, e é diretamente dobrado no conjunto de dados Alpaca.
Verifica-se que a capacidade de chat do modelo ajustado NEFT também é melhorada em comparação com o Evol-Instruct.
Os resultados mostram que o método NEFT não tem efeito significativo sobre outras capacidades do modelo em diferentes conjuntos de dados e modelos.
Para confirmar isso, os autores avaliaram a perda do modelo e descobriram que a perda do conjunto de dados do teste foi menor do que os dados de treinamento, confirmando essa visão.
Para confirmar que a melhoria na qualidade do texto foi causada pela adição de ruído e não pelo aumento do comprimento do texto, os pesquisadores também realizaram experimentos de ablação.
Os resultados mostram que simplesmente forçar o modelo a gerar texto mais longo não pode alcançar o efeito do NEFT.