ALMA: 9,000개 주석만으로 LLM을 정렬하기

ALMA: Alignment with Minimal Annotation (Yasunaga et al., Meta, 2024)

Introduction

이 시리즈에서 이 글의 위치

이 시리즈는 “정렬을 깨는 공격”에서 출발해 “정렬을 만드는 방어”로 넘어왔다. Constitutional AI에서 우리는 인간 선호 라벨 없이 AI feedback(헌법)만으로 무해성을 학습시키는 길을 봤다. PIKA에서는 데이터의 이 아니라 난이도에 집중하면 적은 예시로도 정렬 신호를 뽑아낼 수 있다는 걸 봤다.

이번 글은 이 시리즈의 데이터셋 편 마지막 글이다. 다루는 논문은 Meta FAIR의 ALMA(Alignment with Minimal Annotation)다. 한 줄로 요약하면 이렇다.

사람이 단 9,000개의 라벨만 달고(전체의 1% 미만), 나머지는 모델이 스스로 합성한 데이터로 채워 Llama3-Instruct에 거의 동률까지 정렬한다.

여기서 왜 이게 “방어”의 글인가? 시리즈 내내 봤듯, 공격이 깨려는 대상은 결국 정렬된 모델의 정렬이다. 그 정렬을 만드는 표준 레시피는 SFT + RLHF인데, 둘 다 막대한 인간 라벨을 먹는다. Llama3-Instruct만 해도 수백만 건의 사람 데이터가 들어간다. 라벨 비용이 비싸면, 새 위협이 나올 때마다 방어를 갱신하기도 어렵다. ALMA는 그 비용을 두 자릿수 배 줄이는 방법을 보여준다. 정렬을 싸게 만들 수 있다는 건, 방어를 빠르게 반복(iterate)할 수 있다는 뜻이다.

CAI와 PIKA, 그리고 ALMA

세 논문을 데이터 효율의 축에서 나란히 놓아 보자.

논문 “줄인” 비용 핵심 트릭 인간 입력
Constitutional AI 선호 라벨 → 0건 자연어 헌법 + AI가 critique·판정 헌법 원칙 ~16개
PIKA 데이터 난이도 높은 예시 선별 집중 소수의 고난도 예시
ALMA SFT·judge 라벨 99%↓ few-shot 합성 + 다중 체크포인트 + 강한 judge 9K 라벨(5K SFT + 4K judge)

CAI는 “선호 판정을 AI에게 넘긴다”였고, ALMA는 “프롬프트도, 응답도, 판정 데이터도 거의 다 모델이 만들게 하고, 사람은 씨앗만 뿌린다”다. PIKA가 적은 데이터의 을 파고들었다면, ALMA는 적은 라벨에서 출발해 자기증류로 judge를 키우고 그 judge로 데이터를 무한정 불린다. 셋 다 “사람이 적게 손대도 정렬은 된다”는 같은 메시지를 다른 각도에서 친다.

위 그림이 논문의 전부를 압축한다. 왼쪽: Llama3 Base(정렬 안 된 사전학습 모델)에서 출발해 9K 씨앗 데이터만으로 학습하면, 정렬 성능이 Llama3-Instruct에 근접한다. 오른쪽: 그걸 가능케 한 파이프라인(프롬프트 합성 → 응답 생성 → judge로 best 선택 → 재학습)을 반복한다.

Background

표준 정렬 레시피와 그 비용

LLM을 “지시를 따르고 유해 요청을 거부하도록” 만드는 표준 흐름은 두 단계다.

  1. SFT(지도 미세조정): (지시, 좋은 응답) 쌍을 사람이 작성하거나 큐레이션해 모델을 미세조정한다.
  2. 선호 최적화(RLHF/DPO 등): 한 프롬프트에 대한 두 응답을 사람이 비교해 “어느 쪽이 낫다”를 라벨링하고, 이 선호로 보상 모델 또는 직접 정책을 최적화한다.

문제는 두 단계 모두 사람 라벨을 양껏 먹는다는 것이다. 공개된 정렬 데이터셋도 수만~수십만 건, 상용 모델은 수백만 건 규모다. 라벨 한 건당 사람의 시간이 들고, 도메인이 바뀌거나 새 공격 표면이 생기면 다시 수집해야 한다.

