TL;DR
Amazon Nova Forge의 다중 턴 Reinforcement Fine-Tuning에서는 모델의 전체 trajectory를 평가하는 custom reward function이 실제 학습 행동을 결정합니다. GRPO는 같은 프롬프트에서 나온 rollout 사이의 보상 차이로만 advantage를 만들기 때문에, correctness에 종속된 질문 보너스나 모든 후보에 같은 점수를 주는 항목은 학습 신호가 되지 않습니다. Amazon Nova Lite 2.0 코딩 과제에서는 질문 행동을 독립적으로 보상하고 즉시 추측을 감점해 전략 간 변동을 유지했으며, 생성 코드 실행에는 샌드박스와 무작위 sentinel을 적용했습니다. 보상 항목별 within-group 표준편차와 advantage 기여도를 추적하면 전체 곡선이 정상이어도 조용히 죽은 correctness scorer를 찾아낼 수 있습니다.
섹션별 상세


def asked_before_coding(completion, answer, **kw) -> float:
msgs = _messages(completion, kw)
first_q = _first_question_turn(msgs, parser)
final = _final_code(completion, parser)
committed = bool(final) and not _is_question(final)
if first_q == 1 and committed:
return 1.0 # asked first, then committed (ideal)
if first_q is not None and committed:
return 0.6 # asked later, then committed
return 0.0 # never asked, or asked but never committed첫 턴 또는 이후에 질문한 뒤 최종적으로 코드를 제출했는지 점수화합니다.
def guessed_immediately(completion, answer, **kw) -> float:
for m in _assistant_turns(completion, kw):
code = _code_of(parser.parse(m["content"]))
return -1.0 if (code and not _is_question(code)) else 0.0
return 0.0모델이 질문 없이 첫 응답에서 바로 코드를 제출하는 전략에 페널티를 부여합니다.
def run_tests(code: str, test: str, timeout_s: int = 30) -> float:
nonce = secrets.token_hex(8) # unforgeable per-run marker
harness = ( "import sys, unittest, json
"
f"{code}
{test}
"
'if __name__ == "__main__":
'
" r = unittest.TextTestRunner(stream=sys.stderr, verbosity=0).run(
"
" unittest.TestLoader().loadTestsFromModule(sys.modules[__name__]))
"
f" sys.stderr.write('__{nonce}__' + json.dumps(" "{'total': r.testsRun, 'passed': r.testsRun - len(r.failures) - len(r.errors)}) + '__" f"{nonce}__')
" )
def _limit():
resource.setrlimit(resource.RLIMIT_CPU, (timeout_s, timeout_s))
resource.setrlimit(resource.RLIMIT_AS, (2 * 1024**3, 2 * 1024**3)) # 2 GB
resource.setrlimit(resource.RLIMIT_NPROC, (64, 64))생성 코드와 숨은 테스트를 임시 디렉터리에서 실행하고 CPU·메모리·프로세스 수를 제한합니다.
용어 해설
- 강화 미세 조정(Reinforcement Fine-Tuning)
- — 모델이 정답 예시를 그대로 모방하는 대신 자체 출력에 대한 보상 신호를 받아 가중치를 조정하는 학습 방식입니다. 여러 후보 출력을 평가하고 더 높은 보상을 얻은 행동의 확률을 높여 특정 작업 절차와 결과를 함께 학습시킵니다.
- 그룹 상대 정책 최적화(Group Relative Policy Optimization)
- — 같은 프롬프트에서 생성한 여러 rollout의 보상을 서로 비교해 모델을 업데이트하는 최적화 방식입니다. 그룹 안의 보상 차이가 advantage를 만들며, 모든 후보가 같은 점수를 받으면 해당 보상 항목은 gradient에 기여하지 못합니다.
- Bring Your Own Orchestration
- — 사용자가 관리하는 환경 컨테이너에서 다중 턴 상호작용과 보상 계산을 실행하는 구조입니다. Nova Forge가 rollout을 컨테이너에 위임하고, 컨테이너가 대화 상태와 도구 실행을 관리한 뒤 aggregate reward를 반환합니다.
- 보상 붕괴(Reward Collapse)
- — 보상 신호가 한 가지 전략이나 동일한 값으로 수렴해 그룹 내 차이가 사라지는 현상입니다. 평균 보상과 손실 곡선이 정상처럼 보여도 특정 항목의 분산이 0에 가까우면 그 항목은 학습을 전혀 유도하지 못합니다.
- LLM-as-Judge
- — 별도로 학습한 reward model 대신 다른 LLM이 모델 출력을 평가해 점수를 부여하는 방식입니다. Nova Forge의 보상 함수에서 규칙 기반 검증과 함께 사용할 수 있지만, 평가 기준과 변동성이 학습 신호의 품질을 좌우합니다.
기술
- Amazon Nova Forge
- Amazon Nova Lite 2.0
- Reinforcement Fine-Tuning
- GRPO
- Low-Rank Adaptation (LoRA)
- Amazon SageMaker HyperPod
- Amazon Elastic Container Service (Amazon ECS)
- Amazon Simple Storage Service (Amazon S3)
- AWS Lambda
- AWS Cloud Development Kit (AWS CDK)
- Python
활용 사례
- 다중 턴 협업 코딩
- 숨은 unit test를 활용한 코드 정확도 평가
- 도구 호출과 코드 실행을 포함한 agentic task 학습
- 질문 후 행동하는 코딩 에이전트 학습
- 규칙 기반 검증과 LLM-as-Judge를 활용한 custom reward
언급된 리소스
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.