在強化學習微調期間,獎勵函式會為每個模型回覆評分。強化學習會根據獎勵信號進行最佳化,因此獎勵信號的品質會直接決定微調品質。所有獎勵都會限制在 [-1, 1] 範圍內,超出該範圍的值都會遭到截斷。
本頁面說明各項支援的獎勵類型、設計獎勵的建議做法,以及如何驗證獎勵設定,再啟動微調工作。強化學習微調支援下列獎勵類型:
您也可以使用複合獎勵,將這四種獎勵與每個評分者的權重結合。
已知限制
以下逾時時間適用於各獎勵類型:
| 獎勵類型 | 逾時 |
|---|---|
| 字串比對 | 沒有嚴格的逾時設定 |
| 執行程式碼 | 每次呼叫 evaluate 方法時,最多 100 秒 |
| 以 Gemini 為基礎的自動評分工具 | 等待 LLM 評分回應時,逾時時間為 1 分鐘 |
| Cloud Run | 每個觸發條件的逾時時間為 5 分鐘 |
在 Cloud de Confiance 控制台中設定獎勵
在Cloud de Confiance 控制台的「模型」>「微調」下方建立強化學習微調工作時,您可以在「獎勵設定」步驟中設定單一或複合獎勵:
輸入「獎勵名稱」,然後從下拉式選單中選擇「獎勵類型」:
- 字串比對獎勵:設定剖析類型 (例如規則運算式擷取)、比對作業 (例如完全比對) 和目標運算式,以及正確和錯誤答案的獎勵。
- 透過 LLM 提供回饋:提供自動評分工具提示,並設定如何剖析自動評分工具的輸出內容和評分。
- 透過 Python 函式提供回饋:直接在內嵌編輯器中輸入自訂 Python 評估程式碼,或上傳 Python 檔案。
- 透過 Cloud Run 隨意自訂回饋:提供 Cloud Run 服務的 URI。
為獎勵卡指定「獎勵權重」。
按一下「完成」。
如要設定複合回饋,請按一下「+ 新增其他回饋」(最多 16 項回饋)。每張收合的獎勵資訊卡都會顯示設定的權重,表單則會顯示權重總計摘要。
字串比對回饋
API 規格:ReinforcementTuningStringMatchRewardScorer
字串比對獎勵是評估模型生成回覆與已知基準真相的便利設定。這項功能特別適用於數學問題等工作,因為每個問題都有已知的正確答案。
由於模型可能會輸出連鎖思維推理或其他字詞,然後才得出要與基準真相比較的最終答案,因此字串比對評分器支援剖析器函式,可使用規則運算式擷取處理模型產生的輸出內容。接著,定義如何比較以正則運算式擷取的模型回應與基準真相。基準真相是透過 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
}
設定 IAM 權限
- 您必須具備 Cloud Run 服務的
roles/run.admin權限,才能授予其他 IAM 權限。 - 您必須授予 Gemini Enterprise Agent Platform Secure Fine Tuning Service Agent (
service-PROJECT_NUMBER@gcp-sa-vertex-tune.s3ns-system.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
微調作業的成本可能很高,因此獎勵對於微調作業的成效至關重要。建議您先驗證獎勵設定,再啟動微調工作:
- 在Cloud de Confiance 控制台中測試獎勵的有效性和穩定性,或呼叫
ValidateReinforcementTuningRewardAPI。細微錯誤 (例如剖析錯誤、未處理的極端情況或無效的程式碼片段) 可能會導致獎勵和微調失效。 - 在資料集樣本上,使用自訂獎勵執行評估。如果資料集中的獎勵太難 (幾乎一律為
0) 或太簡單 (幾乎一律為1),增強式學習就無法順利學習。
在 Cloud de Confiance 控制台中驗證
在「建立調整後的模型」精靈的「測試獎勵 (選用)」步驟中:
- 在「訓練範例」編輯器中,輸入包含
systemInstruction、contents和references的 JSON 資料集範例行。 - 在「範例模型回覆」欄位中輸入範例回覆,或按一下「根據訓練範例生成」,讓基礎模型生成範例回覆。
- 按一下「測試」,根據範例評估回饋設定。
- 查看狀態橫幅和整體分數。按一下「查看個別獎勵資訊」 (或「查看個別分數和偵錯資訊」,適用於複合獎勵),開啟側邊抽屜並檢查個別獎勵分數、錯誤訊息和偵錯記錄。
使用 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
將 PROJECT_ID 替換為 Cloud de Confiance by S3NS 專案 ID。
後續步驟
- 準備微調資料集,並填入獎勵函式的
references欄位。 - 設定超參數。
- 監控工作狀態和指標,包括複合獎勵的每項獎勵指標。
- 請按照Cloud de Confiance 控制台快速入門或 API 快速入門的步驟,建立第一個強化學習微調作業。