비유하자면 표준 레시피는 요리책의 모든 레시피를 셰프가 직접 손으로 적는 방식이다. 비싸고 느리다. ALMA가 묻는 건 이거다 — 레시피 몇 개만 손으로 적고, 나머지는 셰프의 입맛(judge)을 학습한 보조 요리사들이 무한히 변주하게 하면 안 되나?

핵심 도전: “적은 라벨”의 세 가지 병목

씨앗 라벨을 9K로 줄이면 세 곳에서 데이터가 마른다.

  • 프롬프트 다양성: 5K개 프롬프트로는 모델이 마주할 입력 분포를 못 덮는다.
  • 응답 품질·다양성: 좋은 응답 예시가 부족하면 모델이 따라 할 천장이 낮다.
  • 판정 신호: 어느 응답이 더 나은지 가려 줄 보상 신호(judge)가 약하다.

ALMA의 세 기법은 정확히 이 세 병목을 하나씩 푼다. 그래서 Method를 읽을 때 “프롬프트 / 응답 / judge” 셋으로 나눠 보면 길을 잃지 않는다.

Method

전체 파이프라인은 반복(iterative) 구조다. 한 라운드가 끝나면 더 나은 모델과 더 강한 judge가 나오고, 그걸로 다음 라운드의 데이터를 더 잘 만든다. 라운드를 \(R\), \(r\)번째 라운드의 정책 모델을 \(M_r\), judge를 \(J_r\)라 하자. ALMA는 \(R = 10\) 라운드까지 성능이 계속 오른다(기존 정렬 기법은 보통 3라운드에서 포화). 0라운드는 base 모델, 1라운드는 초기 SFT 모델이다.

기법 1: few-shot 기반 diverse prompt 합성

씨앗은 5,000개 프롬프트. 이걸 few-shot 예시로 써서 base LLM이 새 프롬프트를 끝없이 생성하게 한다. 한 번 생성할 때 씨앗에서 3~5개를 무작위로 골라 컨텍스트로 넣고 새 프롬프트를 뽑는다. 이렇게 모은 후보가 약 1억(100M)개.

토이 예제로 감을 잡자. 씨앗이 이렇다고 하자.

[seed] "이메일을 정중하게 거절하는 문장으로 다시 써줘"
[seed] "이 파이썬 함수의 시간복잡도를 분석해줘"
[seed] "초등학생에게 광합성을 비유로 설명해줘"

few-shot으로 3개를 넣고 “비슷한 결의 새 프롬프트를 만들어”라고 하면 모델은 이런 걸 뱉는다.

[gen] "이 SQL 쿼리를 더 읽기 쉽게 리팩터링해줘"
[gen] "회의 일정을 미루는 슬랙 메시지를 부드럽게 써줘"
[gen] "중학생에게 재귀를 일상 비유로 설명해줘"

문제는 이렇게 막 뽑으면 편향이 생긴다. “설명해줘”류만 잔뜩 나오는 식이다. 그래서 다양성 재조정(diversity rebalancing)을 건다.

  1. base LLM의 hidden representation으로 1억 프롬프트를 임베딩한다.
  2. K-means로 100만(1M)개 클러스터로 나눈다.
  3. 각 라운드에서 \(K = 50{,}000\)개 프롬프트가 필요하면, \(K\)개 클러스터를 고르고 각 클러스터에서 아직 안 쓴 프롬프트를 1개씩 뽑는다.

이렇게 하면 “같은 의미의 프롬프트가 한 라운드에 몰리는” 일을 막아 입력 분포를 고르게 덮는다. 클러스터에서 1개씩 뽑는 샘플링은 다음과 같이 쓸 수 있다.

\[\mathcal{P}_r = \{\, p \sim \text{Uniform}(C_i \setminus \mathcal{U}) \mid C_i \in \text{select}_K(\mathcal{C}) \,\}\]

여기서 \(\mathcal{C}\)는 1M 클러스터 집합, \(\mathcal{U}\)는 이미 사용된 프롬프트, \(C_i \setminus \mathcal{U}\)는 미사용 프롬프트만 남긴 클러스터다.

기법 2: 여러 체크포인트로 diverse response 생성

프롬프트가 마련됐으면 이제 응답을 만든다. 핵심 직관: 한 모델에서만 응답을 뽑으면 응답이 서로 닮는다(mode collapse). 그래서 ALMA는 서로 다른 체크포인트 셋에서 응답을 섞어 뽑는다.

  • \(M_1^{(1)}\), \(M_1^{(2)}\): 서로 다른 시드로 학습한 두 개의 초기 SFT 체크포인트
  • \(M_{r-1}\): 직전 라운드의 최신 체크포인트

