# TRL: RLHF Alignment Fine-tuning

TRL은 Supervised Fine-tuning(SFT), Reward Modeling(RM), Proximal Policy Optimization(PPO) 단계에 이르기까지 강화 학습으로 트랜스포머 언어 모델을 훈련하는 도구 세트를 제공하는 풀 스택 라이브러리입니다.

### Huggingface TRL 특징

1. Trainer Class는 아래 방법론을 함수로 제공

* Supervised fine-tuning: `SFTTrainer`
* Direct Preference Optimization: `DPOTrainer`
* Reward: `RewardTrainer`
* Proximal Policy Optimization: `PPOTrainer`
* Contrastive Preference Optimization: `CPOTrainer`
* Optimization without Reference Model: `ORPOTrainer`

2. 다른 패키지 사용으로 효율성과 확장성 확보

* `accelerate`: 단일 GPU에서 DDP 및 DeepSpeed와 같은 방법으로 모델 학습을 대규모 멀티노드 클러스터로 확장할 수 있는 TRL의 백본입니다.
* `PEFT`: Transformer에서 제공하는 PEFT와 통합되어 정량화 및 LoRA 또는 QLoRA와 같은 방법을 사용하여 적당한 하드웨어에서 가장 큰 모델도 학습할 수 있습니다.
* `unsloth`: 통합되어 있으며 전용 커널로 훈련 속도를 크게 높일 수 있습니다. https://github.com/unslothai/unsloth

3. CLI 사용으로 argument로 간단하게 학습

* `CLI`: CLI를 사용하면 단일 명령과 유연한 설정 시스템을 사용하여 코드를 작성하지 않고도 LLM을 미세 조정하고 Inference 할 수 있습니다.

### RLHF

RLHF는 Reinforcement Learning from Human Feedback의 약자입니다.

* 사람의 피드백으로부터 직접 '보상 모델'을 학습하고 이 모델을 보상 함수로 사용하여 근사 정책 최적화(PPO)와 같은 최적화 알고리즘을 통한 강화 학습으로 에이전트의 정책을 최적화하는 기술입니다.
* 이러한 접근 방식을 통해 AI 시스템은 복잡한 인간의 선호도를 더 잘 이해하고 적응하여 성능과 안전성을 개선할 수 있습니다.

<figure><img src="https://miro.medium.com/v2/resize:fit:1400/1*8otwW-pK38qyg3cj33tQQg.png" alt=""><figcaption></figcaption></figure>

강화 학습은 주어진 환경에 대해서 상태(State)에 따라 Policy 모델이 행동(Action)을 하게 되고, 그 일련의 과정으로 얻은 보상(Reward)을 기반으로 각 상태 또는 행동의 가치를 평가하여 학습하는 기계 학습 방법론입니다. 여기서 중요한 점은 어떤 행동이 정답인지 레이블로 존재하는 Supervised learning과는 달리, 모델이 한 행동이 적절한지 아닌지를 알려주게 됩니다. 답변에 대하여 긍정적인 보상과 부정적인 보상의 정보를 모델에 주면서 학습을 진행합니다.

<figure><img src="https://miro.medium.com/v2/resize:fit:1400/1*FXrs85cNLnIO4_G0YPbwLg.jpeg" alt=""><figcaption></figcaption></figure>

### RLHF Alignment Process

생성 모델을 사람의 피드백에 맞춰 조정하면 자연어 생성 작업의 성능이 크게 향상되었습니다. 대규모 언어 모델(LLM)의 경우, 현재 연구에 따르면 인간의 피드백을 통한 RLHF, PPO, DPO 같은 Alignment 방법이 감독 미세 조정(SFT)만 사용하는 것보다 일관되게 더 효과적 입니다.

