Finetuning é o processo de adaptar um modelo a uma tarefa específica, treinando ainda mais o modelo como um todo, ou parte dele.
O Finetuning pode melhorar vários aspectos de um modelo. Pode melhorar os recursos específicos de domínio do modelo, como codificação ou resposta a questões médicas e também pode fortalecer sua segurança. No entanto, é mais frequentemente usado para melhorar a habilidade do modelo de seguir instruções, particularmente para garantir que ele adere a estilos e formatos de saída específicos.
Comparado aos métodos baseados em prompt, o finetuning incorre em uma pegada de memória muito mais alta. Na escala dos modelos atuais, um simples finetuning geralmente exigirá mais memória do que a disponível em uma única GPU. Isso torna o finetuning caro e desafiador de se fazer.
Uma abordagem eficiente em termos de memória que se tornou dominante no espaço do finetuning é o PEFT (Finetuning com eficiência de parâmetro). Este artigo explora o PEFT e como se difere do finetuning tradicional.
Finetuning leva você ao campo do treinamento de modelos, onde o conhecimento de ML se faz necessário.
Visão geral do Finetuning
Para realizar o ajuste fino (finetuning), você começa com um modelo básico que possui alguns, mas não todos, os recursos necessários. O objetivo do Finetuning é fazer com que este modelo alcance um desempenho bom o suficiente para a sua tarefa específica.
Finetuning é uma maneira de transferir o aprendizado. A aprendizagem de transferência se concentra em como transferir o conhecimento adquirido de uma tarefa para acelerar o aprendizado de uma tarefa nova, mas relacionada.
Desde os primeiros dias de aprendizado profundo, o aprendizado de transferência oferece uma solução para tarefas com dados de treinamento limitados ou caros. Ao treinar um modelo de base em tarefas com dados abundantes, você pode transferir esse conhecimento para uma tarefa de destino.
Para os LLMs, o conhecimento adquirido com o pré-treinamento na conclusão do texto (uma tarefa com dados abundantes) é transferido para tarefas mais especializadas, como resposta a questões legais ou texto para SQL.
A aprendizagem de transferência melhora a eficiência da amostra, permitindo que um modelo aprenda o mesmo comportamento com menos exemplos.
O Finetuning faz parte do processo de treinamento de um modelo. É uma extensão do modelo pré-treinamento. Porque qualquer treinamento que aconteça após o pré-treinamento é finetuning, este pode assumir muitas formas diferentes.
Lembre-se de que o processo de treinamento de um modelo começa com o pré-treinamento, o que geralmente é feito com a auto-supervisão.
Antes de realizar o ajuste fino neste modelo pré-treinado com dados caros específicos da tarefa, você pode conduzir o ajuste fino com auto-supervisão usando dados baratos relacionada à tarefa. Por exemplo, para ajustar um modelo para resposta a perguntas legais, antes de ajustá-lo com dados caros anotados (pergunta, resposta), você pode tentar o ajuste com documentos legais brutos.
A enorme quantidade de dados com a qual um modelo pode aprender durante o aprendizado auto-supervisionado confere ao modelo uma rica compreensão do mundo. Mas pode ser difícil para os usuários extrair esse conhecimento para suas tarefas, ou o comportamento do modelo pode estar desalinhado com as preferências humanas. O ajuste fino supervisionado utiliza dados anotados de alta qualidade para refinar o modelo e alinhá-lo ao uso e às preferências humanas.
Durante o Finetuning supervisionado, o modelo é treinado usando pares (entrada, saída): a entrada pode ser uma instrução e a saída pode ser uma resposta.
Um modelo também pode ser ajustado com aprendizado de reforço para gerar respostas que maximizam a preferência humana. O finetuning de preferências requer dados comparativos que normalmente seguem o formato (instrução, resposta vencedora, resposta perdedora).
É possível ajustar um modelo para estender seu comprimento de contexto. Finetuning de longo contexto geralmente requer modificar a arquitetura do modelo, como ajustar os embeddings.
Quando realizar o Finetuning
O Finetuning é geralmente tentado após extensas experiências com métodos de prompt. No entanto, finetuning e prompt não são mutuamente exclusivos. Os problemas do mundo real geralmente exigem ambas as abordagens.
Razões para realizar o Finetunig
O principal motivo do Finetuning é melhorar a qualidade de um modelo, em termos de recursos gerais e recursos específicos de tarefas. Você pode ajustar um grande modelo para torná-lo ainda melhor, mas ajustar modelos menores é muito mais comum. Modelos menores requerem menos memória e, portanto, são mais fáceis de ajustar. Eles também são mais baratos e mais rápidos para usar na produção.
Uma abordagem comum é ajustar um pequeno modelo para imitar o comportamento de um modelo maior, usando dados gerados por esse grande modelo. Porque essa abordagem destila o conhecimento do modelo maior no modelo menor, é chamado de destilação.
Um modelo pequeno, ajustado em uma tarefa específica, pode superar um modelo “padrão” muito maior nessa tarefa.
Razões para não realizar o Finetunig
Primeiro, embora o ajuste fino de um modelo para uma tarefa específica possa melhorar seu desempenho para essa tarefa, ele pode degradá-lo para outras tarefas. Isso pode ser frustrante quando você planeja usar esse modelo para uma aplicação que espera prompts diversos.
Se você está apenas começando a experimentar um projeto, o ajuste fino raramente é a primeira coisa que você deve tentar. O ajuste fino requer altos investimentos iniciais e manutenção contínua. Primeiro, você precisa de dados. Dados anotados podem ser lentos e caros para serem adquiridos manualmente.
Segundo, o ajuste fino requer o conhecimento de como treinar modelos.
Terceiro, depois de ter um modelo ajustado, você precisará descobrir como servi-lo. Você mesmo o hospedará ou usará um serviço de API?
Mais importante, você precisa estabelecer uma política e um orçamento para monitorar, manter e atualizar seu modelo.
Experimentos de engenharia de IA devem começar com prompts. Explore soluções mais avançadas somente se o prompt por si só se mostrar inadequado.
Um benefício do ajuste fino, antes da introdução do cache de prompts, era que ele ajudava a otimizar o uso de tokens. Quanto mais exemplos você adicionar a um prompt, mais tokens de entrada o modelo usará, o que aumenta a latência e o custo.
Com o cache de prompts, em que segmentos repetitivos de prompts podem ser armazenados em cache para reutilização, isso não é mais um grande benefício.
Finetuning e RAG
Depois de maximizar os ganhos de desempenho com prompts, você pode se perguntar se deve usar RAG ou ajuste fino em seguida. A resposta depende se as falhas do seu modelo são baseadas em informações ou em comportamento.
Se o modelo falhar por falta de informações, um sistema RAG que forneça ao modelo acesso às fontes relevantes de informação pode ajudar. Falhas baseadas em informações ocorrem quando as saídas estão factualmente incorretas ou desatualizadas.
Por outro lado, se o modelo apresentar problemas comportamentais, o ajuste fino pode ajudar. Um problema comportamental ocorre quando as saídas do modelo são factualmente corretas, mas irrelevantes para a tarefa.
Outro problema é quando ele não segue o formato de saída esperado.
A análise sintática semântica é uma categoria de tarefas cujo sucesso depende da capacidade do modelo de gerar saídas no formato esperado e, portanto, frequentemente requer ajuste fino.
Resumindo, o ajuste fino é para a forma e o RAG é para os fatos.
Se o seu modelo apresentar problemas tanto de informação quanto de comportamento, comece com o RAG. O RAG normalmente é mais fácil, pois você não precisa se preocupar em selecionar dados de treinamento ou hospedar os modelos refinados. Ao usar o RAG, comece com soluções simples baseadas em termos, como o BM25, em vez de pular direto para algo que exija bancos de dados vetoriais.
Este pipeline de avaliação é o que você usará para avaliar seu progresso ao desenvolver sua aplicação. A avaliação não acontece apenas no início. Ela deve estar presente em todas as etapas do processo:
- Tente fazer com que um modelo execute sua tarefa apenas com prompts. Use as melhores práticas de engenharia de prompts, incluindo o versionamento sistemático de seus prompts.
- Adicione mais exemplos ao prompt. Dependendo do caso de uso, o número de exemplos necessários pode estar entre 1 e 50.
- Se o seu modelo falha frequentemente devido à falta de informações, conecte-o a fontes de dados que possam fornecer informações relevantes. Ao começar com o RAG, comece usando métodos básicos de recuperação, como a busca baseada em termos. Mesmo com uma recuperação simples, adicionar conhecimento relevante e preciso deve levar a alguma melhoria no desempenho do seu modelo.
- Dependendo dos modos de falha do seu modelo, você pode explorar uma destas próximas etapas:
- Se o modelo continuar apresentando falhas baseadas em informações, você pode tentar métodos de RAG ainda mais avançados, como a recuperação baseada em embeddings.
- Se o modelo continuar apresentando problemas comportamentais, como gerar respostas irrelevantes, mal formatadas ou inseguras, você pode optar pelo ajuste fino. A recuperação baseada em embeddings aumenta a complexidade da inferência ao introduzir componentes adicionais no pipeline, enquanto o ajuste fino aumenta a complexidade do desenvolvimento do modelo, mas mantém a inferência inalterada.
- Combine RAG e ajuste fino para obter ainda mais ganho de desempenho.
Na segunda parte deste artigo, falaremos sobre memória e técnicas de finetuning. Até lá!
Referências
Huyen, Chip. AI Engineering: Building Applications with Foundation Models
Comments (0)