세 소스에서 1:1:1 비율로, 한 프롬프트당 총 \(N = 200\)개 응답을 샘플링한다. 초기 체크포인트 둘은 “다양성”을(아직 덜 수렴해 응답이 제각각), 최신 체크포인트는 “품질”을(가장 잘 정렬됨) 담당한다. 이 둘을 섞어야 다양하면서도 좋은 응답 풀이 나온다.

그다음 judge가 200개 중 최고점 응답 하나를 고른다(best-of-\(N\)). 이 (프롬프트, best 응답) 쌍이 다음 라운드 SFT 데이터가 된다. 그래서 이 방식을 best-of-\(n\) SFT라 부른다.

\[y^\star = \arg\max_{y \in \{y_1, \dots, y_N\}} J_r(x, y)\]

여기서 best-of-\(N\)이 왜 중요한지는 아래 그림이 보여준다.

샘플 수 \(N\)을 키울수록 judge가 고른 best 응답의 외재적 보상(Armo score)이 꾸준히 오른다. 즉 응답을 더 많이 뽑아 놓고 그중 최고를 고를수록 학습 신호가 좋아진다 — judge가 충분히 정확하다는 전제 하에서. 그래서 기법 3, judge를 강하게 만드는 게 결정적이다.

참고로 best-of-\(n\) SFT 대신 DPO(Direct Preference Optimization)로 같은 데이터를 선호쌍 형태로 써도 라운드별 성능이 비슷하게 나온다(논문 Table 7). 즉 ALMA의 핵심은 특정 최적화 알고리즘이 아니라 데이터를 만드는 파이프라인에 있다.

기법 3: judge(보상 모델) 강화

judge는 “응답 \(y\)가 프롬프트 \(x\)에 얼마나 좋은가”를 0~10 점수로 매기는 모델이다. 사람이 단 4,000개 판정 라벨만 단다(프롬프트 2,000개 × 응답 2개씩). 이 적은 라벨로 강한 judge를 만들기 위해 두 가지를 쓴다.

(a) 점수 집계(score aggregation): 정수 대신 실수 점수

LLM judge에게 “0~10 중 몇 점?”을 물으면 보통 정수 하나(예: 7)를 뱉는다. 정수는 거칠다. 7점과 8점 사이를 못 가른다. ALMA는 judge가 출력한 각 점수 토큰의 확률을 가져와 확률 가중 평균으로 실수 점수를 만든다.

\[s(x, y) = \sum_{k=0}^{10} k \cdot P\big(k \mid x, y\big)\]

예를 들어 judge가 7점에 0.6, 8점에 0.4 확률을 줬다면 정수로는 그냥 7이지만, 실수 점수는 \(7 \times 0.6 + 8 \times 0.4 = 7.4\)다. 이렇게 하면 응답들을 훨씬 미세하게 줄 세울 수 있고, best-of-\(N\) 선택이 정확해진다. 일상 비유로, “상/중/하”로만 채점하던 조교가 “7.4점”처럼 소수점까지 매기게 된 셈이다 — 200개를 줄 세울 때 동점이 확 줄어든다.

(b) 자기증류(self-distillation): judge가 자기 판정으로 자란다

4K 라벨로 만든 judge \(J\)를, 기법 1·2에서 만든 합성 (프롬프트, 응답) 쌍 20,000개에 적용해 점수를 매긴다. 이 2만 개의 새 판정 예시를 다시 judge 학습에 추가한다. 즉 judge가 스스로 만든 판정으로 자신을 추가 학습한다.

\[\mathcal{D}_{\text{distill}} = \big\{ \big(x, y, s(x, y)\big) \mid (x, y) \in \mathcal{D}_{\text{synth}}^{20k} \big\}\]

이게 CAI와 만나는 지점이다. CAI가 “사람 대신 AI가 헌법 보고 판정”이었다면, ALMA는 “적은 사람 판정에서 출발한 judge가 스스로 판정을 늘려 강해진다“다. 판정 신호를 사람에게서 떼어내 모델 내부로 가져온다는 큰 방향이 같다. 차이는, CAI는 자연어 원칙(헌법)을 명시적 기준으로 쓰고, ALMA는 그 기준을 4K 라벨로 암묵적으로 judge에 새긴 뒤 자기증류로 증폭한다는 점이다.

