RL · 2026-09-28
LLM RL 총정리: 토큰의 선택에서 시스템의 순환까지
13편의 핵심 그림을 따라, 토큰 확률을 바꾸는 학습부터 경험과 가중치가 오가는 시스템까지 30분 흐름으로 연결합니다.
LLM RL은 모델이 만든 응답을 평가하고, 그 경험을 바탕으로 다음 선택을 바꾸는 과정입니다. 앞부분에서는 토큰 확률이 어떻게 바뀌는지, 뒷부분에서는 그 계산을 두 엔진이 어떻게 나누어 실행하는지 살펴봅니다.
이 글은 1~13편의 그림을 모아 약 30분 동안 아래로 내려가며 설명할 수 있게 구성했습니다. 앞의 학습 원리에 약 16분, 시스템에 약 12분을 쓰고 마무리에 2분을 남깁니다. 그림 번호는 원문 번호를 유지하며, 각 절의 링크에서 자세한 설명을 이어 읽을 수 있습니다.
LLM의 행동은 다음 토큰을 고르는 것이다
일반적인 RL에서 정책은 현재 상황을 보고 행동을 고릅니다. LLM에서는 프롬프트와 앞선 토큰이 상황이고, 다음 토큰의 선택이 행동입니다. 선택한 토큰은 다음 선택의 문맥에 들어갑니다.

미로에서는 이동한 위치가, LLM에서는 늘어난 토큰 문맥이 다음 선택의 입력이 됩니다. 이제 토큰 선택이 응답과 보상으로 이어지는 과정을 펼쳐 보겠습니다.

여러 선택이 모여 응답이 됩니다. 정답 검사나 코드 실행처럼 결과를 검증할 수도 있고, 보상 모델이나 LLM 평가기로 점수를 매길 수도 있습니다. 이 예에서는 완성된 응답에 보상을 한 번 주지만, 학습할 때는 그 응답을 만든 토큰 선택들로 돌아갑니다.
학습은 선택했던 토큰의 확률을 바꾼다
기록된 응답을 현재 모델로 다시 읽는다
생성한 응답이 u → b → d라면, 학습할 때는 이 기록을 고정해 둡니다. 새로운 답을 뽑는 대신 각 문맥에서 실제 선택했던 토큰에 현재 모델이 주는 확률을 계산합니다.

u의 확률은 프롬프트 P에서, b의 확률은 P와 u에서 나옵니다. 그림의 세 위치는 같은 모델의 서로 다른 예측 위치입니다. 학습에서는 인과 마스크를 이용해 여러 위치의 확률을 한 순전파에서 계산할 수 있습니다.
어드밴티지가 방향을 주고, 역전파가 가중치를 바꾼다
어드밴티지 A는 결과가 비교 기준보다 얼마나 좋았는지를 나타내는 신호입니다. 가장 단순한 정책 그레디언트 예에서 손실은 −A × log p(선택 토큰 | 문맥)입니다. A가 양수면 그 선택을 더 자주 하도록, 음수면 덜 하도록 밀어주는 방향의 신호가 됩니다.

그림의 A는 +0.6이므로, 로그확률 z에 대한 손실은 −0.6z이고 그 미분은 −0.6입니다. 이 기울기가 LM head와 Transformer를 거쳐 가중치로 돌아갑니다. 확률표를 직접 고치는 것이 아니라 가중치를 바꾸고, 다음 계산에서 확률이 달라지는 것입니다. 여러 토큰이 같은 가중치를 공유하므로 각 토큰 확률이 신호대로 반드시 움직인다는 보장은 없습니다.
생성 당시 모델과 기준 모델은 역할이 다르다

현재 모델은 학습 대상입니다. 생성 당시 모델과는 같은 토큰의 확률비를 구해 데이터 생성 이후의 변화를 반영합니다. PPO식 clipping은 유리한 방향으로 충분히 변한 선택을 같은 데이터로 계속 밀어붙이지 않게 합니다. 별도의 기준 모델과 비교하는 KL 항은 유지하려는 기준 정책에서 얼마나 멀어지는지 관리하며, 선택적으로 사용합니다.
보상을 비교해야 올릴 확률과 내릴 확률이 정해진다
그룹의 다른 응답과 비교한다
같은 질문의 응답 네 개가 1, 1, 0, 0점을 받았다면, 평균은 0.5입니다. GRPO의 기본 예에서는 이 그룹 안에서 보상을 비교합니다. 아래는 표준편차로도 나누어 성공에 +1, 실패에 −1을 주는 예입니다.

응답의 최종 보상만 쓰는 이 구성에서는 같은 응답의 생성 토큰에 같은 A를 전달합니다. 이것은 모든 토큰이 성공에 똑같이 기여했다는 뜻이 아닙니다. 보상이 모두 같다면 그룹 내부의 상대 보상 신호도 사라집니다.
그 문맥에서 예상했던 결과와 비교한다
Critic은 각 토큰을 고르기 전의 문맥에서 앞으로 받을 보상을 예상합니다. 실제 결과가 그 예상보다 좋았는지를 보면, 같은 최종 보상에서도 위치마다 다른 비교 신호를 얻을 수 있습니다.

