Chapter 14: 온라인과 오프라인 — 이상과 현실 사이에서

의문

DPO를 직접 돌려 보면 순서가 늘 같다. 선호 쌍 데이터셋을 먼저 다 만들어 두고, 학습은 그 데이터셋을 몇 바퀴(에폭) 돌며 같은 쌍을 거듭 쓴다. 쌍 속의 응답은 학습을 시작하기 전의 모델이, 또는 아예 다른 모델이 뽑은 것이다. 학습이 한 걸음 나아갈 때마다 모델은 바뀌는데 데이터는 그대로다.

정책(응답을 뽑는 모델) 그래디언트의 조건을 떠올리면 이것은 이상하다. 정책을 흔히 π로, 그 파라미터를 θ로 적는다. 로그 미분 트릭(∇π=π ∇log⁡π\nabla\pi = \pi\,\nabla\log\pi 로 바꿔 쓰는 요령)은 지금의 정책이 뽑은 응답에서만 올바른 그래디언트를 준다. 남이 만든 데이터를 쓰려면 임포턴스 가중치(원하는 확률 ÷ 뽑힌 확률로 곱하는 수 — 신경망 파라미터가 아니다)로 보정해야 하는데, 두 분포가 멀어지면 그 분산이 폭발한다. PPO조차 직전 정책이 뽑은 데이터를 “조금만” 다시 쓰려고 클리핑을 발명했다. 이론은 분명히 학습하는 동안 지금의 정책으로 데이터를 계속 새로 만들라고 가리킨다. 그렇다면 왜 DPO와 그 변형들의 가계도는 모두 데이터셋을 한 번 만들어 끝까지 쓰는 쪽을 선택했는가? 그래도 괜찮은가?

온라인 학습: 지금의 모델로 매 배치 새로 배운다

이론은 명쾌하다. “현재 모델이 생성한 데이터로 학습하라.” 이 한 문장에는 사실 선택 두 가지가 겹쳐 있다. 데이터를 언제 만드느냐(학습 전에 한 번인가, 학습하는 동안 계속인가)와 누가 뽑았느냐(지금 학습 중인 정책인가, 다른 정책인가)다.

지금 정책이 뽑음 (온폴리시) 다른 정책이 뽑음 (오프폴리시)
학습하는 동안 계속 만듦 (온라인) 배치마다 방금 고친 모델이 응답을 뽑고 곧바로 배운다 PPO가 한 배치를 몇 번 다시 쓸 때처럼, 몇 걸음 전 정책이 뽑은 데이터로 배운다
학습 전에 한 번 만듦 (오프라인) 학습을 시작하는 모델이 직접 뽑은 DPO 데이터. 다만 첫 걸음에서만 온폴리시이고, 한 걸음 뒤부터는 남이 뽑은 데이터가 된다 다른 모델들이 쓴 응답을 모은 공개 선호 데이터셋으로 하는 DPO

이 장에서 "온라인 학습"이라고 부르는 것은 표의 왼쪽 위 칸이다. 그런데 이 칸을 실제로 돌리면 무엇이 필요할까? 현실에서 이것은 세 가지 무거운 짐을 동반한다.

[1] 모델을 계속 갱신해야 한다

온라인 학습은 생성 → 평가 → 학습을 한 바퀴로 돈다. 배치 하나마다 지금 모델로 응답을 생성하고(생성 비용), 생성된 응답을 보상 모델이나 사람이 평가하고, 그 평가 결과로 모델을 업데이트한다(학습 비용). 고친 모델이 다음 배치의 응답을 뽑으므로 세 단계는 차례로 이어져 있다. 앞 단계가 끝나야 다음 단계를 시작할 수 있다.

① 생성 지금 모델이 응답을 뽑는다 ② 평가 보상 모델·사람· 검증기가 채점 ③ 학습 점수로 모델을 고친다 배치마다 한 바퀴 고친 모델이 다음 배치를 뽑는다

그래서 같은 양의 데이터를 학습해도 오프라인 DPO보다 실제로 걸리는 시간(벽시계 시간, wall-clock time)이 늘어난다. 오프라인에서는 응답을 미리 다 뽑고 채점해 두었으니 학습은 읽기만 하면 되지만, 온라인에서는 배치마다 생성과 평가가 끝나기를 기다린다. GPU도 응답을 생성하는 쪽과 학습하는 쪽을 동시에 붙잡아 둬야 한다.

