시각 언어 모델 (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) 을 위한 네이티브 지도 정밀 조정 지원
빠른 시작을 돕는 훈련 스크립트 및 데모 노트북
전통적으로, 기본 모델을 가져와 지시 사항을 따르도록 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"],
loss_weights=[0.8, 0.2, 1.0],
...
그런 다음 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