在強化學習微調期間,獎勵函式會為每項模型回覆評分。獎勵信號是強化學習的最佳化目標,因此其品質會直接決定調整品質。所有獎勵都會限制在 [-1, 1] 範圍內,超出該範圍的值都會遭到截斷。
本頁面說明支援的獎勵類型、設計獎勵的最佳做法,以及如何在啟動調整工作前驗證獎勵設定。強化學習微調支援下列獎勵類型:
您也可以使用複合獎勵,結合最多 16 個這類獎勵函式,並為每個評分器設定權重。
已知限制
以下是各獎勵類型的逾時時間:
| 獎勵類型 | 逾時 |
|---|---|
| 字串比對 | 沒有嚴格的逾時限制 |
| 執行程式碼 | 每 evaluate 方法呼叫 100 秒 |
| 以 Gemini 為基礎的自動評分工具 | 等待 LLM 評分回應時,逾時時間為 1 分鐘 |
| Cloud Run | 每個觸發條件的逾時時間為 5 分鐘 |
在 Google Cloud 控制台中設定獎勵
在 Google Cloud 控制台的「Models」(模型)>「Tuning」(調整) 下方建立強化學習微調工作時,您可以在「Reward configuration」(獎勵設定) 步驟 中設定單一或複合獎勵:
輸入「Reward name」(獎勵名稱),然後從下拉式選單中選擇「Reward type」(獎勵類型):
- 字串比對獎勵:設定「剖析類型」 (例如規則運算式擷取)、「比對作業」 (例如「完全比對」) 和目標「運算式」,以及正確和錯誤答案的獎勵。
- 透過 LLM 提供回饋:提供自動評分工具提示,並設定自動評分工具輸出內容的剖析和評分方式。
- 透過 Python 函式提供回饋:直接在內嵌編輯器中輸入自訂 Python 評估程式碼,或上傳 Python 檔案。
- 透過 Cloud Run 隨意自訂回饋:提供 Cloud Run 服務的 URI。
指定獎勵卡片的獎勵權重。
按一下「完成」。
如要設定複合獎勵,請按一下「+ 新增其他獎勵」 (最多 16 項獎勵)。每張收合的獎勵卡都會顯示設定的權重,表單則會顯示總權重摘要。
字串比對回饋
API 規格:ReinforcementTuningStringMatchRewardScorer
字串比對獎勵是便利的設定,可根據已知的基準真相評估模型生成的回覆。這項功能特別適用於數學問題等工作,因為每個問題都有已知的基準真相答案。
模型可能會先輸出思維鏈提示推論或其他字詞,才會產生最終答案,因此字串比對評分器支援剖析器函式,可使用規則運算式擷取功能處理模型生成的輸出內容,並與基準真相進行比對。接著,您需要定義如何比較 regex 擷取的模型回覆與基準真相。基準真相是透過 references 中的欄位提供,您在建立訓練和驗證檔案時,會在每個範例中填入這個欄位。
如要查看設定結構定義,請參閱 ReinforcementTuningStringMatchRewardScorer API 規格。如要進一步瞭解 references 欄位,請參閱「調整資料集」頁面。
以 Gemini 為基礎的自動評分工具獎勵
API 規格:ReinforcementTuningAutoraterScorer
採用 Gemini 的自動評估器獎勵機制,可方便您根據 LLM 評估工具的回饋,評估模型生成的回覆。舉例來說,您可能希望模型以特定語氣輸出回覆,而語氣由自動評分工具 (LLM 評估工具) 決定。
這項獎勵支援兩種模式:
- 自動評分工具可以直接輸出數字分數,做為強化學習的回饋。
- 自動評分工具會輸出判斷結果,並剖析及比對預先定義的模式。
自動評分工具也能輸出思維鏈提示推論,因此您可以剖析部分回覆,方法與字串比對回饋相同。舉例來說,自動評分器可以輸出 blahblahblah <answer>Yes</answer> 或 blahblahblah <answer>No</answer>,您可以建立剖析函式,擷取 <answer> 和 </answer> 之間的自動評分器回應。接著,您可以將自動評分器輸出內容與預先定義的運算式進行比較,該運算式會將 Yes 對應至 +1 分數,並將任何不相符的值 (例如 No) 對應至 -1 分數。
以下範例自動評分器設定會篩選出 <answer> 標記之間的文字,並將 Yes 對應至 +1,其他值則對應至 -1:
{
"autoraterResponseParseConfig": {
"parseType": "REGEX_EXTRACT",
"regexExtractExpression": "<answer>(.*?)</answer>"
},
"exactMatchScorer": {
"expression": "Yes",
"correctAnswerReward": 1.0,
"wrongAnswerReward": -1.0
}
}
執行程式碼獎勵
API 規格:ReinforcementTuningCodeExecutionRewardScorer
您可以透過執行程式碼獎勵設定,提供使用者定義的 Python 程式碼來評估模型回覆,不必設定 Cloud Run 服務。實作具有下列簽章的 evaluate 函式:
def evaluate(example: dict[str, Any], response: dict[str, Any]) -> float:
...
這個函式會接收下列參數:
example:ProtoJSON 格式的ReinforcementTuningExample(即與訓練或驗證資料集中的一行格式相同,但鍵必須採用駝峰式大小寫)。如果訓練或驗證資料集有設定系統指令 (example.get("systemInstruction")) 和參考資料 (example.get("references")),example也會包含這些內容。response:ProtoJSON 格式的Content(即鍵必須採用駝峰式大小寫),與 Gemini 模型的線上預測回應相同。
函式必須傳回浮點數,然後裁剪至 [-1, 1] 範圍。
導入範例:
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
支援的程式庫
除了 Python 標準程式庫外,程式碼執行沙箱中也提供下列 Python 程式庫:
cv2matplotlibmpmathnumpypandasseabornsklearnstatsmodelssympy
逾時和資源限制
每次 evaluate 呼叫的逾時時間為 100 秒。逾時的呼叫會重試幾次。如果多次重試後呼叫仍逾時,系統會從獎勵計算中捨棄該樣本。
使用 ValidateReinforcementTuningReward API 測試程式碼 (請參閱「驗證獎勵設定」),並盡可能在 100 秒內完成程式碼執行,以達到最佳效能。
執行程式碼環境每次叫用會提供 1 個 CPU 和 1 GB 記憶體。
透過 Cloud Run 隨意自訂回饋
API 規格:ReinforcementTuningCloudRunRewardScorer
Cloud Run 獎勵設定可讓您實作完全自訂的評分邏輯。Cloud Run 服務必須實作下列 HTTP 合約。
HTTP 方法: POST
要求主體 (application/json):
{
"example": { "object(RLFTExample)" },
"response": { "object(Content)" },
"metadata": {
"step": int,
"tuningJobId": int64
}
}
example 是 ProtoJSON 格式的 ReinforcementTuningExample,response 則是 ProtoJSON 格式的 Content。
回應主體 (application/json):
{
"reward": float,
"...": {}
}
要求範例
{
"example": {
"contents": [
{
"role": "user",
"parts": [
{ "text": "What is the capital of France?" }
]
}
],
"references": {
"answer": "Paris"
}
},
"response": {
"parts": [
{ "text": "London" }
]
},
"metadata": {
"step": 1,
"tuningJobId": 123456789
}
}
回應範例
{
"reward": -1.0
}
設定 Identity and Access Management 權限
如要允許調整工作叫用 Cloud Run 服務,請設定下列 IAM 權限:
- 您必須具備 Cloud Run 服務的
roles/run.admin權限,才能授予其他 IAM 權限。 - Gemini Enterprise Agent Platform Secure Fine Tuning 服務代理 (
service-<var>PROJECT_NUMBER</var>@gcp-sa-vertex-tune.iam.gserviceaccount.com) 必須具備權限 (例如在 IAM 中授予roles/run.invoker),才能叫用 Cloud Run 服務。
逾時和重試
Cloud Run 服務處理每項獎勵計算要求的時間上限為 300 秒。如果要求發生錯誤,服務會以指數輪詢方式重試 (例如在 2、4、8、16 和 32 秒後),然後才會放棄。如果重試次數用盡後仍未傳回有效回應,獎勵會標示為 NaN。
獎勵設計建議
下列各節說明設計獎勵函式的最佳做法,這些函式可產生經過妥善校正的信號,用於強化學習微調。
獎勵規模
每項獎勵都必須在 [-1, 1] 的範圍內。超出這個範圍的獎勵值會遭到裁剪。
有效獎勵的特徵
設計獎勵函式時,請考量下列特性:
- 符合目標結果,並根據人類偏好妥善校正。
- 清楚一致。舉例來說,如果自動評分工具獎勵的變異數很高,模型就很難有效收斂。
- 可有效處理無效輸出內容。舉例來說,當模型生成無效輸出內容時,獎勵應能傳回低值,而非當機並傳回
NaN,這樣調整工作就會對這些生成內容進行懲罰。如果獎勵叫用錯誤率超過 80% (RPC 錯誤,傳回NaN),調整工作會自動停止。 - 防止獎勵遭駭。避免模型利用漏洞獲得高獎勵,卻沒有真正良好表現的設定。
驗證獎勵設定
API 規格:ValidateReinforcementTuningReward
調整工作可能相當昂貴,而獎勵是確保調整工作有效的重要因素。啟動調整工作前,請先驗證獎勵設定:
- 在Google Cloud 控制台或呼叫
ValidateReinforcementTuningRewardAPI,測試獎勵的有效性和穩定性。剖析錯誤、未處理的極端案例或無效的程式碼片段等小錯誤,都可能導致獎勵和調整失效。 - 使用自訂獎勵,對資料集樣本進行評估。如果獎勵對資料集來說太難 (獎勵幾乎總是
0) 或太簡單 (獎勵幾乎總是1),強化學習的效果就會降低。
在 Google Cloud 控制台中驗證
在「建立調整後的模型」精靈的「測試獎勵 (選用)」步驟中:
- 在「Training Example」(訓練範例) 編輯器中,輸入包含
systemInstruction、contents和references的 JSON 資料集範例行。 - 在「Sample model response」(模型回覆範例) 欄位中輸入回覆範例,或按一下「Generate from Training Example」(根據訓練範例生成),讓基礎模型生成回覆範例。
- 按一下「測試」,根據範例評估獎勵設定。
- 查看結果狀態橫幅 (「成功」、「部分成功」(如果複合獎勵中的個別子任務失敗) 或「錯誤:子任務」) 和整體分數。按一下「查看個別獎勵資訊」 (如果子任務回報錯誤,則按一下「查看偵錯資訊」),開啟側邊導覽匣,查看各獎勵分數、錯誤訊息和偵錯記錄。
使用 REST API 驗證
ValidateReinforcementTuningReward API 預期會收到 sampleResponse (類型為 Content,通常從 Gemini 模型輸出內容取得)、RLFTExample,以及 singleRewardConfig 或 compositeRewardConfig 其中之一。如果傳回的結果包含錯誤或 NaN,表示獎勵設定有問題,必須先解決,才能執行實際的調整工作。
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
將 <var>PROJECT_ID</var> 替換為 Google Cloud 專案 ID。
後續步驟
- 準備調整資料集,並填入獎勵函式的
references欄位。 - 設定超參數。
- 監控工作狀態和指標,包括複合獎勵的各項獎勵指標。
- 請按照Google Cloud 控制台快速入門導覽課程或 API 快速入門導覽課程,建立第一個強化學習微調工作。