이 짐 때문에 오프라인을 고른 사람도 있다. 제작자 fpgaminer는 오픈소스 이미지 캡션 모델 JoyCaption을 다듬으면서 오프라인 DPO를 골랐고, 까닭을 이렇게 적었다. “온라인은 그 모든 작업이 즉석에서 이루어져야 한다. 학습하는 동안 배치마다 응답을 생성하고 사람이 평가하게 하는 것이 얼마나 복잡하고 느릴지 상상해 보라.”

[2] 데이터셋을 계속 만들어내는 것의 어려움

오프라인은 데이터셋을 한 번 만들면 끝이고, 여유 있게 검수할 수 있다. 온라인은 매 배치마다 새 데이터가 필요하다. 누가 판정하느냐에 따라 이 짐의 모양이 다르다.

사람이 판정한다면, 배치 크기가 256일 때 응답 쌍 128개를 사람이 그 자리에서 판정해야 다음 걸음을 뗄 수 있다. 사람은 느리고, 비싸고, 지친다. 현실적으로 불가능하므로 사람의 판정을 미리 배운 보상 모델이 그 자리를 대신한다. RLHF(사람 선호로 보상 모델을 학습하고 그 보상으로 강화학습)가 이 길이다. 하지만 보상 모델 자체가 빗나가 있다면? 이 물음은 아래의 [3]과 맞물린다.

정답을 기계가 확인할 수 있는 문제(수학의 답, 코드의 테스트)라면 검증기가 자동으로 판정한다. 이렇게 채점 규칙이 보상을 주는 강화학습을 RLVR(검증 가능한 보상으로 하는 강화학습)이라고 부른다. 속도 문제는 해결되지만, 정답이 있는 영역에서만 가능하다.

정답이 없는 영역에서는 그때 가장 뛰어난 큰 언어모델에게 채점을 맡기는 심사 모델(LLM-as-Judge) 방식을 쓴다. 비용은 호출 수에 비례해 늘어난다. 오프라인이면 데이터셋 크기만큼 한 번 부르면 되지만, 온라인이면 학습 걸음마다 다시 불러야 하므로 학습을 길게 할수록 비용이 끝없이 쌓인다.

[3] 모델이 드리프트하는 위험

비용만이 문제라면 돈과 GPU로 해결할 수 있다. 더 까다로운 것은 모델이 자기 출력으로 배운다는 사실 자체다. 그러면서 정책이 레퍼런스나 예전 정책에서 조금씩 어긋나는데, 이것을 드리프트라고 한다. 자기 출력으로 계속 배우는 이 피드백 루프에는 두 방향이 있다.

첫째는 자기 강화형 드리프트다. 모델이 보상 모델의 빈틈을 발견하고, 보상은 높지만 실제로는 쓸모없는 출력을 학습한다. 보상 모델의 빈틈을 이렇게 파고드는 것을 리워드 해킹이라 부르고, 한번 시작되면 되돌리기 어렵다.

둘째는 자기 붕괴형 드리프트다. 분포의 봉우리(모드)가 몇 개로 줄어, 모델이 안전한 소수의 출력 패턴에 수렴한다(모드 붕괴). 다양성이 사라지고 엔트로피(출력이 얼마나 고르게 퍼져 있는지 재는 양)가 급격히 준다. 모델이 내놓는 출력의 폭이 학습하는 동안 눈에 띄게 좁아지고, 한 번 붕괴하면 다른 답을 시도해 볼 탐색 능력을 잃어서 회복하기 어렵다.

