Una funzione di ricompensa assegna un punteggio numerico a ogni risposta del modello durante
l'ottimizzazione dell'apprendimento per rinforzo. Il segnale di ricompensa è ciò che l'apprendimento
per rinforzo ottimizza, quindi la sua qualità determina direttamente la qualità
della messa a punto. Tutti i premi vengono ritagliati nell'intervallo [-1, 1]; qualsiasi valore al di fuori
di questo intervallo viene ritagliato.
Questa pagina descrive ogni tipo di premio supportato, le pratiche consigliate per la progettazione dei premi e come convalidare una configurazione dei premi prima di avviare un job di ottimizzazione. L'ottimizzazione del reinforcement learning supporta i seguenti tipi di ricompensa:
- Premio per la corrispondenza di stringhe
- Premio per lo strumento di valutazione automatica basato su Gemini
- Ricompensa per l'esecuzione del codice
- Premio completamente personalizzabile tramite Cloud Run
Puoi anche combinare uno qualsiasi di questi quattro con i pesi per marcatore utilizzando un premio composito.
Limitazioni note
I seguenti timeout si applicano per tipo di premio:
| Tipo di premio | Timeout |
|---|---|
| Corrispondenza stringhe | Nessun timeout rigido |
| Eseguire il codice | 100 secondi per ogni chiamata al metodo evaluate |
| Strumento di valutazione automatica basato su Gemini | Timeout di 1 minuto durante l'attesa di una risposta di valutazione dell'LLM |
| Cloud Run | Timeout di 5 minuti per ogni trigger |
Configura i premi nella console Cloud de Confiance
Quando crei un job di ottimizzazione dell'apprendimento per rinforzo nella consoleCloud de Confiance in Modelli > Ottimizzazione, il passaggio Configurazione della ricompensa ti consente di configurare ricompense singole o composite:
Inserisci un Nome premio e scegli un Tipo di premio dal menu a discesa:
- Ricompensa per la corrispondenza di stringhe: configura un Tipo di analisi (ad esempio l'estrazione di espressioni regolari), un'Operazione di corrispondenza (ad esempio Corrispondenza esatta) e un'Espressione di destinazione, insieme alle ricompense per le risposte corrette e sbagliate.
- Premio basato su LLM: fornisci un prompt per lo strumento di valutazione automatica e configura la modalità di analisi e assegnazione del punteggio dell'output dello strumento di valutazione automatica.
- Premio basato su funzione Python: inserisci il codice di valutazione Python personalizzato direttamente nell'editor incorporato o carica un file Python.
- Premio completamente personalizzabile tramite Cloud Run: fornisci l'URI del tuo servizio Cloud Run.
Specifica un Peso del premio per la scheda del premio.
Fai clic su Fine.
Per configurare un premio composito, fai clic su + Aggiungi un altro premio (fino a 16 premi). Ogni scheda premio compressa mostra il peso configurato e il modulo mostra il riepilogo del peso totale.
Premio per la corrispondenza di stringhe
Specifica API: ReinforcementTuningStringMatchRewardScorer
La ricompensa per la corrispondenza delle stringhe è una configurazione conveniente per valutare le risposte generate dal modello rispetto a dati di fatto noti. È particolarmente utile per attività come domande di matematica, in cui ogni domanda ha una risposta di riferimento nota.
Poiché il modello potrebbe restituire un ragionamento chain-of-thought o altre parole prima di raggiungere la risposta finale che vuoi confrontare con i dati di riferimento, lo strumento di valutazione della corrispondenza delle stringhe supporta una funzione di analisi che elabora l'output generato dal modello utilizzando un'estrazione di espressioni regolari.
Poi definisci come confrontare la risposta del modello estratta con l'espressione regolare con
i dati empirici reali. I dati di riferimento vengono forniti tramite un campo in
references, che compili in ogni esempio quando crei i file di
training e convalida.
Per lo schema di configurazione, consulta la
specifica dell'API ReinforcementTuningStringMatchRewardScorer. Per informazioni dettagliate sul
campo references, consulta la
pagina Set di dati di ottimizzazione.
Premio per lo strumento di valutazione automatica basato su Gemini
Specifica API: ReinforcementTuningAutoraterScorer
La ricompensa di valutazione automatica basata su Gemini è una configurazione conveniente per valutare le risposte generate dal modello rispetto al feedback di LLM-as-a-judge. Ad esempio, potresti voler che un modello restituisca risposte con un determinato tono, deciso da uno strumento di valutazione automatica (LLM-as-a-judge).
Questo premio supporta due pattern:
- Lo strumento di valutazione automatica può restituire direttamente un punteggio numerico che viene utilizzato come feedback di apprendimento per rinforzo.
- Il sistema di valutazione automatica può generare un giudizio che viene analizzato e confrontato con pattern predefiniti.
L'autorater può anche restituire la sua chain-of-thought, quindi puoi analizzare una sezione della risposta nello stesso modo della ricompensa per la corrispondenza delle stringhe. Ad esempio, un sistema di classificazione automatica può restituire
blahblahblah <answer>Yes</answer> o blahblahblah <answer>No</answer> e
puoi creare una funzione di analisi per estrarre la risposta del sistema di classificazione automatica tra
<answer> e </answer>. Puoi quindi confrontare l'output dell'autorater
con un'espressione predefinita che mappa Yes a un punteggio +1 e qualsiasi
valore non corrispondente (ad esempio No) a un punteggio -1.
La seguente configurazione di valutazione automatica filtra per ottenere il testo
tra i tag <answer> e mappa Yes a +1 e qualsiasi altro valore a -1:
{
"autoraterResponseParseConfig": {
"parseType": "REGEX_EXTRACT",
"regexExtractExpression": "<answer>(.*?)</answer>"
},
"exactMatchScorer": {
"expression": "Yes",
"correctAnswerReward": 1.0,
"wrongAnswerReward": -1.0
}
}
Premio per l'esecuzione del codice
Specifica API: ReinforcementTuningCodeExecutionRewardScorer
La configurazione della ricompensa per l'esecuzione del codice ti consente di fornire codice Python definito dall'utente per valutare le risposte del modello senza configurare un servizio Cloud Run. Implementa una funzione evaluate con la seguente firma:
def evaluate(example: dict[str, Any], response: dict[str, Any]) -> float:
...
La funzione riceve:
example: unReinforcementTuningExamplein formato ProtoJSON (ovvero lo stesso formato di una riga nel set di dati di addestramento o di convalida, tranne per il fatto che le chiavi devono essere in camel case). Anche le istruzioni di sistema (example.get("systemInstruction")) e i riferimenti (example.get("references")) sono inclusi inexample, a condizione che siano impostati nel set di dati di addestramento o convalida.response: unContentin formato ProtoJSON (ovvero le chiavi devono essere in camel case), che è lo stesso della risposta alla previsione online per i modelli Gemini.
La funzione deve restituire un valore float, che viene poi troncato all'intervallo
[-1, 1].
Esempio di implementazione:
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
Librerie supportate
Oltre alla libreria standard di Python, all'interno della sandbox di esecuzione del codice sono disponibili le seguenti librerie Python:
cv2matplotlibmpmathnumpypandasseabornsklearnstatsmodelssympy
Timeout e limiti delle risorse
Ogni chiamata evaluate ha un timeout di 100 secondi. Le chiamate con timeout vengono riprovate
più volte. Se la chiamata continua a scadere dopo diversi tentativi, il
campione viene escluso dal calcolo della ricompensa.
Ti consigliamo vivamente di testare il codice con l'API ValidateReinforcementTuningReward (vedi Convalida di una configurazione di premi) e di fare in modo che l'esecuzione del codice termini ben prima di 100 secondi per ottenere prestazioni ottimali.
L'ambiente di esecuzione del codice fornisce 1 CPU e 1 GB di memoria per invocazione.
Premio completamente personalizzabile tramite Cloud Run
Specifica API: ReinforcementTuningCloudRunRewardScorer
La configurazione dei premi Cloud Run consente di implementare una logica di punteggio completamente personalizzabile. Il tuo servizio Cloud Run deve implementare il seguente contratto HTTP.
Metodo HTTP: POST
Corpo della richiesta (application/json):
{
"example": { "object(RLFTExample)" },
"response": { "object(Content)" },
"metadata": {
"step": int,
"tuningJobId": int64
}
}
example è un ReinforcementTuningExample in formato ProtoJSON e
response è un Content in formato ProtoJSON.
Corpo della risposta (application/json):
{
"reward": float,
"...": {}
}
Esempio di richiesta
{
"example": {
"contents": [
{
"role": "user",
"parts": [
{ "text": "What is the capital of France?" }
]
}
],
"references": {
"answer": "Paris"
}
},
"response": {
"parts": [
{ "text": "London" }
]
},
"metadata": {
"step": 1,
"tuningJobId": 123456789
}
}
Esempio di risposta
{
"reward": -1.0
}
Configurare le autorizzazioni IAM
- Devi disporre dell'autorizzazione
roles/run.adminsul servizio Cloud Run per concedergli autorizzazioni IAM aggiuntive. - Al service agent del servizio di perfezionamento sicuro di Gemini Enterprise Agent Platform
(
service-PROJECT_NUMBER@gcp-sa-vertex-tune.s3ns-system.iam.gserviceaccount.com) deve essere concessa l'autorizzazione (ad esempio, concedendoroles/run.invokerin IAM) per richiamare il tuo servizio Cloud Run.
Timeout e nuovi tentativi
Il servizio Cloud Run ha a disposizione un massimo di 300 secondi per elaborare ogni richiesta di calcolo della ricompensa. In caso di errori di richiesta, il servizio
ritenta con backoff esponenziale (ad esempio, dopo 2, 4, 8, 16 e 32
secondi) prima di arrendersi. Se non viene restituita alcuna risposta valida dopo
aver esaurito tutti i tentativi, la ricompensa viene contrassegnata come NaN.
Suggerimenti per la progettazione dei premi
Le sezioni seguenti descrivono le best practice per la progettazione di funzioni di ricompensa che producono indicatori ben calibrati per la messa a punto del reinforcement learning.
Scala dei premi
Ogni singolo premio deve essere nella scala di [-1, 1]. I valori delle ricompense al di fuori
di questo intervallo vengono troncati.
Quali sono le caratteristiche di un buon premio
- In linea con il risultato desiderato e ben calibrato con le preferenze umane.
- Chiaro e coerente. Ad esempio, per il modello è difficile apprendere in modo efficace da una ricompensa di valutazione automatica con varianza elevata.
- Resistente a output non validi. Ad esempio, la ricompensa deve essere in grado
di restituire un valore basso anziché arrestarsi in modo anomalo e restituire
NaNquando il modello genera output non validi, in modo che il job di ottimizzazione sappia che si tratta di generazioni errate da evitare. Se più dell'80% delle invocazioni della ricompensa restituisce errori (errore RPC, restituzione diNaN), il job di ottimizzazione viene interrotto automaticamente. - Progettato per impedire l'hacking dei premi. Evita configurazioni in cui il modello può sfruttare scappatoie per ottenere una ricompensa elevata senza prestazioni realmente buone.
Convalidare una configurazione della ricompensa
Specifica API: ValidateReinforcementTuningReward
I lavori di ottimizzazione possono essere costosi e le ricompense sono fondamentali per renderli efficaci. Ti consigliamo di convalidare la configurazione della ricompensa prima di avviare un job di ottimizzazione:
- Verifica la validità e l'affidabilità della tua ricompensa nella
consoleCloud de Confiance o chiamando l'API
ValidateReinforcementTuningReward. Piccoli errori, come errori di analisi, casi limite non gestiti o snippet di codice non validi, possono invalidare la tua ricompensa e la tua ottimizzazione. - Esegui una valutazione con la ricompensa personalizzata su un campione del tuo
set di dati. L'apprendimento per rinforzo non funziona bene quando la ricompensa è
troppo difficile (le ricompense sono quasi sempre
0) o troppo semplice (le ricompense sono quasi sempre1) per il set di dati.
Convalida nella console Cloud de Confiance
Nel passaggio Test reward (Optional) (Test della ricompensa (facoltativo)) della procedura guidata Crea un modello ottimizzato:
- Nell'editor Esempio di addestramento, inserisci una riga di esempio del set di dati JSON
contenente
systemInstruction,contentsereferences. - Nel campo Risposta del modello di esempio, inserisci una risposta di esempio o fai clic su Genera dall'esempio di addestramento per fare in modo che il modello di base generi una risposta di esempio.
- Fai clic su Test per valutare la configurazione della ricompensa rispetto al campione.
- Esamina il banner di stato risultante e il punteggio complessivo. Fai clic su Visualizza informazioni sulle singole ricompense (o Visualizza punteggi individuali e informazioni di debug per le ricompense composite) per aprire il riquadro a scomparsa ed esaminare i punteggi per ricompensa, i messaggi di errore e i log di debug.
Convalida utilizzando l'API REST
L'API ValidateReinforcementTuningReward prevede un sampleResponse (di tipo Content, in genere ottenuto dall'output di un modello Gemini), un RLFTExample e uno tra singleRewardConfig o compositeRewardConfig.
Se il risultato restituito contiene un errore o NaN, significa che c'è qualcosa
che non va nella configurazione della ricompensa e che devi risolvere prima di eseguire il
job di ottimizzazione effettivo.
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
Sostituisci PROJECT_ID con l'ID progetto Cloud de Confiance by S3NS .
Passaggi successivi
- Prepara un set di dati di ottimizzazione
e compila il campo
referencesper la funzione di ricompensa. - Configura gli iperparametri.
- Monitora lo stato e le metriche dei job, incluse le metriche per premio per i premi compositi.
- Segui la Cloud de Confiance guida rapida della console o la guida rapida dell'API per creare il tuo primo job di perfezionamento dell'apprendimento per rinforzo.