즉, 언어모델의 손실 함수(Loss function)가 인간의 실제 선호도와 일치하지 않기 때문이다.
그렇다면 그냥 학습 목표에 인간의 선호(preference)를 추가하면 될 일 아닐까?
2.강화 학습 (Reinforcement Learning)
학습 목표에 인간의 선호를 어떻게 반영할까?
예의 바르고 적절한 대답을 하도록 언어모델을 파인튜닝(Fine-Tuning)하면 될까?
SFT(Supervised Fine-Tuning)는 질문과 그에 대응되는 정답 데이터셋을
추가로 학습시켜 모델이 질문에 대해 정답을 말하게 만드는 기법이다.
하지만 선호에는 "정답"이 없다.
설계자가 답이라 정한 텍스트가 반드시 선호된다고 말할 수 없고,
오답이라고 정의된 대답이 선호되지 않는다고 말할 수는 없다.
선호라는 것은 참으로 복잡미묘하다.
누군가는 언어 모델의 구수한 욕설에 대해
욕쟁이 할머니 국밥집 단골들처럼친숙함을 느낄 수도 있고
누군가는 언어 모델의 입 바른 말에 불편함을 느낄 수도 있다.
선호에는 정답이 없고, 제각기 다른 선호를 하나로 모을 수는 없다.
그러나 많은 사람들에게 선호되도록 나아가는 것은 가능하다.
어느 대답이 더 나은지에 대해 사람들은 대체로 같은 방향을 가리키기 때문이다.
강화학습은 잘했다는 칭찬(reward)을 통해 모범 답안 없이도
모델이 옳은 방향을 향해 스스로 나아지게 만드는 방식이다.
따라서 모델에게 인간의 선호를 학습시키는데는
지도학습의 단어 맞추기(Next-token prediction) 방식이 아니라,
모델의 응답에 대해 다양한 사람들이 매긴 점수 그 자체를 등불로 삼아,
그곳을 향해 나아가는 강화학습 기법을 사용하는 것이다.
2.1강화 학습 개괄
강화 학습을 더 엄밀하게 설명하자면,
어떤 환경(enviroment) 안에서 정의된 에이전트(agent)가 현재의 상태(state)를 관찰하여,
선택 가능한 행동(action) 중 보상(reward)을 최대화하는 행동들을 선택하는 방법이라 할 수 있다.
이때, "굼바가 접근하면 점프를 해서 피한다"와 같이
에이전트가 어떤 상태에서 어떤 행동을 취할 것인지에 대한 행동 전략을 정책(policy)이라 한다.
지도학습에서 인풋과 아웃풋을 연결하는 함수가 존재하듯,
강화학습에서는 정책이 '환경의 상태'와 '에이전트의 행동'을
짝 지어주는(Mapping) 함수로서의 역할을 수행한다.
여기서 생각해봐야 할 것은 매 상태에서 항상 보상이 따르는 것 아니라는 점(Delayed Reward)이다.
"버섯을 향해 이동한다"와 같이 보상을 얻기위한 빌드업이 필요할 수도 있다.
심지어는 더 큰 보상을 얻기 위해 마이너스의 보상을 감내해야 할 수도 있다.
즉, 에이전트는 단순히 당장의 보상을 얻기 위해 급급한 것이 아니라,
앞으로 얻을 수 있는 보상의 총량을 최대한 크게 만드는 것을 목표로 행동해야 한다.
에이전트는 미래의 경우의 수를 고려해,
특정 상태로 이동했을 때 앞으로 얻을 수 있는 보상의 총합을 계산할 수 있다.
이를 가치 함수(value function)라고 하며, 에이전트가 정책을 선택하는 기준이 된다.
가치함수의 수식은 아래와 같다.
Rt+1는 각 단계의 상태에서 얻을 수 있는 보상을 의미한다.
γ는 미래에 받을 수 있는 보상에 대한 할인율(discount rate)를 의미한다.
똑같은 백만원을 준다면, 지금 당장 받는 것이 한 달 뒤에 받는 것보다는 더 좋듯이
같은 값이라면 미래 보상이 현재 보상보다 가치가 작음을 표현한다.
vπ(s)는 특정 정책을 따랐을 때 받을 수 있는
보상의 현재 가치를 의미하며, 이를 가치(value)라고 한다.
강화학습의 목표는 매번 주어지는 보상들들을 모아서
자신의 장기적인 가치를 최대화하는최적 정책 π*을 찾는 것이다.
지도학습 모델이 손실을 최소화하는 방향으로 학습하듯,
강화학습 모델은 가치를 최대화하는 방향으로 학습을 진행한다.
2.2언어 모델 적용의 어려움
전통적인 강화학습 기법을 언어 모델 훈련에 그대로 적용하는데는 여러가지 난관이 있다.
① '좋은 텍스트'가 도대체 뭔데?
상술한 슈퍼마리오 예시에서는 애초에 보상을 명확하게 숫자로 정할 수 있었다.
그러나 현실 세계에서 '친절함', '유머러스함' 등을 정확하게 숫자로 변환해주는 명확한 방법은 없다.
② 가능한 행동의 수 = 세상의 모든 단어
슈퍼마리오 예시에서는 매 상태에서 가능한 행동이 7개 남짓에 불과했다.
반면 언어 모델의 경우, 보통 5만개 정도되는 사전(vocabulary) 속 단어(token)가
매 스텝마다 선택해야할 행동이 된다.
전통적인 강화학습에서 모든 경우의 수를 계산할 수 없는 복잡한 환경에 있을 때는
지금까지 해보지 않은 새로운 행동을 시도하며 더 나은 길을 찾는
'탐색(Exploration)' 과정이 필수적이다.
탐색은 보통 무작위 행동을 취해보는 방식으로 진행한다.
그런데 언어모델의 경우 5만 개의 단어 중 아무거나 무작위로 뽑아서 문장에 섞어버리면,
새로운 전략이 나오는 게 아니라 거의 확실하게 문법이 파괴된 헛소리가 만들어질 것이다.
③ 도대체 범인이 누구야? : 신용 할당 문제(Credit Assignment Problem)
강화학습은 행동 직후에 보상이 주어져야 학습이 원활하게 이뤄진다.
그러나 언어 모델의 답변을 평가할 때는 수백개의 토큰을 뱉은 후에야 보상이 주어진다.
중간에 생성된 토큰은 어떠한 피드백도 받을 수 없으며,
최종 보상이 나빠도 그것이 어떤 토큰 때문인지 명확히 알 수가 없다.
3.RLHF
RLHF가 상술한 난관을 어떻게 돌파했는지 알아보기에 앞서서
언어 모델에 강화 학습 프레임워크가 어떻게 적용되는지 먼저 짚고 넘어가겠다.
'환경' 속에서 훈련을 받고 '정책'을 업데이트해 나가는 주체인 '에이전트'는 언어 모델 그 자체가 된다.
'상태'는 프롬프트와 지금까지 생성된 텍스트가 해당된다.
'행동'은 다음에 올 토큰 하나를 수만개의 어휘(vocabulary) 중에서 고르는 것이다.
'정책'은 다음 단어가 생성될 확률 분포(distribution)가 된다.
그렇다면 '보상'은 어떻게 줄 수 있을까?
3.1Reward Model
언어 모델에게 어떻게보상(reward)을 줄 지에 대한 RLHF의 솔루션을
매우 거칠게 요약하면 인간 지능을 활용한 머슴 러닝이라고 할 수 있다.
머슴들을 고용하여 언어 모델의 답변에 인간이 직접 피드백을 주는 것이다.
물론, 모델을 학습시킬 때마다 사람들을 고용해서 쓰면 인건비가 엄청날 테니
머슴들이 언어 모델의 답변을 평가한
선호도 데이터셋(preference dataset)을 구축하여
언어 모델들에게 보상을 제공할 언어 모델인
리워드 모델(reward model)을 새로 훈련시키는데 그 목적이 있다.
리워드 모델을 학습시키는 절차는 다음과 같다.
1단계 : 답변하는 법을 좀 배운(SFT) 모델을 준비한다. 2단계 : 하나의 프롬프트(prompt)을 주고, 모델이 다양한 답변을 생성하게 한다. 3단계 : 라벨러는 프롬프트와 답변들을 보고, 답변들을 비교해 순위(ranking)를 매긴다. 4단계 : '프롬프트 + 답변들 + 인간의 순위 평가'를 하나의 세트로 만들어 리워드 모델[각주:2]을 훈련시킨다.
SFT가 완료된 모델을 대상으로 강화학습을 시키는 이유는
에이전트의 행동 공간(Action Space)를 '세상의 모든 단어'에서 줄이기 위함이다.
따라서 KL 다이버전스를 학습의 목표가 되는 목적함수(Objective function)에서
제약항(penalty term)으로 두면 언어 모델이 보상에 과몰입하는 것을 억제할 수 있다. 이것이 KL Regularization의 핵심 아이디어다.
그렇다면 강화학습의 목적함수(Objective function)로써
Expected return을 아래와 같이 표현할 수 있다.
3.3PPO (Proximal Policy Optimization)
3.3.1기존 최적화의 한계
지도학습에서 Loss function에 대한 Gradient descent를 통해
Loss를 최소화하는 파라미터 값을 찾는다.
이와 비슷하게
강화학습에서는 Objective function에 대한 Greadeint ascent를 통해
Expected return을 최대화하는 파라미터 값을 찾는다.
지도학습의 Loss function들은 고정된 데이터 분포 위에서 계산된다.
게다가 본질적으로 예측 오차인 Loss를 줄여야 되는 목표의 성질상
Loss가 폭발적으로 커질 유인이 상대적으로 적다.
따라서 경사를 따라 내려가다 보면 자연스럽게 최솟값 근처에서 수렴할 가능성이 크다.
반면 강화학습의 Objectivefunction은 노이즈가 크다.
예측과 정답의 차이로서 수치화되기 용이한 Loss와 달리
리워드는 정책 변화에 따라서 분포 자체가 시시각각 변하기 때문이다.
지형도 울퉁불퉁한데, 매 걸음걸음마다 지형 자체가 변하는 모래사막에 가깝다.
여기에 더해 리턴을 극대화해야 하는 목표의 성질상
우연히 큰 보상을 받은 행동이 관측되면,
모델이 그 방향으로 급발진할 가능성도 더 커진다.
그래서 단순한 경사상승법인 Policy Gradient를 통해
경사를 타고 올라가다보면 최적점을 지나쳐버리는 오버슈팅이 발생하기 쉽다.
에이전트가 큰 보상을 받은 방향으로 적당히를 모르고 뇌절을 하다가
이후 보상이 급감하는 내리막길을 타고 내려가며 지능이 퇴화해버리는 것이다.
3.3.1Clipping
근접 정책 최적화(PPO)는 이 문제를 해결하기 위해 등장했다.
근접(Proximal)이라는 용어에 이 방법론의 핵심이 담겨 있다.
가치(value)가 상승하는 방향으로 파라미터를 업데이트하되
한 번에 너무 큰 걸음을 내딛으며 급발진하지 않도록 업데이트 범위를 제한하는 것이다.
구체적으로는 업데이트 폭이 너무 크면 이를 강제로 잘라내(clip)
한 스텝에서 정책이 급격히 변하는 것을 막는다.
이는 지도학습에서 gradient clipping으로 학습을 안정시키는 것과 같은 맥락이다.
3.3.2Value Model
앞서 우리는 강화학습을 언어 모델에 적용하는데 있어서 어려움 중 하나로
'신용 할당 문제(Credit Assignment)'를 꼽았다.
수백 개의 토큰를 뱉은 뒤에야 최종 점수를 받으니
어떤 토큰 때문에 점수를 땄는지, 잃었는지 모른다는 문제였다.
이를 해결하기 위해 PPO는
가치 모델(Value Model, Critic)이라는 과외쌤을 따로 붙여
토큰을 뱉어 내는 매 시점마다 피드백을 주고
해당 피드백을 바탕으로 최종 보상이 주어졌을 때
어떤 토큰이 결과를 망친 범인인지 색출하기 쉽게 하였다.
딥러닝의 역전파(back propagation)와 비스무레한데, 구체적인 메커니즘은 다음과 같다.
1. 언어모델이 토큰을 생성하는 매 시점마다 가치 모델이 가치 함수를 통해 기대값을 추정함 2. 문장이 끝나면 리워드 모델이 보상을 줌 3. 각 토큰 시점마다 '현재 시점의 기대값과 앞 시점의 기대값의 차이(advantage)'를 계산함 ※ 마지막 토큰은 앞 시점이 없으므로 최종 보상과 기대값의 차이를 계산함
4. 위에서 구한 advantage를 통해, 잘한 토큰에게는 공로를 치하하고 범인에게는 벌을 줌
중간 토큰들이 보상에 의한 피드백를 직접적으로받는 것은 아니지만
기대값을 통한 간접적인 피드백을 받도록 하였고,
적어도 매 토큰 생성 시점마다 즉각적인 평가가 가능해지면서,
신용 할당 문제를 완화하고 학습의 안정성을 높일 수 있다.
4.한계와 대안
정신을 차리고 보니 강화 학습 과정에서 졸지에거대 언어 모델 4개를 동시에 돌리게 되었다.