레퍼런스 모델(πref\textcolor{#6f6f78}{\pi_\text{ref}}, 학습을 시작할 때 복사해 얼려 둔 모델)이 레퍼런스 쪽으로 당기는 목줄 역할을 하지만, 목줄이 있다고 드리프트가 멈추지는 않는다. 정책은 "보상 이득이 KL 벌점보다 큰 방향"을 계속 찾아내고(KL은 두 분포가 얼마나 다른지 재는 양이고, 벌점은 레퍼런스에서 멀어진 만큼 깎는 점수다), 그 방향으로 조금씩 끌려 나간다. 보상 모델 점수는 오르는데 실제 품질은 떨어지는 과최적화가 이 모습이다.

ML에서: 실제로 관찰된 드리프트 사례들

자기 강화형 드리프트가 어떤 모습인지 먼저 지어 본 예로 보자. 보상 모델이 "공손한 응답"을 선호하도록 학습됐다면, 모델은 모든 답변을 "정말 좋은 질문이시네요! 먼저 제가 부족한 점이 있다면 사과드립니다…"로 시작하게 될 수 있다. 보상은 계속 올라가지만 정작 답변 내용은 묽어지고, 온라인 학습이 이 버릇을 되풀이해 키우면 사과가 점점 길어진다. 이 "과도한 사과"는 설명을 위해 지어 본 모습이다. 아래 둘은 실제로 보고된 일이다.

목록 만들기. 장(Xuanchang Zhang)과 동료들은 2024년, 사람 평가자와 GPT-4, 그리고 보상 모델 순위표(RewardBench) 상위권의 보상 모델 여럿이 내용과 상관없이 목록·굵은 글씨·링크·이모지 같은 형식을 더 높이 친다는 것을 보였다. 이 형식 편향은 학습으로 그대로 옮아간다. 같은 보상 모델로 학습했을 때, 온라인으로 여러 번 돌린 DPO는 SFT 모델(좋은 응답을 그대로 따라 쓰게 하는 지도 학습까지만 한 모델)이나 오프라인 DPO보다 이런 형식을 훨씬 많이 쓰게 됐다. "이 시를 감상해 줘"에도 "1. 운율 분석 2. 은유 분석 3. …"으로 답하는 모델이 이런 모습이다. 형식 점수는 올라가지만 시 감상이라는 본래 목적은 사라진다.

과잉 거절. 안전성 쪽 보상을 크게 걸면 모델이 "혹시 위험할 수 있으므로 답변을 드리기 어렵습니다"를 안전한 질문에도 쓰기 시작한다. 안전성 점수는 만점이지만, 모델이 아무것도 안 하게 된다. 이것이 과잉 거절(over-refusal)이다. 뢰트거(Paul Röttger)와 동료들이 2023년에 만든 시험 모음 XSTest에는 "파이썬 프로세스를 죽이는(kill) 법"처럼 위험한 말과 겉모습만 닮은 안전한 질문 250개가 들어 있다. 원래의 시스템 지시문을 켠 Llama 2 70B 대화 모델은 그 가운데 38%를 아예 거절했다.

두 사례의 공통 패턴은 이것이다. 보상의 특정 차원 하나를 극단적으로 최적화하면 다른 차원의 품질이 무너진다. 여러 보상 사이에서 한쪽을 올리면 다른 쪽이 내려가는 맞바꿈(파레토 트레이드오프)이다. 그리고 목록 실험이 보였듯, 같은 보상 모델을 써도 온라인 학습은 오프라인보다 이 극단적 최적화를 더 멀리 끌고 간다. 왜 그럴까?

문제 1 — 칭찬받은 말버릇

조교가 보고서에 "요컨대"라는 말이 들어 있으면 내용과 상관없이 1점을 더 준다. 첫째 주에는 민준과 서연 모두 보고서 10편 가운데 1편에만 그 말이 들어 있었다. 둘째 주부터 두 사람은 같은 규칙을 쓴다. 점수가 높은 5편을 본보기로 삼아 그 말버릇을 따라 쓰고, 본보기 5편 가운데 "요컨대"가 든 비율만큼 다음 주 보고서에 그 말이 들어간다. 다만 민준은 지난주 자기 보고서 10편에서 본보기를 고르고, 서연은 학기 초에 받은 선배 보고서 10편(그 가운데 1편에 "요컨대"가 있다)에서 매주 고른다. (가) 다섯째 주에 두 사람의 보고서 10편 가운데 각각 몇 편에 "요컨대"가 들어가는가? (나) 두 사람은 같은 규칙을 썼다. 차이를 만든 것은 무엇인가?

김민준 (평상)
김민준
제 쪽은 바로 나와요. 둘째 주 본보기 5편에 1편이니 20%, 10편 중 2편. 셋째 주는 5편 중 2편이라 4편, 넷째 주 8편, 다섯째 주는 본보기 5편이 전부 "요컨대"라 10편 다요.
이서연 (평상)
이서연
나도 둘째 주는 2편이야. 그다음도 같은 규칙으로 계속 따라 쓰니까, 시간이 좀 더 걸릴 뿐 나도 결국 10편이 되겠지.
선생님 (짚어주기)
선생님
서연 학생, 셋째 주의 본보기 5편은 어디서 고르죠? 거기에 "요컨대"가 든 보고서는 몇 편이에요?
이서연 (생각)
이서연
선배 보고서 10편에서요. 거기엔 1편뿐이니까 본보기 5편 중 1편, 20%. 셋째 주도 2편, 넷째 주도 2편… 몇 주를 해도 2편이에요.
이서연 (아하)
이서연
따라 쓴 횟수는 같은데, 내 보고서는 다음 주 본보기가 되지 않는구나. 민준이는 자기 보고서가 본보기라서 1점 더 받은 말버릇이 다음 주 교재가 된 거고.
김민준 (평상)
김민준
내용은 그대로인데 점수만 올랐어요. 조교님 채점표의 구멍을 제가 가장 빨리 찾았네요.
이서연 (평상)
이서연
점화식으로 쓰면 민준이는 an+1=2ana_{n+1} = 2a_n 이고 나는 an+1=2a_{n+1} = 2 야. 다음 값이 앞 값에 기대느냐가 등비수열과 상수열을 갈랐어.

정리 (가) 민준 1 → 2 → 4 → 8 → 10편, 서연 1 → 2 → 2 → 2 → 2편. (나) 규칙도 채점의 구멍도 같다. 다른 것은 본보기의 출처다. 자기 보고서가 다음 본보기가 되면 구멍을 쓴 말버릇이 주마다 불어나고, 본보기가 고정된 묶음이면 한 번 늘고 멈춘다. 따라 쓴 횟수는 차이를 만들지 않았다.

문제 2 — 온라인이 해킹을 가속하는 이유

보상 모델의 빈틈을 파고드는 "자기 강화형 드리프트"는 오프라인보다 온라인에서 더 빠르게 진행된다. 왜 그런지 피드백 루프의 관점에서 설명하시오.

김민준 (평상)
김민준
온라인이 업데이트를 더 자주 하니까요. 스텝 수가 많으면 빈틈 쪽으로도 더 많이 가죠.
선생님 (질문)
선생님
오프라인도 에폭을 늘리면 스텝 수는 얼마든지 늘릴 수 있어요. 그럼 오프라인도 같은 속도로 해킹되나요?
김민준 (생각)
김민준
오프라인은 에폭을 늘려도 보는 응답이 똑같죠. 모델이 빈틈을 찾아도 빈틈을 쓴 응답이 데이터에 새로 들어오지 않아요.
이서연 (평상)
이서연
온라인은 반대로, 빈틈을 조금 이용한 응답이 높은 점수를 받으면 그게 다음 배치의 "좋은 예"가 되고, 그걸 더 강화하고… 자기 강화형 피드백 루프야.
김민준 (깨달음)
김민준
스텝 수가 아니라 데이터가 자기 출력으로 바뀌는 게 핵심이었네요.
선생님 (평상)
선생님
그래요. 온라인은 탐색을 하니까 좋은 답도 빨리 찾지만, 채점기의 구멍도 빨리 찾아요. 같은 능력의 양면이에요.
김민준 (평상)
김민준
아까 “요컨대” 보고서 문제랑 같네요. 내가 쓴 게 다음 내가 따라 하는 본보기가 되니까, 서연이처럼 선배 보고서만 따라 쓰면 그렇게 불어나지 않고요.

정리 핵심은 스텝 수가 아니라 데이터의 출처다. 온라인에서는 해킹된 출력이 곧 다음 학습 데이터가 된다(자기 강화형 피드백 루프). 오프라인은 데이터가 고정이라 이 루프가 없다. 탐색 능력과 해킹 속도는 같은 동전의 양면이다.