그림은 끝까지 관측한 return에서 예측값을 빼는 단순한 예입니다. 실제 PPO에서는 TD 오차들을 조합하는 GAE 등을 사용할 수 있습니다. 그룹 비교는 다른 응답을, critic은 학습한 예측값을 비교 기준으로 사용합니다. 어떤 기준을 쓰느냐에 따라 추가 모델의 계산 비용과 기다려야 하는 경험도 달라집니다.
교사는 학생이 만든 문맥에서 학습 신호를 준다
학생이 실제로 가는 경로에서 배운다
SFT는 주어진 답의 앞부분에서 다음 정답 토큰을 배우는 방식입니다. OPD는 학생이 직접 생성한 문맥에서 교사의 신호를 얻습니다. 학생이 정답 경로와 다른 선택을 했더라도, 그 이후의 문맥에서 배울 수 있습니다.

같은 문맥에서 같은 토큰의 확률을 비교한다

학생이 선택한 b에 학생은 0.2, 교사는 0.4를 줬다면, 로그확률 차이는 ln(0.4/0.2)로 양수입니다. 반대라면 음수가 됩니다. 여기서 소개한 OPD 구성은 이 교사 신호를 토큰별 학습 신호로 사용합니다.
과제 보상에서 만든 어드밴티지에 교사 신호를 더할 수도 있고, 과제 보상 없이 교사 신호만 사용할 수도 있습니다. Critic은 미래의 보상을 예상하고, 교사는 다음 토큰 분포를 제공합니다. 신호의 출처는 달라도 학생 가중치를 바꾸는 정책 업데이트로 연결됩니다.
RL과 OPD의 순서는 학습 목적에 따라 달라진다
배울 만한 경험을 만들 수 있는 출발점이 필요하다
보상으로 좋은 선택을 강화하려면, 제한된 생성 예산 안에서 유용한 차이를 관측할 기회가 있어야 합니다. 아래의 그룹 비교 예에서는 모두 실패한 그룹보다 성공과 실패가 섞인 그룹에서 과제 보상 신호를 얻을 수 있습니다.

PT는 언어와 지식의 기반을, SFT는 시범을 통한 출발점을 만들 수 있습니다. OPD도 후속 RL에 앞서 학생의 행동 분포를 개선하는 데 사용할 수 있습니다. 그림은 그룹 보상이 모두 같은 한 번의 사례이며, 모든 RL이 성공 응답 없이는 학습할 수 없다는 뜻은 아닙니다.
전문 능력을 키우고 하나의 학생으로 모은다
DeepSeek V4의 흐름은 분야별 SFT·RL로 전문 교사를 준비하고, 여러 교사의 신호로 하나의 학생을 학습하는 사례입니다. 보상으로 능력을 발전시키는 과정과, 그 능력을 학생에게 전달하는 과정을 연결합니다.

능력 통합과 다음 학습의 준비는 다른 목적이다

RL 뒤에 OPD를 두면 교사의 능력을 통합할 수 있고, 학생의 RL 앞에 OPD를 두면 학습 출발점을 준비할 수 있습니다.
교사와 학생이 시작할 문맥을 함께 고른다
MiMo V2.6의 MOPD²(Multi-Prefix Multi-Teacher On-Policy Distillation)는 여러 교사를 활용하면서, 학생이 생성을 시작할 대화 문맥도 고릅니다. 질문부터 전체 rollout을 만드는 경로와, 교사 rollout이나 SFT 데이터의 중간 이력에서 새 한 턴을 만드는 경로를 함께 사용합니다.

예를 들어 P + 원본 2턴에서 학생이 새 3턴을, P + 원본 3턴에서 새 4턴을 생성합니다. 두 시작점은 독립적이며, 앞에서 학생이 만든 새 3턴을 다음 시작점에 붙이는 것이 아닙니다. 지정된 교사는 학생과 같은 문맥을 보고 확률 정보를 제공합니다. 학생은 원본 답을 그대로 따라 쓰는 대신, 준비된 여러 문맥에서 직접 생성하며 배웁니다.
학습 순서뿐 아니라 누구에게, 어떤 문맥에서 배우게 할 것인가도 설계할 수 있다는 사례입니다. MiMo V2.6 §5.6
경험은 학습기로, 새 가중치는 추론기로 이동한다
지금까지 본 계산을 실행 시스템에 놓아보겠습니다. 추론 엔진은 응답과 도구 실행 경험을 만들고, 학습 엔진은 그 기록으로 확률과 손실을 계산해 가중치를 갱신합니다.

경험에는 응답 문자열뿐 아니라 토큰 ID, 생성 당시 로그확률, 보상, 학습할 위치를 나타내는 mask, 정책 버전 등이 필요합니다. 학습한 가중치는 반대 방향으로 전달됩니다. Miles·Slime·NeMo-RL 같은 프레임워크를 볼 때도 경험 전달과 weight sync라는 두 화살표를 기준으로 구조를 읽을 수 있습니다.
6편: 두 엔진의 시스템 지도 · 그림 출처: Miles v0.1, Figure 1
생성했던 계산을 학습에서도 최대한 맞춘다
토큰과 전문가 선택을 이어받는다
문자열로 바꾼 응답을 다시 토큰화하면 원래와 다른 토큰 ID가 나올 수 있습니다. TITO는 생성한 토큰 ID를 그대로 전달해 이 차이를 피합니다.

