Alignment
이번 게시글에서는 LLM의 훈련 과정 중 Alignment에 대해서 다룰 것이다. Pre-training을 끝낸 LLM 모델은 1~i번째 토큰을 보고 i+1번째 토큰을 예측할 수 있는 기본적인 능력을 갖추게 되지만, 보통 한정된 refinement 하에서 모아진 웹 텍스트 데이터로 훈련하였기 때문에, 사람이 선호하는 output을 만들어내지는 못한다. 조금 더 구체적으로 예시를 들면, 우리는 보통 chat gpt에게 ~를 해달라는 명령어조로 input을 준다. 하지만 훈련 데이터에는 이런 명령어조를 포함하고 있는 데이터셋이 많지 않다. 따라서 pre-training만 적용된 LLM은 사람이 원하는 output을 내지 못할 가능성이 높다. 또한, 웹 텍스트 데이터에는 정치적 편향 등 여러 편향이 있는 데이터들이 있을 수 있다. 따라서 그냥 pre-training만 된 LLM을 이용하게 되면 여러 잘못되거나 편향된 output을 내뱉을 수 있다. 따라서 우리는 pre-training된 LLM을 조금 더 사람들이 원하는 output을 낼 수 있도록 Align시켜야 한다. 이 chapter에서는 LLM을 사람의 preference에 맞게 Align을 시키기 위한 방법들을 소개한다. Align을 하기 위한 방법은 크게 Instruction Alignment와 Reinforcement Learning from Human feedback 두 가지가 있다. 그리고 보통 Instruction Alignment를 먼저 하고, Reinforcement Learning from Human feedback을 그 이후에 진행한다고 한다. 이유는 보통 Instruction Alignment를 통해 먼저 LLM이 Instruction or Question형태에 input에 잘 적응하게 만들고 (pre-trained LLM이 익숙하지 않은 데이터 형식에 익숙하게 만들어줌), 그 다음에 Reinforcement Learning from Human feedback에서는 데이터의 형식을 건드리는게 아니라, output자체의 잘못된 편향(정치적 편향 등)을 고쳐주는 것이기 때문에 데이터 형식을 먼저 잡는게 더 자연스러운 것 같다. 좀 간단하게 생각해보면 Rule-Based LLM같은걸 개발한다고 하면, (input,output)의 형식을 먼저 설정하고 detail을 잡아나가는게 자연스럽다는걸 받아들일 수 있을 것이다.

Alignment : Instruction Alignment
첫 번째로 Instruction Alignment라는 방법에 대해 소개하겠다. pre-training에서는 LLM이 세상의 general한 knowledge에 대해서 이해했다면, Instruction Alignment에서는 LLM을 (input, output)이 (Instruction, answer) 혹은 (Question, Answer)형식인 데이터에 대해서 적응시키는 것이 주요 목적이다. Instruction Alignment에서 알아두면 좋은 점은, 이미 pre-trained LLM은 세상에 대한 general knowledge 자체는 매우 잘 알고 있으므로, 정말 좋은 품질의 Instruction Alignment data만 있다면, Instruction Alignment를 위한 fine-tuning은 조금의 데이터로도 충분히 잘 할 수 있다는 점이다.
먼저 Instruction Alignment를 위해서 데이터를 모으는 방법을 소개하겠다.
첫 번째로는, 이미 well-defined되어 웹에 여러 데이터가 공개되어 있는 NLP task들을 다양한 prompt를 적용해서 (Instruction, answer)형식으로 만드는 방법이다. 예를 들면, sentimental analysis dataset에서 (그녀는 기분이 좋다 | 긍정) 데이터를 -> ("그녀는 기분이 좋다" 이 문장에서 감정을 분석해줘. 감정은 긍정, 보통, 부정 중 하나야 | 이 문장에서 나타나는 감정은 긍정입니다.) 이런식으로 바꾸는 것이다.
두 번째로는, 여러 질문 사이트에 있는 (Question, Answer) 데이터를 모으는 것이다. LLM한테 명령어조 말고도 질문 형태로도 많이 input을 주기 때문에, 이 데이터 역시 LLM을 Align 시킬때 필수적이다. 또한, 여러 질문 사이트에 있는 Question들만 긁어 모아서 이미 잘 훈련된 다른 LLM을 이용해서 answer를 만들어 (Question, Answer)형태의 데이터셋을 만들 수 있다. 극단적으로는 pre-training만 된 LLM을 이용해서 answer를 만들어 (Question, Answer)형태의 데이터를 만들어도 된다. 왜냐면 pre-training된 LLM은 이미 general한 knowledge를 잘 가지고 있기 때문에, 우리가 prompt만 엄청 신경써서 잘 써주면 좋은 Answer를 만들어낼 수도 있기 때문이다. 예를 들면 "나는 이 분야의 전문가이다. 사람들은 나에게 이런 질문을 종종 하곤 한다. {Question} 나는 이렇게 답했다. " 이런식으로 prompting을 해주는 것이다.
마지막으로는 다른 LLM을 이용해서 자동화를 통해 dataset을 Augmentation하는 방법이 있다. 먼저 Task Pool에 예시 data들을 넣어주고, Task Pool에서 random하게 k개의 data를 뽑은 후,LLM을 이용해 prompt만 바꿔서 새로운 data를 만든다. 그리고 prompt가 자연스러운지 확인하기 위해서 filtering을 거치고(이 filtering 역시 다른 LLM으로 하면 된다), filtering을 통과한 새로운 data만 Task Pool에 넣어준다. 이 iteration을 정해진 횟수만큼 반복하면 최종 Task Pool 즉 dataset을 얻을 수 있다.

