Instruction Tuning
명령어 튜닝은 사전 학습된 언어 모델을 명령어와 응답 쌍으로 미세 조정하여 요청을 따르도록 합니다. FLAN, InstructGPT, 데이터, VLM을 다룹니다.
명령어 튜닝은 사전 학습된 대규모 언어 모델(LLM)을 명령어와 원하는 응답의 쌍으로 미세 조정해 자연어로 작성된 요청을 따르도록 하는 과정입니다. 사전 학습된 모델은 텍스트를 이어서 생성할 뿐입니다. OpenAI가 "6살 아이에게 달 착륙에 대해 몇 문장으로 설명해 주세요"라고 요청했을 때 GPT-3는 중력과 상대성 이론에 관한 비슷한 요청으로 이어 썼지만, 명령어 튜닝을 거친 InstructGPT는 설명을 작성했습니다. Google 연구진은 2021년 FLAN 논문에서 이 방법을 소개했습니다. 이 논문에서는 파라미터 1,370억 개 모델을 명령어 형식으로 바꾼 60개 이상의 자연어 처리(NLP) 데이터셋으로 튜닝했습니다. 튜닝된 모델은 한 번도 접하지 않은 25개 작업 중 20개에서 파라미터 1,750억 개의 GPT-3보다 제로샷 성능이 뛰어났습니다. 챗 모델 파이프라인에서는 보통 같은 단계를 지도 미세 조정(SFT)이라고 부르며, 두 용어는 동의어로 사용됩니다.
지시 튜닝의 작동 방식#
각 예제는 명령어가 끝나고 응답이 시작되는 위치를 표시하는 템플릿으로 형식을 지정합니다. 예를 들면 현재 모델의 채팅 템플릿이나 Stanford의 Alpaca에서 사용하는 "### Instruction" 및 "### Response" 헤더가 있습니다. 학습에는 사전 학습과 동일한 다음 토큰 손실 함수를 사용하지만 응답 토큰만 손실 계산에 포함되므로, 모델은 명령어 자체를 예측하는 대신 답변을 생성하도록 학습됩니다. OpenAI의 GPT-2를 사용한 학습 예제 하나는 다음과 같습니다:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("gpt2")
model = AutoModelForCausalLM.from_pretrained("gpt2")
optimizer = torch.optim.AdamW(model.parameters(), lr=5e-5)
# One instruction-response pair in the Alpaca prompt format
prompt_ids = tokenizer("### Instruction:\nName three animals that can fly.\n\n### Response:\n").input_ids
response_ids = tokenizer("Bats, eagles, and bees." + tokenizer.eos_token).input_ids
input_ids = torch.tensor([prompt_ids + response_ids])
# Label -100 drops the instruction from the loss, so the model learns only to respond
labels = torch.tensor([[-100] * len(prompt_ids) + response_ids])
for step in range(3):
loss = model(input_ids=input_ids, labels=labels).loss
loss.backward()
optimizer.step()
optimizer.zero_grad()
print(f"step {step}: loss {loss.item():.2f}")응답 토큰 10개만 손실 계산에 포함되며, 이 단일 예제에서 세 번 업데이트한 결과 손실은 4.45에서 1.49로 감소했습니다. 명령어 튜닝에서는 수천 개에서 수백만 개에 이르는 다양한 명령어-응답 쌍에 동일한 업데이트를 적용하므로, 모델은 하나의 답변이 아니라 전반적으로 답변하는 습관을 학습합니다.
명령어 튜닝은 일반적으로 사후 학습의 첫 번째 단계이며, 데이터는 여러 출처에서 가져올 수 있습니다:
명령어 데이터셋#
Google의 Flan 컬렉션은 2022년에 1,836개 작업으로 확대되었으며, 이 컬렉션으로 명령어 튜닝한 결과 파라미터 5,400억 개의 PaLM 성능이 평균 9.4% 향상되었습니다. OpenAI의 InstructGPT는 레이블러가 작성한 시연 데이터를 인간 피드백 기반 강화 학습(RLHF)과 결합했으며, 사람들은 파라미터 1,300억 개의 모델보다 파라미터 13억 개 모델의 출력을 더 선호했습니다. 2023년 3월 공개된 Stanford의 Alpaca는 OpenAI 모델이 Self-Instruct 방법으로 생성한 52,000개 예제를 사용해 Meta의 LLaMA 7B를 600달러 미만의 비용으로 미세 조정했습니다. 이는 명령어 데이터의 출처로 합성 데이터를 활용한 초기 사례입니다. Meta의 LIMA는 소규모 데이터셋의 효과를 보여주었습니다. 파라미터 650억 개의 LLaMA를 엄선한 예제 1,000개만으로 튜닝한 결과, 저자들은 모델이 사전 학습 중에 지식 대부분을 습득하고 명령어 튜닝은 답변 형식과 문체를 학습시킨다고 결론 내렸습니다. 이후 직접 선호도 최적화(DPO)와 같은 방법으로 선호도 데이터를 사용해 튜닝된 모델을 개선합니다.
시각 명령어 튜닝#
비전-언어 모델(VLM)도 이미지에 관한 명령을 따르는 방법을 학습합니다. 2023년 4월 발표된 LLaVA는 텍스트 전용 GPT-4에 COCO 이미지의 캡션과 바운딩 박스를 제공해 이미지에 관한 대화, 상세 설명, 복잡한 추론 예제 158,000개를 작성하게 했습니다. 그런 다음 이 데이터를 사용해 CLIP 이미지 인코더와 언어 모델을 연결한 모델을 튜닝했습니다. 이 방법을 시각 명령어 튜닝이라고 합니다. 명령어 튜닝된 VLM은 사진에 관한 자유 형식 요청에 답합니다. Ultralytics Platform Agents의 LLM 블록도 이 기능을 활용합니다. 이미지를 상위 단계의 YOLO26 결과 및 텍스트 프롬프트와 함께 선택된 비전-언어 모델로 전송합니다.
명령어 튜닝과 관련 용어 비교#
프롬프트 튜닝은 몇 개의 소프트 프롬프트 벡터를 학습하고 모델은 고정된 상태로 두며, 프롬프트 엔지니어링은 입력 텍스트만 변경합니다. 반면 명령어 튜닝은 모델 가중치를 업데이트합니다. 도메인 미세 조정은 의료나 법률과 같은 분야에 맞춰 모델을 적응시키지만, 반드시 요청을 따르도록 학습시키는 것은 아닙니다. 명령어 튜닝은 매개변수 효율 미세 조정(PEFT) 방식으로도 수행할 수 있습니다. QLoRA는 4비트 양자화 모델에서 LoRA 어댑터를 학습하며, 연구진은 단일 48 GB GPU에서 파라미터 650억 개의 모델을 명령어 튜닝했습니다.