MoE에서는 같은 토큰이라도 다른 전문가를 고르면 계산 경로가 바뀝니다. R3는 생성 때 선택한 전문가 ID를 기록해 학습에서 재사용합니다. 전문가의 가중치는 현재 학습 가중치를 사용합니다.

양자화는 비용과 계산의 일치를 함께 바꾼다

양쪽 순전파에 같은 양자화 규약을 적용하거나, 학습은 BF16으로 유지하고 추론은 FP8로 실행할 수 있습니다. 후자는 추론 비용을 줄이지만 계산 차이를 남깁니다. Miles v0.1의 NVFP4 경로는 학습 순전파까지 같은 양자화에 맞추는 구성이며, BF16 학습과의 조합으로 설명하면 안 됩니다.
맞춰도 남는 차이는 확률비로 보정한다
같은 가중치라도 연산 순서와 커널, 정밀도 등의 차이로 계산 결과가 달라질 수 있습니다. 여기에 학습으로 가중치가 바뀌는 차이도 더해집니다.

그림의 0.50 → 0.52는 엔진 차이, 0.52 → 0.60은 모델 업데이트 차이입니다. 현재 확률과 실제 생성 확률의 비는 0.60/0.50 = 1.2입니다. 이 비를 통해 관측한 선택을 학습에 반영할 비중을 조절합니다. 보정이 두 엔진의 계산을 같게 만드는 것은 아니며, clipping이나 비중 제한은 불안정한 갱신을 관리하는 별도 선택입니다.
생성과 학습을 겹치면 경험이 오래될 수 있다
생성이 모두 끝날 때까지 기다린 뒤 학습하면 한쪽 자원이 쉬는 구간이 생깁니다. 비동기 실행은 준비된 경험을 학습하는 동안 다음 경험을 생성합니다.

학습 가중치는 optimizer update마다 바뀌지만, 추론 엔진의 배포 버전은 weight sync가 적용될 때 바뀝니다. Miles에서 다룬 staleness는 배포 버전과 경험의 생성 버전을 비교하는 규약입니다. 학습 스텝 수와 자동으로 같지 않습니다.

경험은 생성이 오래 걸리는 동안에도, 완성된 뒤 버퍼에서 기다리는 동안에도 오래될 수 있습니다. 그림은 중간 sync 뒤 생성을 이어갈 수 있는 구성의 예입니다. 기다림을 줄이는 이득과, 오래된 경험을 보정하거나 제외하는 비용을 함께 봐야 합니다.
추론 최적화는 에이전트 실행 전체로 넓어진다
계산을 재사용하되 대기 시간도 본다
같은 prefix의 KV 캐시를 재사용하면 입력 계산을 줄일 수 있습니다. 하지만 캐시가 있는 엔진에 대기열이 길다면 다른 엔진이 먼저 끝낼 수도 있습니다.

추론 최적화에는 배치의 빈자리를 채우는 방법, 후보 토큰을 한꺼번에 검증하는 speculative decoding, MTP로 후보를 만드는 방법도 있습니다. 각각 반복 계산, 자원 공백, 순차 생성 비용을 줄이려는 접근입니다.
모델 호출이 끝나도 작업은 계속된다

에이전트가 도구 결과를 기다리면 GPU 연산은 멈춰도 KV와 도구 환경은 남아 있을 수 있습니다. ThunderAgent는 프로그램 상태를 보고 실행·일시중지·복원을 결정합니다. 별도의 CPU 도구 서버에서도 환경 준비, 실행 대기와 자원 회수가 완료 시간을 좌우합니다. 최적화의 범위가 토큰 생성에서 작업 전체의 수명으로 넓어집니다.
11편: 추론 최적화 · 12편: 에이전트 전체의 스케줄링
새 가중치로 생성을 재개하면 순환이 이어진다
마지막은 weight sync입니다. 가중치를 추론 측 분할과 형식에 맞춰 준비하고, 통신 환경에 맞는 경로로 전송하고, 새 정책을 사용할 준비가 끝나면 재개합니다.
Broadcast는 공통 GPU 통신망의 기본 경로, P2P는 여러 노드의 병렬 전송을 활용하는 경로, disk-delta는 공유 저장소를 이용하는 경로입니다. 어느 방식이 유리한지는 변환·전송·적용 비용을 함께 비교해야 합니다.

그림처럼 재양자화가 필요한 모델은 복사가 끝나도 변환을 기다려야 합니다. 같은 추론 실행에 참여하는 GPU의 준비와 기존 요청·KV 처리가 끝나야 일관된 새 정책으로 생성할 수 있습니다.
토큰 선택 → 평가와 학습 신호 → 손실과 가중치 갱신 → 새 가중치 전달 → 다음 토큰 선택. 앞부분에서 본 학습 원리와 뒷부분에서 본 시스템은 이 하나의 순환을 함께 완성합니다.