![](https://blog.premai.io/content/images/2024/03/image-39.png)

TRL을 활용하여 RLHF, PPO, DPO 등의 절차는 아래와 같습니다:

1단계 데이터 수집(Data Collection):

* 원하는 행동이나 작업에 대한 사람이 생성한 예시 또는 데모 데이터 세트를 수집합니다.
* 이 데이터 세트는 AI 모델 학습의 기초가 됩니다.&#x20;

2단계 보상 모델링(Reward Modeling)

* 수집한 데이터 세트를 사용하여 보상 모델을 학습시킵니다.
* 보상 모델은 사람의 선호도를 기반으로 AI 모델 결과물의 품질이나 바람직함을 예측하는 방법을 학습합니다.
* 인간의 선호도에 부합하는 결과물에는 더 높은 보상을, 그렇지 않은 결과물에는 더 낮은 보상을 할당합니다.

3단계 정책 최적화(Policy Optimization):

* 강화 학습 알고리즘을 사용하여 보상 모델을 기반으로 AI 모델의 정책을 최적화합니다.
* AI 모델은 보상 모델에서 예측된 보상을 최대화하는 출력을 생성하는 방법을 학습합니다.
* 이 단계는 보상 모델에서 파악한 인간의 선호도에 맞춰 AI 모델의 행동을 조정하는 것을 목표로 합니다.

4단계 휴먼 피드백 루프(Human Feedback Loop):

* 학습 중에 AI 모델의 출력에 대한 사람의 추가 피드백을 수집합니다.
* 모델이 생성한 결과물을 인간 평가자에게 제시하고 피드백이나 평가를 요청합니다.
* 이 피드백은 보상 모델을 더욱 세분화하고 정책 최적화를 안내하는 데 사용됩니다.

5단계 반복적인 개선(Iterative Refinement):

* 3단계와 4단계를 반복적으로 수행하여 AI 모델의 성능을 지속적으로 개선합니다.
* 더 많은 사람의 피드백이 수집될수록 보상 모델은 사람의 선호도를 더 정확하게 파악할 수 있습니다.
* 업데이트된 보상 모델을 기반으로 AI 모델의 정책이 개선되어 인간의 가치에 더 잘 부합하게 됩니다.

6단계 평가 및 배포(Evaluation and Deployment):

* 보류된 테스트 예제에서 학습된 AI 모델을 평가하여 성능과 인간 선호도와의 일치도를 평가합니다.
* 원하는 기준을 충족하는 경우 실제 사용을 위해 모델을 배포할 수 있습니다.
* 모델의 성능을 지속적으로 모니터링하고 지속적인 개선을 위해 사람의 피드백을 추가로 수집합니다.

### PPO

PPO는 policy gradient method 방법으로, 정책 함수를 직접 최적화합니다.

* Policy gradient method는 일반적으로 Q-Learning과 같은 값 기반 방법보다 더 효율적이지만 학습하기는 더 어려울 수 있습니다. 근사 정책 최적화(PPO)는 더 나은 방법을 학습하기 위한 스마트 가이드와 같습니다. 로봇에게 게임 플레이 방법을 가르치려고 한다고 상상해 보세요.
* PPO는 로봇이 학습한 모든 것을 갑자기 바꾸지 않고도 조금씩 개선할 수 있도록 도와줍니다. 이를 통해 로봇은 안전하고 효과적인 학습을 유지하면서 더 능숙해집니다. 이는 마치 축구를 배울 때 이미 배운 모든 것을 잊어버리지 않고 점진적으로 실력을 향상시키는 것과 비슷합니다.

![](https://www.loudai.net/~gitbook/image?url=https%3A%2F%2F3055094660-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FYzxz4QeW9UTrhrpWwKiQ%252Fuploads%252FPP1OJeI7p9TYiy5d6SaY%252F%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA%25202024-04-27%2520%25E1%2584%258B%25E1%2585%25A9%25E1%2584%258C%25E1%2585%25A5%25E1%2586%25AB%25209.46.07.png%3Falt%3Dmedia%26token%3D0e70b600-b875-4de5-9fa4-dd245ae9c91a\&width=768\&dpr=4\&quality=100\&sign=b2393b241cf569d20bdcf10bf7a4287debb24e7a49464d6166e5a9ecb20493ab)

### SFT(Supervised fine-tuning)

Supervised fine-tuning (SFT)은 인간 피드백을 통한 강화 학습(RLHF)의 핵심 단계입니다. Huggingface의 TRL 라이브러리는 사용하기 쉬운 API를 제공하여 몇 줄의 코드만으로 SFT 모델을 생성하고 데이터 세트에 대해 훈련할 수 있습니다. 지도 미세 조정부터 시작하여 보상 모델링, 마지막으로 근사 정책 최적화(PPO)까지 강화 학습을 사용하여 언어 모델을 훈련할 수 있는 도구가 함께 제공됩니다. `SFTTrainer`에는 모델, 데이터 세트, Lora 구성, 토큰화, 학습 파라미터가 제공됩니다.

* **Supervised Fine Tuning(SFT)**: 특정 도메인의 데이터 혹은 크라우드 소싱 등을 통해 구축한 양질의 (Prompt, Response) 데이터를 구축하여 fine-tuning하는 과정입니다. 기존 모델을 특정 작업에 맞게 세밀하게 조정하여 해당 작업에 특화된 성능을 얻는 방법 입니다.
* **Pre-training with Extracted Feature-based Transfer(PEFT)**: 사전 학습된 모델에서 특징을 추출하여 다른 작업에 전이하는 방법으로 Adapter 방법 등을 사용합니다.
* **RLHF**: SFT 모델에 추가적으로 강화 학습을 적용하여 사람의 의도에 맞게 파인튜닝을 하는 과정입니다.

### DPO(Direct Preference Optimization)

RLHF의 개념은 로봇 공학에서 오랫동안 사용되어 왔지만, OpenAI의 논문 '인간 선호도에서 언어 모델 미세 조정'에서 LLM에 대중화되었습니다. 이 논문에서 저자는 인간의 피드백을 근사화하도록 보상 모델을 훈련하는 프레임워크를 제시합니다. 그런 다음 이 보상 모델은 [Proximal Policy Optimization](https://arxiv.org/abs/1707.06347) (PPO) 알고리즘을 사용하여 미세 조정된 모델의 정책을 최적화하는 데 사용됩니다.

대규모 업데이트는 불안정하거나 최적의 솔루션이 아닌 결과를 초래할 수 있으므로 PPO의 핵심 개념은 정책에 대한 소규모의 점진적 업데이트를 중심으로 이루어집니다. 경험상 이 기술은 안타깝게도 여전히 불안정하고(손실 편차), 재현하기 어렵고(수많은 하이퍼파라미터, 임의의 시드에 민감함), 계산 비용이 많이 듭니다.바로 이 부분에서 Direct Preference Optimization(DPO)가 등장합니다. DPO는 작업을 분류 문제로 처리하여 제어를 단순화합니다. 구체적으로는 학습된 모델(또는 정책 모델)과 참조 모델이라고 하는 복사본이라는 두 가지 모델을 사용합니다. 학습하는 동안 목표는 학습된 모델이 참조 모델보다 선호하는 답변에 대해 더 높은 확률을 출력하도록 하는 것입니다. 반대로, 거부된 답변에 대해서는 더 낮은 확률을 출력하도록 하는 것도 목표입니다. 즉, 잘못된 답변에 대해서는 LLM에 불이익을 주고 좋은 답변에 대해서는 보상을 주는 것입니다.

DPO는 LLM 자체를 보상 모델로 사용하고 이진 교차 엔트로피 목표를 사용함으로써 광범위한 샘플링, 보상 모델 피팅 또는 복잡한 하이퍼파라미터 조정 없이도 모델의 출력을 사람의 선호도에 효율적으로 맞출 수 있습니다. 그 결과 더 안정적이고 효율적이며 계산 부담이 적은 프로세스를 구현할 수 있습니다.

![](https://www.loudai.net/~gitbook/image?url=https%3A%2F%2F3055094660-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FYzxz4QeW9UTrhrpWwKiQ%252Fuploads%252FZQd8sAn0uTQGcBShM95Q%252F%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA%25202024-04-27%2520%25E1%2584%258B%25E1%2585%25A9%25E1%2584%258C%25E1%2585%25A5%25E1%2586%25AB%25209.46.21.png%3Falt%3Dmedia%26token%3D07b1c15a-daa2-4c96-b090-458972407b3c\&width=768\&dpr=4\&quality=100\&sign=437737d566fb9d42735229bcaf8ab4b1aa043143d504a73d652b35689a7465a5)

### ORPO(Optimization without Reference Model)

ORPO는 기존의 감독 미세 조정과 선호도 정렬 단계를 단일 프로세스로 결합한 새롭고 흥미로운 미세 조정 기법입니다. 따라서 트레이닝에 필요한 컴퓨팅 리소스와 시간이 줄어듭니다. 또한, 경험적 결과에 따르면 ORPO는 다양한 모델 크기와 벤치마크에서 다른 얼라인먼트 방법보다 성능이 뛰어납니다.

명령어 튜닝 및 기본 설정 조정은 특정 작업에 LLM(대규모 언어 모델)을 적용하는 데 필수적인 기술입니다. 전통적으로 이 작업에는 여러 단계의 프로세스가 포함됩니다:

1. 목표 도메인에 맞게 모델을 조정하기 위한 명령어에 대한 Supervised Fine-Tuning(SFT),
2. 거부된 응답보다 선호되는 응답을 생성할 가능성을 높이기 위한 Reinforcement Learning with Human Feedback (RLHF) 또는 Direct Preference Optimization (DPO)와 같은 선호도 조정 방법.

!\[\[스크린샷 2024-04-27 오전 10.27.38.png]]

SFT는 모델을 원하는 영역에 효과적으로 적용하지만, 실수로 선호되는 답변과 함께 바람직하지 않은 답변이 생성될 확률이 높아집니다. 그렇기 때문에 선호도 정렬 단계가 선호되는 결과와 거부되는 결과의 가능성 간격을 넓히기 위해 필요합니다.

&#x20;[Hong et al.2024)](https://arxiv.org/abs/2403.07691)가 소개한 ORPO(Optimization without Reference Model)는 인스트럭션 튜닝과 선호도 조정을 하나의 단일화된 훈련 프로세스로 결합하여 이 문제에 대한 우아한 해결책을 제시합니다. ORPO는 표준 언어 모델링 목표를 수정하여 음의 로그 확률 손실을 확률 비율(OR) 용어와 결합합니다. 이 OR 손실은 거부된 응답에는 약하게 불이익을 주고 선호하는 응답에는 강하게 보상함으로써 모델이 목표 작업을 학습하는 동시에 사람의 선호도에 맞게 조정할 수 있도록 합니다.

#### $$L_{ORPO} = \mathbb{E}_{(x, y_{w}, y_{l})} [L_{SFT} + \lambda \cdot L_{OR}]$$

RPO는 TRL, Axolotl, LLaMA-Factory와 같은 Python 라이브러리에서 구현할 수 있습니다. ORPO 알고리즘으로 SFT와 환경설정 정렬 단계를 단일 프로세스로 통합하는 방법으로 예제를 실행하겠습니다. TRL을 사용해 사용자 지정 환경설정 데이터 세트에서 Llama3 8B 모델을 Fine-tuning 합니다.

### CPO(Contrastive Preference Optimization)

Contrastive Preference Optimization는 사용자의 선호도를 모델링하고 최적화하는 머신러닝 기법입니다. CPO의 주요 목표는 주어진 옵션들 간의 선호도를 비교하여 최적의 결정을 내리는 것입니다. 이를 통해 사용자 경험을 향상시키고, 다양한 응용 분야에서 효율성을 높일 수 있습니다.

CPO는 대조 학습(Contrastive Learning)을 사용하여 선호도를 학습합니다. 대조 학습은 두 개 이상의 옵션을 비교하여 어느 쪽이 더 선호되는지를 학습하는 방식입니다. 이를 통해 모델은 선호도에 대한 명확한 경계를 학습하게 됩니다. 예를 들어, 사용자가 A를 B보다 더 선호한다는 데이터를 기반으로 모델을 학습시킵니다.

CPO는 강화 학습(Reinforcement Learning)\*\*과 통합되어, 에이전트가 환경과 상호작용하면서 선호도를 지속적으로 학습하고 최적화할 수 있습니다. 강화 학습에서는 보상 함수(reward function)를 통해 에이전트의 행동을 유도하는데, CPO는 이 보상 함수를 선호도 기반으로 학습하고 최적화합니다.

CPO의 **주요 특징 및 장점**은 다음과 같습니다. 첫째, 대조 학습을 통해 적은 데이터로도 효율적인 학습이 가능합니다. 이는 데이터가 부족한 상황에서도 높은 성능을 발휘할 수 있게 합니다. 둘째, 사용자의 명시적 선호도 데이터를 사용하여 모델의 정확성을 높일 수 있습니다. 셋째, 개인화된 추천 시스템을 구현하는 데 유용합니다. 이를 통해 사용자 경험을 개선하고 만족도를 높일 수 있습니다.

CPO의 **작동 원리**는 다음과 같습니다:

1. 먼저 사용자 행동 데이터와 선택 데이터를 수집합니다. 예를 들어, 사용자가 A를 선택하고 B를 선택하지 않은 경우의 데이터를 수집합니다.
2. 그런 다음, 수집된 데이터를 사용하여 모델을 학습시킵니다.
3. 대조 학습을 통해 선호도에 대한 경계를 학습하고, 이를 통해 사용자 선호도를 예측합니다. 마지막으로 학습된 모델을 사용하여 새로운 상황에서 최적의 선택을 수행합니다.
4. 환경과의 상호작용을 통해 모델을 지속적으로 최적화합니다.

결론적으로, Contrastive Preference Optimization은 사용자 선호도를 효과적으로 학습하고, 다양한 응용 분야에서 개인화된 경험을 제공하는 강력한 방법론입니다. CPO는 머신러닝 및 강화 학습 기술과 결합하여 최적의 성능을 발휘하며, 사용자 만족도를 높이는 데 중요한 역할을 합니다.