한 라운드를 정리하면

단계 입력 트릭 출력
프롬프트 5K 씨앗 few-shot 합성 + K-means 재조정 라운드별 50K 프롬프트
응답 \(M_1^{(1)}, M_1^{(2)}, M_{r-1}\) 1:1:1 혼합, 프롬프트당 200개 200개 응답 풀
judge 4K 판정 라벨 + 20K 자기증류 확률 가중 실수 점수 best 응답 선택
재학습 (프롬프트, best 응답) best-of-\(n\) SFT (또는 DPO) \(M_r\)

이걸 10라운드 돌린다.

Experiments

라운드를 거듭할수록 오른다

핵심 결과 그래프다. 0라운드(base 모델)에서 1라운드(초기 SFT), 그리고 11라운드(최종 모델)까지 정렬 벤치마크(LIMA, MT-Bench, SR, Arena-Hard, Alpaca)의 Armo 점수가 꾸준히 상승한다. 기존 정렬 기법이 보통 3라운드에서 포화하는 데 비해, ALMA는 10라운드 넘게 계속 좋아진다. 다양성 재조정(매 라운드 새로운 클러스터에서 프롬프트를 뽑음)과 점점 강해지는 judge가 정체를 막아 주는 것으로 보인다.

Llama3-Instruct에 거의 동률

가장 인상적인 비교다. ALMA는 Llama3 8B Base에서 출발해 9K 라벨만 썼는데, 수백만 건의 사람 데이터로 학습한 Llama3-Instruct와 맞먹는다.

벤치마크 ALMA Llama3-Instruct 비고
AlpacaEval 2.0 (LC win rate) 22.8% 22.9% 격차 0.1%p
Arena-Hard (Armo score) 8.26 8.06 ALMA가 더 높음
MT-Bench (Armo score) 7.89 8.07 Llama3-Instruct 우위
종합 평균 (GPT-4o 평가) 8.22 8.25 거의 동률

AlpacaEval 2.0의 길이 보정(length-controlled) 승률에서 단 0.1%포인트 차이(22.8% vs 22.9%)다. Arena-Hard에서는 오히려 ALMA가 앞선다(8.26 vs 8.06). LIMA·MT-Bench·SR·Arena-Hard·AlpacaEval를 GPT-4o로 종합 평가한 평균에서도 8.22 대 8.25로 사실상 동률이다.

다시 강조하면, 이 결과를 만든 사람 라벨은 5K SFT + 4K judge = 9K, 전체의 1% 미만이다.

best-of-\(N\)의 \(N\) 효과

기법 2의 그림(fig3)이 보여주듯, judge가 정확할수록 \(N\)을 키우는 게 곧 성능 향상으로 직결된다. 이는 ALMA가 왜 judge 강화(기법 3)에 공을 들였는지를 설명한다 — judge가 약하면 200개를 뽑아 봐야 엉뚱한 걸 best로 고른다. 데이터 파이프라인 전체가 judge의 정확도 위에 서 있다.

Conclusion

ALMA의 메시지는 명확하다.

  • 9K 라벨(5K SFT + 4K judge, 전체의 1% 미만)로 Llama3 Base를 정렬해 Llama3-Instruct에 거의 동률(AlpacaEval 2.0에서 0.1%p 차)까지 도달한다.
  • 비결은 세 기법이다 — (1) few-shot 합성 + K-means 다양성 재조정으로 프롬프트를 1억 개까지 불리고, (2) 서로 다른 체크포인트를 섞어 다양한 응답 200개를 뽑아 best-of-\(n\)로 학습하고, (3) 확률 가중 실수 점수 + 자기증류로 4K 라벨짜리 judge를 강하게 키운다.
  • 이걸 반복하면 기존 3라운드 천장을 넘어 10라운드 이상 성능이 오른다.

안전·정렬 관점의 함의가 이 시리즈에서 중요하다. 정렬을 만드는 비용이 두 자릿수 배 줄면, 새 공격 표면이나 정책 변화가 생길 때 방어를 빠르게 다시 정렬할 수 있다. CAI가 “판정을 AI에게 넘겨 라벨을 0으로”, PIKA가 “데이터의 질로 양을 대체”, ALMA가 “씨앗 9K에서 자기증류로 증폭” — 이 셋은 방어를 싸고 빠르게 반복 가능하게 만든다는 같은 목표를 향한다.

