모델이 커질수록 파인튜닝 비용이 커진다. 175B 파라미터 GPT-3를 태스크마다 완전히 파인튜닝하면 각각 350GB 모델 사본이 필요하다. 1,000개 태스크면 350TB다.

파라미터 효율적 파인튜닝(PEFT)의 출발점 중 하나가 소프트 프롬프트(soft prompt)다.

Prompt Tuning (2021, Google)

Lester 등이 T5를 대상으로 발표했다. 아이디어는 단순하다.

하드 프롬프트: "텍스트를 긍정/부정으로 분류하세요: {입력}"처럼 사람이 작성한 텍스트.

소프트 프롬프트: 텍스트가 아니라 학습 가능한 임베딩 벡터를 입력 앞에 붙인다. 이 벡터들이 모델에게 “이렇게 동작하라"는 조건 역할을 한다.

일반 입력: [텍스트 토큰들] → 모델 → 출력
Prompt Tuning: [소프트 토큰 k개] + [텍스트 토큰들] → 모델 → 출력

모델 가중치는 전혀 건드리지 않는다. 소프트 토큰 임베딩(k × d 파라미터, 보통 k=100, d=768)만 학습한다.

성능: 모델이 충분히 크면(11B 이상) 전체 파인튜닝과 비슷한 성능이 나온다. 작은 모델에서는 차이가 있다.

# PEFT 라이브러리로 Prompt Tuning 적용
from peft import PromptTuningConfig, get_peft_model, TaskType

config = PromptTuningConfig(
    task_type=TaskType.CAUSAL_LM,
    num_virtual_tokens=20,    # 소프트 프롬프트 토큰 수
    tokenizer_name_or_path="gpt2",
)
model = get_peft_model(base_model, config)
# 학습 가능한 파라미터: 20 × 768 = 15,360 (전체의 0.002%)

Prefix Tuning (2021, Stanford)

Li와 Liang이 GPT-2와 BART를 대상으로 발표했다. Prompt Tuning과 유사하지만 더 깊이 개입한다.

Prompt Tuning은 입력 임베딩 레이어에만 소프트 프롬프트를 추가한다. Prefix Tuning은 모든 트랜스포머 레이어의 Key와 Value에 학습 가능한 접두사를 추가한다.

각 레이어에서:
Attention(Q, [Prefix_K; K], [Prefix_V; V])

일반 K, V에 학습된 Prefix_K, Prefix_V를 앞에 이어붙임

모든 레이어에서 직접 어텐션을 통해 소프트 프롬프트의 영향을 준다. Prompt Tuning보다 영향력이 강해 작은 모델에서도 효과가 있다.

파라미터 수는 레이어 × 접두사 길이 × 히든 크기 × 2(K, V)다. 전체 파라미터의 0.1~1% 수준.

직접 최적화가 불안정해서 원래 논문에서는 소규모 MLP를 통해 Prefix를 생성하고 추론 시에는 MLP를 제거한다.

Prompt Tuning vs Prefix Tuning vs 전체 파인튜닝

방식학습 파라미터소규모 모델저장 공간병합 가능
전체 파인튜닝100%최고모델 전체
Prefix Tuning0.1~1%좋음접두사만불가
Prompt Tuning<0.1%약함극소불가
LoRA0.1~1%좋음작음가능

LoRA(089)가 나오면서 소프트 프롬프트 방식보다 더 많이 쓰이게 됐다. LoRA는 가중치에 직접 개입하므로 작은 모델에서도 성능이 좋고, 파인튜닝된 가중치를 원본과 병합할 수 있어 추론 오버헤드가 없다.

실용적 의미

소프트 프롬프트 방식의 가장 큰 장점은 동일한 베이스 모델을 여러 태스크에 공유한다는 것이다.

동일한 GPT-3 가중치
    + Prefix_번역 → 번역 모델
    + Prefix_분류 → 분류 모델
    + Prefix_요약 → 요약 모델

추론 시 태스크별 접두사만 바꾸면 된다. 서버 한 대에 GPT-3를 한 번만 올려두고 접두사로 태스크를 전환한다. 메모리 효율이 극적으로 좋다.

트레이드오프

소프트 프롬프트는 사람이 해석할 수 없다. 어떤 의미를 학습했는지 알 수 없다. 디버깅이 어렵고 특정 도메인 지식을 명시적으로 주입하기 어렵다. 또한 학습에 사용한 모델 버전에 종속된다. 모델이 업데이트되면 소프트 프롬프트를 재학습해야 한다.