다음으로는 Instruction Alignment의 훈련 과정에 대해서 살펴보려고 한다. 기본적으로는 pre-trained LLM을 훈련할 때와 동일하게 fine-tuning을 해주면 되는데, 조금 다른점이 있다.
우리의 fine-tuning dataset은 보통 둘 중 하나의 구조를 가지게 될 것이다. (Question, Answer) or (Instruction, Answer) 그리고 여기서 Question과 Instruction은 보통 user의 input이므로, 훈련을 할 때에는 Question이나 Instruction에 해당하는 token들은 loss를 걸지 않는다.

multi - round data를 훈련시킬 때도 마찬가지로 output쪽에다가만 loss를 걸어주어야 한다.


Instruction Alignment에 대한 마지막 내용으로, 주의할 점에 대해서 설명하려고 한다. 데이터의 품질이 무엇보다 중요하므로, 데이터를 신중히 모아야 하고, 다양한 field의 데이터를 모아서 훈련시키지 않고, specific한 field의 데이터만 너무 많이 모아서 훈련시키면 기존의 general한 knowledge를 까먹어버리는 catastrophic forgetting이 일어날 수 있으니 주의해야한다.
Alignment : Reinforcement Learning from Human Feedback
Reinforcement Learning from Human Feedback 방법은 강화학습을 통해서 LLM이 사람이 선호하는 output을 낼 수 있도록 만드는 방법이다. 이 내용을 이해하려면 그래도 강화학습으로 간단한 미로 찾기 게임 정도는 직접 해결해봤어야 한다.
그러면 먼저 강화학습을 하기 위한 문제정의를 해보자. State는 user input과 t = k-1까지 만들어낸 output을 concat한 sequence이다. (user input | output[1:k-1] ) 그리고 LLM은 agent로써 자신이 만들어낸 다음 토큰의 후보 토큰들의 probability distribution을 바탕으로 policy를 설정하고(보통 그냥 제일 확률 큰 토큰 고름), 다음 k번째 token을 고르는 action을 한다. Reward는 한 output sequence를 전부 만들고 나면, Human으로부터 feedback을 받는 구조이다.
여기서 reward를 주는 방식이 조금 특이한데, 만약 한 output sequence에 대해서 사람이 scalar로 직접 rating을 하게 되면, annotation하는 사람마다 reward의 편향이 있을 수 있기 때문에 매우 위험하다. (1~5사이로 rating을 하라고 해도 누구는 3~5정도로 보통 rating을 하고, 누구는 1~4정도로 보통 rating을 할 수 있음) 그래서 보통은 두 output을 비교하게 해서 둘 중 좋은 output을 고르게 하고, reward model을 만들 때, reward model자체는 sequence를 input으로 받아서 scalar rating을 output으로 내뱉는 모델을 쓰지만 loss를 두 sequnce의 rating을 비교하는 loss로 걸어준다.(Bradley-Terry loss). Reward model의 structure는 보통 LLM을 이용하고, 마지막 EOS token의 embedding vector에 Weight를 곱해서 단일 scalar값을 뽑는 구조이다. Value model도 Reward model과 같은 architecture를 이용하고, 당연히 parameter는 공유하지 않는다.

