랭귀지 모델들은 그동안 놀라운 능력들을 보여주면서 세간의 관심을 받게 되었습니다. 허나 좋은 "텍스트"를 생성한다는 것은 굉장히 모호한 일이죠.
이는 매우 주관적이고 문맥에 따라 달라지기 때문인데요.
창의성이 요구되는 이야기 쓰기, 진실해야 하는 정보적 텍스트, 실행 가능해야 하는 코드 스니펫 등 다양한 용도의 text를 generate해야 하죠.
이러한 다각도의 특성을 포착할만한 손실 함수를 작성하는 것은 매우 어려워 보이며 이를 보안하기 위해 BLEU 나 ROUGE같이 인간의 선호를 잘 반영하는 metric이 등장합니다.
하지만 인간이 즉각적인 피드백을 받고 더 나아가 이 피드백을 loss를 업데이트 하는 데에 사용한다면 어떨까요?
바로 여기서 RLHF라는 개념이 등장합니다.
강화학습을 통해서 최적화를 시키는 것이죠.
이런식으로 알려주는거죠 머신에게
더 자세히 알아봅시다.
traing process를 차례대로 살펴봅시다.
RLHF를 시작할때 저희는 pre-trained 모델을 가져옵니다.
Open-AI는 작은버전의 GPT-3 를 사용해서 첫번째 인기 RLHF 모델인 InstructGPT를 만들었습니다.
Anthropic과 Deepmind도 무지막지한 parameter들을 학습시킨 RLHF모델을 내놨구요.
fine-tuning이 될 수도 있지만 꼭 그럴 필요는 없습니다.
"Core to starting the RLHF process is having a model that responds well to diverse instructions."
인간의 선호를 반영하는 reward 모델을 만드는 것이 RLHF의 시작이라고 볼 수 있겠죠.
text를 입력받으면 numeric하게 인간의 선호를 반영하는 scarlar reward를 return하는 시스템이 필요합니다.
이렇게 reward modeling을 위한 LM은 또 다른 fine-tuned LM이거나 선호 데이터로부터 처음부터 학습된 LM이 됩니다.
human annotator는 LM으로부터 생성된 텍스트 출력을 평가합니다. 바로바로 output text를 스칼라 점수값으로 매길 수 있으면 좋겠지만, 사람마다 다른 다양한 가치관 때문에 쉽지 않죠, 객관적이지 않고 노이즈가 많은 데이터가 될 가능성이 높습니다.
텍스트에 랭킹을 매기는 방법에는 여러가지가 있는데요, 가장 성공적인 방법은 똑같은 prompt에 의해 condition된 2개의 LM이 생성한 텍스트를 비교하는 방식입니다.
이 과정의 흥미로운 결과 중 하나는, 현재까지 성공한 RLHF 시스템들이 텍스트 생성 모델에 비해 다양한 크기의 보상 모델을 사용했다는 것입니다.
예를 들어, OpenAI는 1750억 매개변수의 언어 모델을 사용하면서 60억 매개변수의 보상 모델을 사용했고, Anthropic은 100억에서 520억 매개변수의 언어 모델과 보상 모델을 사용했으며, DeepMind는 700억 매개변수의 Chinchilla 모델을 언어 모델과 보상 모델로 사용했습니다.
이러한 선호 모델들은 주어진 텍스트를 이해하는 데 필요한 용량이 텍스트를 생성하는 모델이 필요로 하는 용량과 비슷해야 한다는 직관을 가질 수 있습니다
프롬프트를 넣어주고 나온결과를 human annotator로 라벨링하고 reward 모델을 학습시켰습니다.
이제 기존 랭귀지 모델을 reinforcement learning으로 학습시켜야겠죠
오랫동안 언어모델을 강화학습으로 훈련하는것은 공학적, 알고리즘적인 이유로 불가능하다고 생각이 되어왔습니다.
그런데 pre-trained 된 초기모델의 복사본에 강화학습알고리즘은 Proximal Policy Optimation을 사용해서 파라미터들을 fine-tuning하기 시작했고 100억,1000억 짜리 파라미터를 전체 업데이트하기엔 비용이 너무 컸기 때문에 일부는 freeze 해주었습니다.
얼마나 많은 파라미터를 고정할지, 아니면 고정하지 않을지에 대한 정확한 방법은 여전히 연구가 필요한 단계이며, 이를 RLHF의 분산훈련과 같은 새로운 응용분야로 확장하게 됩니다.
보상 함수는 우리가 논의한 모든 모델을 하나의 RLHF(인간 피드백을 통한 강화 학습) 과정으로 결합하는 역할을 합니다. 데이터셋에서 프롬프트 (x)를 받으면, 현재 미세 조정된 정책(policy)으로 텍스트 (y)를 생성합니다. 이 텍스트를 원래 프롬프트와 함께 선호 모델에 입력하면, 선호 모델은 그 텍스트의 '선호도'를 나타내는 점수 (r_{\theta})를 반환합니다.
추가로, RL 정책에서 각 토큰에 대한 확률 분포를 초기 모델과 비교하여, 두 분포 간의 차이를 계산해 페널티를 부과합니다. OpenAI, Anthropic, DeepMind의 여러 논문에서 이 페널티는 두 분포 간의 Kullback–Leibler (KL) 발산을 스케일링한 값 rKL로 설계되었습니다. KL 발산 항은 RL 정책이 초기 사전 훈련된 모델에서 너무 멀리 벗어나지 않도록 억제하는데, 이는 모델이 일관성 있는 텍스트를 생성하도록 돕기 위해 유용합니다. 이 페널티가 없으면 최적화 과정에서 의미 없는 텍스트를 생성하지만 보상 모델을 속여 높은 보상을 받을 수 있습니다.
실제로, KL 발산은 두 분포에서 샘플링을 통해 근사치로 계산됩니다.
최종 보상은 r=rθ −λrKL형태로 RL 업데이트 규칙에 보내집니다. 여기서 λ는 KL 발산 페널티의 강도를 조절하는 파라미터입니다.
이렇게 하면 모델이 인간 선호를 잘 반영하면서도 사전 훈련된 모델의 일관성을 유지할 수 있게 됩니다.
마지막으로, 업데이트 규칙은 현재 데이터 배치에서 보상 지표를 최대화하도록 PPO가 파라미터를 업데이트하는 것입니다.
PPO는 on-policy 알고리즘으로, 현재 배치의 프롬프트-생성 쌍으로만 파라미터를 업데이트합니다.((프롬프트, 생성된 텍스트, 보상)을 모두 포함하여 학습이 이루어짐)
PPO는 신뢰 영역 최적화 알고리즘으로, 그라디언트에 제약을 걸어 업데이트 단계가 학습 과정을 불안정하게 만들지 않도록 합니다.
DeepMind는 Gopher에 대해 비슷한 보상 설정을 사용했지만, 그라디언트를 최적화하기 위해 동기화된 이득 actor-critic(A2C)을 사용했습니다. 이는 상당히 다른 접근법이지만, 외부에서 재현된 바는 없습니다.
RLHF는 유망하지만, 모델이 유해하거나 사실적으로 부정확한 텍스트를 생성할 수 있어 명확한 제약이 있습니다.
사람의 선호도 데이터를 모으는 데 많은 비용이 들며, 특히 잘 작성된 응답을 생성하려면 시간제 직원을 고용해야 합니다.
높은 비용과 주석자의 데이터 편차는 RLHF의 도전과제이며, 이를 해결하기 위해 다양한 데이터셋이 필요합니다.