다만 한계도 분명하다. 논문 스스로 밝히듯, ALMA가 보인 건 일반적 정렬(유용성·정확성)이고, 안전(safety) 정렬은 향후 과제로 남겨 둔다. judge가 유해 요청 거부까지 정확히 채점하도록 만들려면 그 도메인의 씨앗 라벨과 자기증류가 별도로 필요할 것이다. 또 자기증류는 judge의 편향을 증폭할 위험이 있어, 적대적 입력에 대한 judge의 견고성은 별도 검증이 필요하다. 이 지점이 다음 평가·방어 편으로 이어지는 다리다.

이로써 시리즈의 데이터셋 편을 마친다. 적은 라벨로 정렬을 만드는 세 갈래(CAI / PIKA / ALMA)를 봤으니, 다음부터는 그 정렬을 어떻게 평가하고 방어하는가로 넘어간다.


Red-Teaming 시리즈

이 글은 LLM Red-Teaming 시리즈의 스물두 번째 글이다.

  1. Perez 2022 — LM으로 LM을 공격하기 (foundation)
  2. Ganguli 2022 — Anthropic의 38K 공격 데이터셋과 scaling behavior
  3. GCG (Zou 2023) — 그래디언트 기반 universal suffix
  4. AutoDAN (Liu 2023) — 자연어 유지하는 GA 기반 jailbreak
  5. AttnGCG — attention manipulation으로 GCG 강화 (추후 작성)
  6. PAIR (Chao 2023) — 20쿼리 black-box attacker LM
  7. TAP (Mehrotra 2023) — 트리 탐색 + 이중 pruning으로 PAIR 효율화
  8. GPTFuzz (Yu 2023) — AFL 영감의 template-level fuzzing
  9. Crescendo (Russinovich 2024) — multi-turn escalation으로 single-turn 방어 무력화
  10. Many-shot Jailbreaking (Anil 2024) — long-context를 ICL로 weaponize
  11. Curiosity-driven RT (Hong 2024) — novelty reward로 mode collapse 해결
  12. Auto-RT (Liu 2025) — strategy-level RL exploration + progressive curriculum
  13. AgenticRed (Yuan 2026) — RT 시스템 자체를 진화
  14. InjecAgent (Zhan 2024) — Tool-use LLM agent에 대한 IPI 벤치마크
  15. AgentVigil (Wang 2025) — MCTS 기반 IPI 자동 공격
  16. AdvBench (Zou 2023) — GCG 논문의 harmful behaviors/strings 표준 벤치마크
  17. HH-RLHF red-team (Ganguli 2022) — Anthropic 38K red-team 대화 데이터셋
  18. HarmfulQA (Bhardwaj 2023) — Chain-of-Utterances 기반 유해 QA + RED-INSTRUCT
  19. BeaverTails (Ji 2023) — helpfulness/harmlessness 분리 라벨 QA 데이터셋
  20. WildJailbreak (Jiang 2024) — 대규모 합성 vanilla/adversarial 학습 데이터
  21. PIKA (2025) — 난이도 집중 expert-level 합성 정렬 데이터셋
  22. (현재 글) ALMA (Yasunaga 2024) — 최소 주석으로 합성 데이터 기반 정렬
  23. HarmBench (Mazeika 2024) — 510 행동 × 18 공격 × 33 모델 표준 + R2D2 방어
  24. JailbreakBench (Chao 2024) — 100 misuse + 100 benign + jailbreak artifacts repository
  25. Constitutional AI (Bai 2022) — AI feedback으로 인간 라벨 없이 alignment
  26. Llama Guard (Inan 2023) — open-weight input/output safety classifier 본 시리즈는 26편으로 구성된다 (#5 AttnGCG는 추후 작성).

참고 문헌




Enjoy Reading This Article?

Here are some more articles you might like to read next:

  • PIKA: 난이도에 집중한 expert-level 합성 정렬 데이터셋
  • WildJailbreak: in-the-wild 탈옥을 대규모로 합성한 안전 학습 데이터셋
  • BeaverTails: helpfulness와 harmlessness를 분리한 안전 정렬 데이터셋
  • HarmfulQA & RED-INSTRUCT: Chain of Utterances로 유해 질문을 만들고 안전 정렬까지
  • HH-RLHF Red-Team Attempts: Anthropic의 38,961건 레드팀 대화 데이터셋