TRL 에서의 VLM 정렬: MPO, GRPO 등 새로운 방법론 소개
요약
본 기술 기사는 TRL (Transformer Reinforcement Learning) 라이브러리에서 시각 언어 모델(VLM)의 정렬 및 후 훈련(post-train)을 위한 최신 방법론들을 소개합니다. 기존의 SFT와 DPO를 넘어, MPO(혼합 선호 최적화)는 여러 손실 함수를 결합하여 VLM에 적합한 강력한 성능 향상을 제공하며, GRPO(그룹 상대 정책 최적화)는 그룹 단위로 정책을 업데이트하여 보상 노이즈에 강건하고 전반적인 응답 품질을 높입니다. 또한 TRL은 이들 고급 정렬 기법들을 VLM 환경에서 사용할 수 있도록 확장하고, 사용 편의성을 위한 훈련 스크립트와 데모 노트북도 제공합니다.
핵심 포인트
- MPO(Mixed Preference Optimization)는 DPO를 확장하여 시그모이드, BCO, SFT 등 여러 손실을 결합함으로써 VLM에 최적화된 강력한 정렬 기법입니다.
- GRPO(Group Relative Policy Optimization)는 정책 업데이트를 그룹 단위로 수행하여 보상 노이즈에 강건하며, 모델의 전반적인 응답 품질 향상에 효과적입니다.
- TRL은 MPO와 GRPO 같은 최신 다중 모드 정렬 방법론을 VLM 환경에서 사용할 수 있도록 지원을 확장했습니다.
- VLM의 후 훈련 과정은 SFT(지도 정밀 조정)를 거쳐 DPO(직접 선호 최적화)로 진행되었으나, 이제 MPO와 GRPO 같은 더 진보된 기법들이 활용 가능합니다.
시각 언어 모델 (Vision Language Models, VLMs) 은 강해지고 있지만, 인간 선호도에 정렬하는 것은 여전히 중요합니다. TRL 에서 우리는 이미 지도 정밀 조정 (Supervised Fine-Tuning, SFT) 과 직접 선호 최적화 (Direct Preference Optimization, DPO) 를 사용하여 VLM 을 후 훈련 (post-train) 하는 방법을 보여줬습니다. 이번에는 더 나아가겠습니다.
tl;dr TRL 에서의 새로운 내용은 다음과 같습니다:
혼합 선호 최적화 (Mixed Preference Optimization, MPO)
그룹 상대 정책 최적화 (Group Relative Policy Optimization, GRPO)
그룹 시퀀스 정책 최적화 (Group Sequence Policy Optimization, GSPO) (GRPO 의 변형)
이는 쌍대 DPO 를 넘어선 것으로, 선호 데이터에서 더 풍부한 신호를 추출하고 현대적인 VLM 과 함께 더 잘 확장됩니다.
또한 기존 방법을 VLM 을 지원하도록 확장했습니다:
강화 학습 Leave One Out (Reinforce Leave One Out, RLOO)
온라인 직접 선호 최적화 (Online Direct Preference Optimization, Online DPO)
이는 더 효율적이고 확장 가능한 다중 모드 정렬을 가능하게 합니다.
마지막으로:
시각 언어 모델 (VLM) 을 위한 네이티브 지도 정밀 조정 지원
빠른 시작을 돕는 훈련 스크립트 및 데모 노트북
- TRL 에서의 VLM 다중 모드 정렬 ⚡️
전통적으로, 기본 모델을 가져와 지시 사항을 따르도록 SFT 를 적용한 후 선호 데이터에 정렬되도록 DPO 를 적용했습니다. 이전에 우리는 이 접근법을 시각 언어 모델 (VLM) 에 맞게 적응시켰고 IDEFICS2 에서 모델 응답의 개선을 입증했습니다.
DPO 는 선택된 답변과 거절된 답변을 사용하여 모델 응답 간의 선호도를 최적화하는 대조적 손실을 사용합니다: 원하는 것과 원하지 않는 것에 기반하여 선호도를 최적화합니다.
하지만 지난 1 년 동안 GRPO 와 MPO 같은 새로운 다중 모드 정렬 방법이 인기를 끌며 VLM 성능을 더욱 높일 수 있습니다. 블로그 포스트의 끝에 모델 응답 간의 차이를 보여주는 표를 찾을 수 있습니다.
SFT 를 사용하여 추론 작업을 수행하는 다중 모드 모델을 정렬하면 분포 이동으로 인해 한계가 있습니다. 반면 DPO 로 정렬된 모델은 일관된 논리를 생성하지 못하고 반복적인 응답을 생성할 수 있습니다. 이를 해결하기 위해 MPO 라는 새로운 기법이 있으며, 이는 특히 다중 모드 모델에 맞게 제작되었습니다. 이 방법은 DPO 의 선호 손실 (시그모이드), Binary Classifier Optimization (BCO) 의 품질 손실, SFT 의 생성 손실을 포함하는 여러 손실을 가진 DPO 의 확장입니다. 논문에는 이 결합 손실로 전환하면 MathVista 에서 6.2 점의 개선이 있음을 명시합니다.
손실만 수정하므로 TRL 의 DPOTrainer 클래스에 결합 손실 지원을 추가했습니다. 이를 사용하려면 DPOConfig 를 다음과 같이 초기화할 수 있습니다:
mpo_config = DPOConfig(
loss_type=["sigmoid", "bco_pair", "sft"], # MPO 논문에서 사용된 결합 손실 유형
loss_weights=[0.8, 0.2, 1.0], # MPO 논문에서 사용된 해당 가중치
...
그런 다음 DPOTrainer 를 초기화합니다:
mpo_trainer = DPOTrainer(
model=model_id,
args=mpo_config,
...
그만! 더 탐구하려면 여기에서 완전한 노트북 예제를 찾을 수 있습니다.
그룹 상대 정책 최적화 (Group Relative Policy Optimization, GRPO) 는 DeepSeek Math 논문에서 처음 소개된 최신 정렬 방법이며, 이후 혁신적인 LLM 인 DeepSeek R1 에 통합되었습니다. 이는 PPO 의 추가 사항으로, 정책 업데이트는 그룹 (대화 전개 방식을 나타내는 트래젝터리의 배치) 을 통해 수행됩니다. 이 기능은 노이즈가 그룹 내에서 평균화되므로 보상 노이즈에 더 견고합니다. 모델이 단일 고 보상 샘플이 아닌 넓은 의미의 좋은 응답을 학습하므로, 이 방법은 모델의 성능을 매우 높게 만듭니다.
TRL 에서 이제 시각 언어 모델 (Vision Language Models) 을 위한 GRPO(Group Relative Policy Optimization) 지원도 소개합니다. 전체 훈련 스크립트 예제는 노트북에서 찾을 수 있으므로, 여기서는 핵심 구성 요소와 개념을 강조하는 데 집중하겠습니다.
훈련 스크립트를 효과적으로 작동시키기 위해서는 답변 형식이 올바른지 확인하고 해답 자체가 완성된 부분과 유사한지 검증해야 하므로, 우리는 두 개의 보상 함수 (reward functions) 를 작성합니다. 후자의 보상을 실제로 개선 효과를 볼 수 있는 경우, 상대적으로 큰 모델, 많은 생성 횟수, 그리고 고품질의 다양한 데이터셋이 포함된 매우 극단적인 설정 (maximalist setup) 이 필요합니다.
import re
from math_verify import LatexExtractionConfig, parse, verify
def format_reward(completions, **kwargs):
...
그런 다음 정의한 보상 함수를 GRPOConfig 와 GRPOTrainer 에 전달하고 train() 을 호출하여 훈련을 시작할 수 있습니다.
from trl import GRPOConfig, GRPOTrainer
training_args = GRPOConfig(
learning_rate=1e-5,
...
전체 노트북 예제는 여기에서 확인하세요.
Qwen 에서 최근 출시된 강화학습 (RL) 정렬 알고리즘인 그룹 시퀀스 정책 최적화 (GSPO, Group Sequence Policy Optimization) 는 GRPO 의 일부 한계를 극복합니다. GSPO 는 토큰 단위가 아닌 시퀀스 단위로 중요 샘플링 가중치 (importance sampling weights) 를 계산함으로써 더 안정적인 훈련을 달성합니다. 이 장점은 MoE 스타일의 모델에서 더욱 관련성이 높습니다.
최신 TRL 은 GSPO 지원도 추가했으며, 이는 GRPO 의 손실 함수의 변형이기 때문에 멀티모달 (multimodal) 지원이 포함되어 있습니다. 트레이너를 생성하는 과정은 GRPO 와 동일하지만, 다음과 같은 추가 파라미터 값을 추가합니다 (값은 논문에서 추출함).
from trl import GRPOConfig
training_args = GRPOConfig(
...
...
위에서 논의된 기법으로 미세 조정된 Qwen2.5VL-3B 의 모델 출력 결과를 요약한 표입니다. 우리는 데이터셋 부분집합에 대한 최소한의 실행을 수행했으며, 모델은 다른 데이터셋에서 미세 조정되었으므로 이 비교는 분위기 확인 (vibe-check) 을 위한 것입니다.
여기에서 답변 확인하세요
질문: 주어진 도형에서 각도 APO 가 25.0 도라면 각도 AOB 의 크기는 얼마입니까? 선택지: A: 140° B: 130° C: 120° D: 110°
답변 (데이터셋): 각도 AOB 의 크기를 구하기 위해서는 사각형의 내각의 합이 360 도라는 성질을 사용할 수 있습니다. 이 성질을 적용하여 각도 AOB 를 계산하면 360 - 각도 OAP - 각도 OBP - 각도 P 가 됩니다. 각도 OAP 와 각도 OBP 는 모두 90 도이고, 각도 P 는 50 도로 주어진 값이므로, 이 값을 식에 대입하여 각도 AOB = 360 - 90 - 90 - 50 = 130 도를 얻을 수 있습니다. 따라서 각도 AOB 의 크기는 130 도입니다. 따라서 정답은 선택지 B 입니다. Answer:B
Base Model Output: 원주에서 같은 호에 의해 걸린 각의 성질을 사용하여 AOB 각의 크기를 구해야 합니다. 구체적으로, 원주에서 어떤 점에 의해 걸린 각 (AOB) 은 원주 위의 임의의 점에 의해 걸린 것과 같은 호에 의해 걸린 각 (APO) 의 두 배입니다. 주어진 조건인 APO 각 = 25° 를 이용하여 AOB 각을 계산하면 다음과 같습니다: [AOB 각 = 2 * APO 각] [AOB 각 = 2 * 25°] [AOB 각 = 50°] 그러나, 제공된 선택지에 따르면 이 계산은 잘못되었을 수 있습니다. 올바른 성질을 사용하여 다시 평가해 보겠습니다. 올바른 성질은 원주에서 어떤 점에 의해 걸린 각 (AOB) 은 원주 위의 임의의 점에 의해 걸린 것과 같은 호에 의해 걸린 각의 두 배라는 것입니다. 따라서, 올바른 계산은 다음과 같아야 합니다: AOB 각 = 2 * APO 각 = 2 * 25° = 50° 그러나 이는 제공된 선택지와 일치하지 않습니다. 다른 접근을 고려해 보겠습니다. 만약 APO 각이 25° 이고, 순환사각형의 성질이나 순환사각형의 대각의 합이 180° 라는 사실을 고려한다면, 호와 지름에 의해 형성된 보각을 살펴봐야 할 수 있습니다. 주어진 조건인 APO 각의 보각을 찾는 것이 올바른 해석이라면, 이는 AOB 각의 크기를 줄 것입니다. AOB 각 = 180° - APO 각 = 180° - 25° = 155° 그러나 여전히 선택지와 일치하지 않습니다. 제공된 선택지에 따르면, 문제나 해석에 오해가 있거나 다른 해석이 필요할 수 있습니다. 표준 기하학적 원칙에 기반하여 올바른 답은 다음과 같아야 합니다: AOB 각 = 2 * APO 각 = 2 * 25° = 50° 이 경우라면 추가적인 맥락이나 문제 진술을 명확히 해주세요.
MPO Output: 원주에서 같은 호에 의해 걸린 각의 성질을 사용하여 AOB 각의 크기를 구해야 합니다. 구체적으로, 원주에서 어떤 점에 의해 걸린 각 (AOB) 은 원주 위의 임의의 점에 의해 걸린 것과 같은 호에 의해 걸린 각 (APO) 의 두 배입니다. 주어진 조건인 APO 각 = 25° 를 이용하여 AOB 각을 계산하면 다음과 같습니다: AOB 각이 APO 각의 두 배이므로, [AOB 각 = 2 * APO 각] [AOB 각 = 2 * 25°] [AOB 각 = 50°] 그러나, 제공된 선택지에 따르면 이 계산은 잘못되었을 수 있습니다. 올바른 성질을 사용하여 다시 평가해 보겠습니다. 올바른 성질은 원주에서 어떤 점에 의해 걸린 각 (AOB) 은 원주 위의 임의의 점에 의해 걸린 것과 같은 호에 의해 걸린 각의 두 배라는 것입니다. 따라서, 올바른 계산은 다음과 같아야 합니다: AOB 각 = 2 * APO 각 = 2 * 25° = 50° 그러나 이는 제공된 선택지와 일치하지 않습니다. 다른 접근을 고려해 보겠습니다. 삼각형 OAP 을 고려한다면, AOP 각은 직각 (90°) 입니다. 왜냐하면 그것은 반원주에 내접하기 때문입니다. 이제 APO 각이 25° 로 주어졌으므로, AOA 각은 65° 가 될 것입니다 (APO 각의 보각이기 때문). 따라서, AOB 각은 이 값의 절반으로 32.5° 가 됩니다. 그러나 이는 여전히 선택지와 일치하지 않습니다. 문제나 다른 기하학적 구성에 대한 다른 해석이 있을 수 있습니다. 제공된 선택지를 고려한다면, 표준 기하학적 원칙에 기반하여 이러한 유형의 문제에 대해 올바른 답을 선택할 수 없습니다.
GRPO 출력: 각도 AOB 의 크기를 구하기 위해서는, 각도 AOB 가 중심각 AOP 와 동일한 호를 절단하는 원주각임을 이해해야 합니다. 원주각 정리 (Inscribed Angle Theorem) 에 따르면, 같은 호를 절단하는 중심각의 크기에 반한 값이 원주각의 크기와 같습니다.<br>주어진 조건:<br>- 각도 APO = 25.0 도<br>각도 AOB 가 중심각 AOP 와 동일한 호를 절단하는 원주각이므로, 원주각 정리 (Inscribed Angle Theorem) 를 사용할 수 있습니다:<br>각도 AOB 의 크기는 각도 AOP 의 크기의 반입니다.<br>따라서, 각도 AOB 의 크기는 130 도 입니다.<br><br>GSPO 출력: 각도 AOB 의 크기를 구하기 위해서는, 각도 AOB 가 중심각 AOP 와 동일한 호를 절단하는 원주각임을 이해해야 합니다. 원주각 정리 (Inscribed Angle Theorem) 에 따르면, 같은 호를 절단하는 중심각의 크기에 반한 값이 원주각의 크기와 같습니다.<br>주어진 조건:<br>- 각도 APO = 25.0 도<br>각도 AOB 가 중심각 AOP 와 동일한 호를 절단하는 원주각이므로, 원주각 정리 (Inscribed Angle Theorem) 를 사용하여 각도 AOB 의 크기를 구할 수 있습니다:<br>각도 AOB 의 크기는 각도 AOP 의 크기의 반입니다.<br>따라서, 정답은 B: 130° 입니다.<br><br>MPO, GRPO, GSPO 외에도 TRL 은 이제 Vision Language Models (VLM) 에 대한 다중 모달 데이터셋에서의 정렬을 가능하게 함으로써 Reinforce Leave One Out (RLOO) 과 Online Direct Preference Optimization (Online DPO) 을 지원합니다.<br><br>RLOO 는 이제 일반적인 VLM 을 지원합니다. 완전한 훈련 예제는 rloo_vlm.py 스크립트에서 찾을 수 있습니다.<br><br>RLOOTrainer 를 설정하는 방법은 다음과 같습니다:<br><br><br>trainer = RLOOTrainer(<br>model=model_name,<br>args=training_args,<br>...<br>
예제 스크립트에서 직접 훈련을 시작하려면:<br><br><br>CUDA_VISIBLE_DEVICES=1,2 python3 examples/scripts/rloo_vlm.py --model_name_or_path Qwen/Qwen2.5-VL-3B-Instruct<br>
Online DPO 도 VLM 을 지원합니다. 간단한 예제는 online_dpo_vlm.py 스크립트를 참조하세요.<br><br>예제 스크립트 실행 (vLLM 통합은 나중에 논의됨):<br><br><br>CUDA_VISIBLE_DEVICES=1,2 python3 examples/scripts/online_dpo_vlm.py --model_name_or_path Qwen/Qwen2.5-VL-3B-Instruct --use_vllm --vllm_mode server<br>
이 스크립트들은 VLM 훈련을 위해 바로 실행 가능한 준비가 되었습니다. 완전한 파라미터 튜닝은 TRL: Online DPO trainer RLOO Trainer 문서에 기록되어 있습니다.<br><br>과거에는 SFTTrainer 가 부분적으로 Vision Language Models (VLM) 을 지원했습니다. 이는 주로 transformers API 에서 VLM 구현 간의 많은 차이 때문입니다. transformers API 의 표준화 이후, 우리는 Vision Language Models 에 대한 완전한 지원을 제공했습니다. VLM 과 함께 SFTTrainer 를 간단히 초기화할 수 있습니다.<br><br><br>from trl import SFTConfig, SFTTrainer<br>from datasets import load_dataset<br>trainer = SFTTrainer(<br>...<br>
VLM 을 훈련하려면, 처리될 이미지가 포함된 추가 images 열을 가진 데이터셋을 제공해야 합니다. Dataset Formats — Vision Datasets 를 참조하여 어떻게 되어야 하는지 자세히 확인해 보세요. 좋은 예로는 LLaVA Instruct Mix 이 있습니다.<br><br>또한 transformers Vision Language Models 에 대해 바로 작동하는 sft_vlm.py 스크립트도 있습니다.<br><br>vLLM 은 TRL 에서 온라인 정렬 방법을 지원하기 위해 통합되었습니다. 훈련 중에 샘플을 생성해야 하는 경우입니다. 다음 예제 스크립트를 실행하면 vLLM 을 활성화할 수 있습니다:<br><br><br>CUDA_VISIBLE_DEVICES=1,2 python3 examples/scripts/grpo_vlm.py --model_name_or_path Qwen/Qwen2.5-VL-3B-Instruct --use_vllm --vllm_mode colocate<br>
주요 두 가지 모드가 있습니다: colocate 와 server. colocate
AI 자동 생성 콘텐츠
본 콘텐츠는 Hugging Face Blog의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기