Uma função de recompensa pontua numericamente cada resposta do modelo durante o ajuste fino de aprendizado por reforço. O indicador de recompensa é o que o aprendizado por reforço otimiza. Portanto, a qualidade dele determina diretamente a qualidade do ajuste. Todas as recompensas são ajustadas ao intervalo [-1, 1]. Qualquer valor fora desse intervalo é ajustado.
Esta página descreve cada tipo de recompensa compatível, as práticas recomendadas para criar recompensas e como validar uma configuração de recompensa antes de iniciar um job de ajuste. O ajuste do aprendizado por reforço é compatível com os seguintes tipos de recompensa:
- Recompensa de correspondência de strings
- Recompensa do avaliador automático baseado no Gemini
- Recompensa de execução de código
- Recompensa totalmente personalizável pelo Cloud Run
Também é possível combinar qualquer uma dessas quatro opções com ponderações por pontuador usando uma recompensa composta.
Restrições conhecidas
Os tempos limites a seguir se aplicam por tipo de recompensa:
| Tipo de recompensa | Tempo limite |
|---|---|
| Correspondência de strings | Sem tempo limite estrito |
| Execução de código | 100 segundos para cada chamada de método evaluate |
| Avaliador automático baseado no Gemini | Tempo limite de 1 minuto ao aguardar uma resposta de classificação do LLM |
| Cloud Run | Tempo limite de 5 minutos para cada acionador |
Configurar recompensas no console do Cloud de Confiance
Ao criar um job de ajuste fino de aprendizado por reforço no consoleCloud de Confiance em Modelos > Ajuste, a etapa Configuração de recompensa permite configurar recompensas únicas ou compostas:
Insira um Nome da recompensa e escolha um Tipo de recompensa no menu suspenso:
- Recompensa de correspondência de string: configure um Tipo de análise (como extração de expressão regular), uma Operação de correspondência (como Correspondência exata) e uma Expressão de destino, além de recompensas para respostas certas e erradas.
- Recompensa baseada em LLM: forneça um comando de autorrevisão e configure como a saída do autorrevisor é analisada e pontuada.
- Recompensa baseada em função Python: insira o código de avaliação personalizado do Python diretamente no editor inline ou faça upload de um arquivo Python.
- Recompensa totalmente personalizável via Cloud Run: forneça o URI do seu serviço do Cloud Run.
Especifique um Peso da recompensa para o card de recompensa.
Clique em Concluído.
Para configurar uma recompensa composta, clique em + Adicionar outra recompensa (até 16 recompensas). Cada card de recompensa recolhido mostra o peso configurado, e o formulário exibe o resumo do peso total.
Recompensa de correspondência de strings
Especificação da API: ReinforcementTuningStringMatchRewardScorer
A recompensa de correspondência de strings é uma configuração conveniente para avaliar respostas geradas pelo modelo em relação a informações empíricas conhecidas. Ela é particularmente útil para tarefas como perguntas de matemática, em que cada pergunta tem uma resposta correta conhecida.
Como o modelo pode gerar linha de raciocínio ou outras palavras antes de chegar à resposta final que você quer comparar com as informações empíricas, o avaliador de correspondência de strings oferece suporte a uma função de análise que processa a saída gerada pelo modelo usando uma extração de expressão regular.
Em seguida, você define como comparar a resposta do modelo extraída por regex com as informações empíricas. A informação empírica é fornecida por um campo em references, que você preenche em cada exemplo ao criar os arquivos de treinamento e validação.
Para o esquema de configuração, consulte a especificação da API ReinforcementTuningStringMatchRewardScorer. Para detalhes sobre o campo references, consulte a página Conjunto de dados de ajuste.
Recompensa do avaliador automático baseado no Gemini
Especificação da API: ReinforcementTuningAutoraterScorer
A recompensa do avaliador automático baseado no Gemini é uma configuração conveniente para avaliar respostas geradas por modelos com base no feedback do LLM como juiz. Por exemplo, talvez você queira que um modelo gere respostas em um determinado tom, que é decidido por um avaliador automático (LLM como um juiz).
Essa recompensa é compatível com dois padrões:
- O autoavaliador pode gerar diretamente uma pontuação numérica que é usada como feedback de aprendizado por reforço.
- O autorrater pode gerar uma avaliação que é analisada e comparada com padrões predefinidos.
O avaliador automático também pode gerar o raciocínio de linha de raciocínio. Assim, você pode analisar uma seção da resposta da mesma forma que a recompensa de correspondência de strings. Por exemplo, um avaliador automático pode gerar blahblahblah <answer>Yes</answer> ou blahblahblah <answer>No</answer>, e você pode criar uma função de análise para extrair a resposta do avaliador automático entre <answer> e </answer>. Em seguida, compare a saída do avaliador automático com uma expressão predefinida que mapeia Yes para uma pontuação +1 e qualquer valor não correspondente (como No) para uma pontuação -1.
O exemplo de configuração de avaliador automático a seguir filtra para extrair o texto
entre tags <answer> e mapeia Yes para +1 e qualquer outro valor para -1:
{
"autoraterResponseParseConfig": {
"parseType": "REGEX_EXTRACT",
"regexExtractExpression": "<answer>(.*?)</answer>"
},
"exactMatchScorer": {
"expression": "Yes",
"correctAnswerReward": 1.0,
"wrongAnswerReward": -1.0
}
}
Recompensa de execução de código
Especificação da API: ReinforcementTuningCodeExecutionRewardScorer
Com a configuração de recompensa de execução de código, você fornece código Python definido pelo usuário para avaliar as respostas do modelo sem configurar um serviço do Cloud Run. Implemente uma função evaluate com a seguinte assinatura:
def evaluate(example: dict[str, Any], response: dict[str, Any]) -> float:
...
A função recebe:
example: umReinforcementTuningExampleno formato ProtoJSON (ou seja, o mesmo formato de uma linha no conjunto de dados de treinamento ou validação, exceto que as chaves precisam estar em camel case). As instruções do sistema (example.get("systemInstruction")) e as referências (example.get("references")) também são incluídas emexample, desde que estejam definidas no conjunto de dados de treinamento ou validação.response: umContentno formato ProtoJSON (ou seja, as chaves precisam estar em camel case), que é o mesmo que a resposta de previsão on-line para modelos do Gemini.
A função precisa retornar um ponto flutuante, que é cortado para o intervalo [-1, 1].
Exemplo de implementação:
def evaluate(example, response) -> float:
response_str = response.get("parts", [])[0]["text"]
references = example.get("references", {})
if response_str == references.get("concise_answer"):
return 1.0
return -1.0
Bibliotecas permitidas
Além da biblioteca padrão do Python, as seguintes bibliotecas do Python estão disponíveis no sandbox de execução de código:
cv2matplotlibmpmathnumpypandasseabornsklearnstatsmodelssympy
Tempos limite e limites de recursos
Cada chamada de evaluate tem um tempo limite de 100 segundos. As chamadas com tempo esgotado são repetidas várias vezes. Se a chamada continuar excedendo o tempo limite após várias tentativas, a amostra será descartada do cálculo da recompensa.
Recomendamos testar seu código com a API
ValidateReinforcementTuningReward (consulte
Validar uma configuração de recompensa) e
buscar uma execução de código que termine bem antes de 100 segundos para ter o melhor
desempenho.
O ambiente de execução de código fornece 1 CPU e 1 GB de memória por invocação.
Recompensa totalmente personalizável via Cloud Run
Especificação da API: ReinforcementTuningCloudRunRewardScorer
Com a configuração de recompensa do Cloud Run, é possível implementar uma lógica de pontuação totalmente personalizável. Seu serviço do Cloud Run precisa implementar o seguinte contrato HTTP.
Método HTTP:POST
Corpo da solicitação (application/json):
{
"example": { "object(RLFTExample)" },
"response": { "object(Content)" },
"metadata": {
"step": int,
"tuningJobId": int64
}
}
example é um ReinforcementTuningExample no formato ProtoJSON, e response é um Content no formato ProtoJSON.
Corpo da resposta (application/json):
{
"reward": float,
"...": {}
}
Exemplo de solicitação
{
"example": {
"contents": [
{
"role": "user",
"parts": [
{ "text": "What is the capital of France?" }
]
}
],
"references": {
"answer": "Paris"
}
},
"response": {
"parts": [
{ "text": "London" }
]
},
"metadata": {
"step": 1,
"tuningJobId": 123456789
}
}
Exemplo de resposta
{
"reward": -1.0
}
Configurar permissões do IAM
- Você precisa da permissão
roles/run.adminno serviço do Cloud Run para conceder outras permissões do IAM a ele. - O agente de serviço de ajuste refinado seguro da plataforma de agentes do Gemini Enterprise
(
service-PROJECT_NUMBER@gcp-sa-vertex-tune.s3ns-system.iam.gserviceaccount.com) precisa receber permissão (por exemplo, concedendoroles/run.invokerno IAM) para invocar seu serviço do Cloud Run.
Tempo limite e tentativas
O tempo máximo permitido para o serviço do Cloud Run processar cada solicitação de cálculo de recompensa é de 300 segundos. Em erros de solicitação, o serviço
tenta de novo com espera exponencial (por exemplo, após 2, 4, 8, 16 e 32
segundos) antes de desistir. Se nenhuma resposta válida for retornada após
esgotar todas as tentativas, a recompensa será marcada como NaN.
Recomendações de design de recompensas
As seções a seguir descrevem as práticas recomendadas para projetar funções de recompensa que produzem indicadores bem calibrados para o ajuste de aprendizado por reforço.
Escala de recompensa
Cada recompensa precisa estar na escala de [-1, 1]. Valores de recompensa fora desse intervalo são cortados.
O que faz uma recompensa ser boa
- Alinhado ao resultado desejado e bem calibrado com a preferência humana.
- Claro e consistente. Por exemplo, é difícil para o modelo aprender de forma eficaz com uma recompensa de avaliador automático de alta variância.
- Resistente a saídas inválidas. Por exemplo, a recompensa precisa retornar um valor baixo em vez de falhar e retornar
NaNquando o modelo gera saídas inválidas. Assim, o job de ajuste sabe que essas são gerações ruins para otimizar. Se mais de 80% das suas invocações de recompensa apresentarem erros (erro de RPC, retorno deNaN), o job de ajuste será interrompido automaticamente. - Criado para evitar a invasão de recompensas. Evite configurações em que o modelo possa explorar brechas para alcançar uma recompensa alta sem um desempenho realmente bom.
Validar uma configuração de recompensa
Especificação da API: ValidateReinforcementTuningReward
Os jobs de ajuste podem ser caros, e as recompensas são cruciais para que eles sejam eficazes. Recomendamos validar a configuração de recompensa antes de iniciar um job de ajuste:
- Teste a validade e a robustez da sua recompensa no consoleCloud de Confiance ou chamando a API
ValidateReinforcementTuningReward. Pequenos erros, como erros de análise, casos extremos não tratados ou snippets de código inválidos, podem invalidar sua recompensa e seu ajuste. - Faça uma avaliação com a recompensa personalizada em uma amostra do seu conjunto de dados. O aprendizado por reforço não funciona bem quando a recompensa é muito difícil (as recompensas são quase sempre
0) ou muito simples (as recompensas são quase sempre1) para o conjunto de dados.
Validar no console do Cloud de Confiance
Na etapa Testar recompensa (opcional) do assistente Criar um modelo ajustado:
- No editor Exemplo de treinamento, insira uma linha de exemplo de conjunto de dados JSON
que contenha
systemInstruction,contentsereferences. - No campo Exemplo de resposta do modelo, insira uma resposta de exemplo ou clique em Gerar com base no exemplo de treinamento para que o modelo de base gere uma resposta de exemplo.
- Clique em Testar para avaliar sua configuração de recompensa em relação à amostra.
- Revise o banner de status e a pontuação geral. Clique em Ver informações de recompensa individual (ou Ver pontuações individuais e informações de depuração para recompensas compostas) para abrir o painel lateral e inspecionar pontuações, mensagens de erro e registros de depuração por recompensa.
Validar usando a API REST
A API ValidateReinforcementTuningReward espera um sampleResponse (do tipo Content, geralmente obtido de uma saída do modelo do Gemini), um RLFTExample e um de singleRewardConfig ou compositeRewardConfig.
Se o resultado retornado contiver um erro ou NaN, há algo errado com a configuração de recompensa que precisa ser corrigido antes de executar o job de ajuste real.
curl -i -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://us-central1-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/tuningJobs:validateReinforcementTuningReward" \
-d @validate_reward_request.json
Substitua PROJECT_ID pelo ID do projeto Cloud de Confiance by S3NS .
A seguir
- Prepare um conjunto de dados de ajuste e preencha o campo
referencespara sua função de recompensa. - Configure os hiperparâmetros.
- Monitore o status e as métricas do job, incluindo métricas por recompensa para recompensas compostas.
- Siga o início rápido do consoleCloud de Confiance ou o início rápido da API para criar seu primeiro job de ajuste refinado de aprendizado por reforço.