이제 강화학습을 위한 문제정의가 끝났으니, 그냥 강화학습 훈련하듯이 훈련하면 된다. expolaration을 하고, reward들의 weighted sum을 통해서 한 state의 value값을 업데이트해 나가는 것을 반복하면 최종적으로 State마다 Value값을 얻을 수 있고, 그 얘기는 (state,action)마다 Advantage function값을 얻을 수 있다는 것이고, Advantage function{A(state,action)}값에 비례해서 본래 LLM의 probability distribution을 중간중간 바꾸도록 훈련시키면 된다. (Reward Model과 Value model과 main LLM은 initialization시에는 param이 다 같지만, param을 공유하지는 않고, 훈련하면서 달라진다) 조금 더 구체적으로 설명하면, (state,action)은 지금 문제에서 (sequence, next token)이므로, Advantage(sequence, next token)값이 높으면 해당 sequnce가 LLM의 input일 때, output distibution에서 next token의 확률을 높여주도록 하면 된다.

Reinforcement Learning from Human Feedback part의 설명을 끝내기 전에, 추가적으로 고려하면 좋은 것들을 설명하고 끝내려고 한다. 첫 번째로는 reward gt를 만들 때, 직접적으로 rating을 하는게 더 좋을 때가 있을수도 있다는 것이다. 두 번째로는, reward를 기본 모델에서는 LLM이 output 만들기를 끝내면 부여하게 되는데, 중간중간에 넣어주는게 더 좋는 것이다. 예시로 밑과 같은 예시에서는 Response 2의 경우에 첫 두 문장은 옳은 문장이어서 두 문장과 뒤에 문장들의 reward를 다르게 주는게 이상적이다. 사실 당연한 얘기이기는 한데, 사람이 중간중간에 annotation을 하기가 매우 time-consuming하기 때문에 잘 하지 않는다고 한다.

세 번째로는 여러 reward model을 ensemble에서 쓰는 방법이 있다. 예를 들어서 reward gt를 직접 rating을 통해서 한 reward model과 gt를 두 output의 비교를 통해서 만든 reward model두개를 ensemble하는 방식이 있다. 마지막으로는 reward model의 gt를 위해 두 output을 비교하는 걸 LLM을 이용해서 자동화 하는 방법이 있는데, 단, 이럴 경우에는 어떤 output을 더 preference하는지에 대한 general rule이 필요하다. 예시를 보면 쉽게 이해할 수 있을 것이다.

Alignment : improved technics
지금부터는 Alignment를 할 때 고려할 수 있는 다른 technic들을 소개하고자 한다. 먼저, output편향을 고칠 때, 강화학습을 쓰지 않는 방법으로는 DPO라는 방법이 있다. 이 방법은 reward 모델같은걸 사용하지 않고, 그냥 사람이 annotation해준 두 output중 좋은 output이 나올 확률이 높도록 바로 loss를 LLM에다가 걸어주면서 fine-tuning하는 방법이다. 하지만 이 방법을 사용하면, 사람이 annotation해준 sample말고는 훈련에 사용할 수가 없기 때문에, annotation sample이 충분할 때만 이용할 수 있다. 즉, DPO는 offline learning이라는 단점을 가지고 있다.(Reinforcement Learning from Human feed back에서의 reward model은 annotation한 sample들을 기반으로 훈련시키는것이기 때문에 우리가 annotation해주지 않은 sample에 대해서도 reward를 생성해낼 수 있음)

마지막으로는, Alignment를 할 때 데이터 형식을 고치는 process도 그렇고, output의 편향을 제거하는 process도 그렇고, 잘 훈련된 LLM 모델을 이용해서 효율적으로 훈련하는 방법들도 존재한다. Insturction Alignment stage에서는 small model을 이용해서 data를 생성해낼 수도 있고, data의 품질을 검증할 수도 있으며, 이미 Insturction Alignment가 되어있는 small LLM으로부터 distillation을 할 수도 있다.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
다음 게시물에서는 이렇게 잘 훈련된 LLM을 특정 task에 fine tuning하는 방법에 대해서 소개하도록 하겠다.
'AI 논문리뷰 - LLM' 카테고리의 다른 글
| Research Paper Review : KVzip (0) | 2025.11.25 |
|---|---|
| Book Review : Foundations of Large Language Models (4) (0) | 2025.11.21 |
| Book Review : Foundataions of Large Language Models (3) (0) | 2025.11.21 |
| Book Review : Foundations of Large Language Models (5) (0) | 2025.11.21 |
| Book Review : Foundations of Large Language Models (1) (1) | 2025.11.20 |