보상 함수는 강화 학습 파인 튜닝 중에 각 모델 응답을 수치로 평가합니다. 보상 신호는 강화 학습이 최적화하는 대상이므로 품질이 조정 품질을 직접 결정합니다. 모든 보상은 [-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
코드 실행 보상 구성을 사용하면 Cloud Run 서비스를 설정하지 않고도 모델 대답을 평가하는 사용자 정의 Python 코드를 제공할 수 있습니다. 다음 서명으로 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초 이내에 완료되도록 하는 것이 좋습니다.
코드 실행 환경은 호출당 CPU 1개와 메모리 1GB를 제공합니다.
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 서비스에 추가 IAM 권한을 부여하려면 해당 서비스에 대한
roles/run.admin권한이 필요합니다. - Gemini Enterprise Agent Platform 보안 미세 조정 서비스 에이전트(
service-PROJECT_NUMBER@gcp-sa-vertex-tune.s3ns-system.iam.gserviceaccount.com)에 Cloud Run 서비스를 호출할 수 있는 권한 (예: IAM에서roles/run.invoker부여)을 부여해야 합니다.
제한 시간 및 재시도
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 빠른 시작에 따라 첫 번째 강화 학습 미세 조정 작업을 만드세요.