개요

15편에서 모델을 키웠더니 창발성이 나타났다는 데까지 왔다. GPT-3가 그 출발점이었다.

그런데 여기에 함정이 하나 있다. GPT-3는 다음 토큰 예측으로만 학습된 모델이다. 그 말은 곧,

인터넷 글을 그럴듯하게 이어 쓰는 것이 이 모델이 배운 전부라는 뜻이다.

“이 문장을 번역해줘”라고 부탁했을 때 번역해주는 것그 문장 뒤에 올 법한 글을 이어 쓰는 것은 전혀 다른 일이다. 이번 글은 그 간극을 메우는 이야기다.

교육 자료는 대외비라 슬라이드 이미지나 예제 데이터는 싣지 않는다. 개념 흐름만 내가 이해한 방식으로 재구성했고, 그림은 전부 생성했다.


1. GPT-3 — 거대 언어 모델의 시초

먼저 규모부터 보자.

항목 GPT-3
파라미터 수 1,750억 개 (175B)
학습 방법 다음 토큰 예측
학습 데이터 3,000억 토큰 (약 4TB 텍스트)
학습 비용 약 150억 원으로 추산

이전 언어 모델들과 비교하면 최소 10배 이상 컸다. GPT-2가 1.5B, T5가 11B 수준이었으니 자릿수가 다르다.

학습 데이터 구성도 눈여겨볼 만하다.

데이터 비중
Common Crawl (필터링됨) 60%
WebText2 22%
Books1 / Books2 각 8%
Wikipedia 3%

인터넷 + 양질의 텍스트북이다. 인터넷만 긁으면 품질이 들쭉날쭉하니 좋은 글을 섞어 넣었다.


2. 다음 토큰 예측만으로는 부족했다

GPT-3에게 이렇게 물어봤다고 하자.

Explain the moon landing to a 6 year old in a few sentences.
(달 착륙을 6살 아이에게 몇 문장으로 설명해줘)

GPT-3의 답은 이랬다.

Explain the theory of gravity to a 6 year old.
Explain the theory of relativity to a 6 year old in a few sentences.
Explain the big bang theory to a 6 year old.
Explain evolution to a 6 year old.

설명을 안 한다. 비슷한 문장을 계속 나열한다.

모델 입장에서는 아무 잘못이 없다. 인터넷에는 이런 목록 형태의 글이 널려 있고, “Explain X to a 6 year old”라는 문장 뒤에는 비슷한 문장이 이어질 확률이 높다. 모델은 배운 대로 정확하게 행동했다.

문제는 모델이 못한 게 아니다. 우리가 원하는 것과 모델이 배운 것이 달랐던 것이다.

여기에 더해 위험한 문제도 있었다. 유해한 요청에 그대로 응하는 경우다. 안전 장치가 없으니 물어보면 알려준다.


3. 정렬(Alignment) — 두 갈래로 나뉜다

이 간극을 메우는 작업을 정렬(Alignment) 이라고 부른다.

정렬 = 거대 언어 모델의 출력이 사용자의 의도와 가치를 반영하도록 만드는 것

정렬의 두 갈래

정렬은 크게 두 단계로 나뉜다.

단계 가르치는 것
(1) 지시 학습 (Instruction Tuning) 주어진 지시에 어떤 응답이 생성되어야 하는지
(2) 선호 학습 (Preference Learning) 상대적으로 어떤 응답이 더 선호되는지

순서가 중요하다. 먼저 말귀를 알아듣게 만들고, 그 다음에 더 좋은 답을 고르게 만든다.

신입 사원 교육과 같다. 먼저 “이런 요청이 오면 이렇게 처리한다” 를 가르치고(지시 학습), 그 다음 “같은 처리라도 이런 방식이 더 낫다” 를 피드백으로 알려준다(선호 학습).


4. 지시 학습 (Instruction Tuning)

기존 방식의 문제

학습 방법 자체는 새로울 게 없다. 기존 언어 모델(BERT 등)에서 하던 지도 추가 학습(Supervised Fine-Tuning, SFT) 과 동일하다.

문제는 기존 방식의 결과물이었다.

[입력] "전체적으로, 두 시간 동안 영화를 보는 것에서
        얻은 가치는 팝콘과 음료의 합계였습니다.
        영화는 정말 끔찍했습니다."
                    ↓
        [감정 분석용으로 파인튜닝된 BERT]
                    ↓
[출력] 0 (부정적)

이 모델은 감정 분석만 할 줄 안다. 번역을 시키려면 번역용 모델을 또 만들어 또 저장해야 한다.

발상의 전환

여기서 나온 아이디어가 이거다.

모든 자연어 작업은 “텍스트 지시 + 응답”으로 표현할 수 있지 않을까?

작업 지시로 바꾸면
감정 분석 “주어진 리뷰 속 유저의 감정이 긍정적이야, 부정적이야?”
번역 “주어진 문장을 영어로 번역해줘.”
요약 “이 글을 세 문장으로 요약해줘.”

이렇게 바꾸면 출력도 그냥 텍스트가 된다.

[지시] 주어진 리뷰 속 유저의 감정이 긍정적이야, 부정적이야?
[리뷰] 전체적으로, 두 시간 동안 영화를 보는 것에서
       얻은 가치는 팝콘과 음료의 합계였습니다. ...
                    ↓
              [언어 모델]
                    ↓
[출력] "부정적으로 보입니다."

하나의 모델이 모든 작업을 처리한다. 작업마다 모델을 따로 저장할 필요가 없다.

FLAN — 실제로 해봤더니

구글이 이 아이디어를 실험한 것이 FLAN이다. 세 방식을 비교하면 이렇게 된다.

방식 하는 일 결과
(A) Pretrain–finetune (BERT, T5) 작업 A용 데이터로 파인튜닝 작업 A 전용 모델 하나
(B) Prompting (GPT-3) 프롬프트만 잘 쓴다 모델은 그대로
(C) Instruction tuning (FLAN) 여러 작업의 지시 데이터로 파인튜닝 처음 보는 작업도 수행

핵심은 (C)의 마지막 칸이다. 학습할 때 본 적 없는 작업에 대해서도 잘 동작한다.

어떻게 학습 데이터를 만들었나

기존 NLP 데이터셋을 지시 형태로 바꿔서 썼다. 자연어 추론, 상식 추론, 감정 분석, 요약, 번역 등 60여 개 데이터셋을 12개 묶음으로 정리했다.

여기서 다양성을 위한 요령이 하나 들어간다. 같은 작업도 여러 가지 지시 문구(템플릿)로 표현했다.

Template 1: "위 문단을 보고 <가설>이라고 결론지을 수 있나요?"
Template 2: "다음을 추론할 수 있나요? <가설>"
Template 3: "다음을 읽고 가설이 전제로부터 추론 가능한지 판단하세요."

같은 내용을 사람마다 다르게 물어보기 때문이다. 한 가지 말투만 배우면 다른 말투에 약해진다.

그리고 일반화 성능을 재기 위해 일부러 몇 개 묶음을 빼놓았다. 예를 들어 요약 작업은 학습에서 제외하고, 평가할 때만 꺼내 썼다. 학습 때 본 적 없는 작업을 얼마나 해내는지 봐야 하기 때문이다.

이게 12편·13편에서 계속 나온 원칙과 같다. 시험 문제를 미리 보여주고 시험을 치면 안 된다.

결과에서 나온 세 가지 교훈

FLAN 실험이 알려준 것은 크게 셋이다.

요소 발견
학습 작업의 개수 다양한 종류를 학습할수록 처음 보는 지시에 대한 성능이 좋아진다
모델의 크기 특정 규모 이하에서는 지시 학습의 효과가 오히려 떨어진다
지시를 주는 방법 자연어로 사람에게 말하듯 지시하는 것이 가장 효과적

두 번째가 특히 재밌다. 작은 모델(0.4B, 2B)은 지시 학습을 해도 성능이 별로 안 오르거나 오히려 떨어졌다. 8B을 넘어서면서부터 확 오른다.

지시를 이해하고 응답하는 것 자체가 창발성의 하나라는 뜻이다.

세 번째도 실무적으로 유용하다. 같은 작업을 시켜도 데이터셋 이름을 적어주는 것보다 자연어 지시를 주는 것이 성능이 높았다.


5. 선호 학습 (Preference Learning)

지시 학습의 한계

지시 학습은 “주어진 입력에 대해 적절한 응답이 하나 있다” 고 가정한다.

정답이 정해진 작업에서는 자연스럽다.

Question: 양의 정수 m과 n의 최대공약수는 6이고,
          최소공배수는 126이다. m + n의 최솟값은?
Answer: 60

수학 문제에 정답은 하나다.

그런데 정답이 정해져 있지 않은 개방형(Open-ended) 작업은 다르다. 번역, 글쓰기, 요약이 그렇다.

같은 영어 가사를 번역해도 여러 결과가 나올 수 있고, 그중에 더 자연스러운 번역이 있다.

목표는 단순히 여러 정답을 허용하는 게 아니다. 더 좋은(사람이 더 선호하는) 응답을 생성하도록 만드는 것이다.

선호 학습의 아이디어

선호 학습 = 다양한 응답 중 사람이 더 선호하는 응답을 생성하도록 추가 학습

여기서 역할 분담이 절묘하다.

누가 무엇을
모델 다양한 응답 후보를 생성한다
사람 후보들 사이의 선호 순위를 매긴다

사람이 답을 처음부터 쓰는 게 아니다. 모델이 A·B·C·D를 만들어오면 사람은 D > C > A = B 라고 줄만 세운다.

0에서부터 글을 쓰는 것보다 주어진 네 개 중에 고르는 것이 훨씬 빠르고 일관성 있다. 사람의 노동을 생성에서 판단으로 옮긴 게 핵심이다.

그리고 이것이 ChatGPT를 만들기 위한 핵심 알고리즘이었다. OpenAI 공식 블로그에도 이렇게 적혀 있다.

“We trained this model using Reinforcement Learning from Human Feedback (RLHF), using the same methods as InstructGPT…”


6. InstructGPT의 3단계

RLHF(Reinforcement Learning from Human Feedback, 사람의 피드백을 통한 강화학습) 가 그 방법이다. 여기서 “사람의 피드백”이란 곧 응답에 대한 선호도를 뜻한다.

RLHF 3단계

Step 1. 지시 학습

실제 사용자들로부터 다양한 지시 입력을 모으고, 훈련된 사람 주석자가 정답 데이터를 작성한다. 이걸로 GPT-3를 지도 학습한다.

여기까지는 앞에서 본 지시 학습 그대로다.

Step 2. 보상 모델 학습

이제 보상 모델(Reward Model, RM) 이라는 두 번째 모델을 만든다.

1. Step 1의 모델이 한 질문에 여러 응답(A, B, C, D)을 만든다
2. 사람이 순위를 매긴다:  D > C > A = B
3. 보상 모델을 학습시킨다
   - 사람이 선호하는 응답이 들어오면 → 높은 점수 출력
   - 사람이 싫어하는 응답이 들어오면 → 낮은 점수 출력

동작하는 모습은 이렇다.

[질문 + 응답 A "중력 이론을 설명하면..."] → RM → "Reward: -5"
[질문 + 응답 D "사람들이 달에 갔고..."]   → RM → "Reward: 100"

보상 모델은 사람의 취향을 흉내 내는 모델이다. 사람 대신 채점해주는 조교를 하나 만들어 두는 셈이다.

Step 3. 강화 학습

이제 사람 없이 학습을 돌릴 수 있다.

1. 새로운 질문을 뽑는다 ("개구리 이야기를 써줘")
2. 모델이 응답을 만든다
3. 보상 모델이 점수를 매긴다
4. 점수가 높아지도록 모델을 갱신한다 (PPO)
5. 1번으로 돌아간다

여기가 이 방법론의 핵심이다.

Step 1·2에서 보지 못한 질문에 대해서도, 사람의 추가 개입 없이 학습이 계속 진행된다.

사람이 매번 채점해야 했다면 규모가 나오지 않는다. 조교(보상 모델)를 한 번 만들어두면 무한히 반복할 수 있다.

이 3단계는 시험 공부에 비유하면 이렇다.

  1. 기출 문제와 모범 답안을 보고 공부한다 (지시 학습)
  2. 채점 기준표를 익힌 조교를 만든다 (보상 모델)
  3. 새 문제를 계속 풀고 조교에게 채점받으며 실력을 올린다 (강화 학습)

3단계에서 선생님은 이미 자리에 없다.


7. 결과 — 실제로 좋아졌나

지시 수행 능력

실제 사용자가 1~7점으로 평가한 결과다.

방식 점수 경향
GPT (그냥) 가장 낮음
GPT (프롬프팅) 조금 나음
지시 학습(SFT)만 그보다 나음
InstructGPT (선호 학습까지) 가장 높음

그리고 모델 크기가 커질수록(1.5B → 6B → 175B) 같은 방법에서도 지시 수행 능력이 꾸준히 향상됐다.

여기서 놀라운 사실이 하나 있다. 1.3B짜리 InstructGPT가 175B짜리 GPT-3보다 사람 평가에서 더 좋았다. 크기를 100배 키운 것보다 정렬을 제대로 한 게 나았다는 뜻이다.

안전성과 신뢰성

지표 GPT SFT InstructGPT
RealToxicity (유해성, 낮을수록 좋음) 0.233 0.199 0.196
TruthfulQA (진실성, 높을수록 좋음) 0.224 0.206 0.413
Hallucinations (환각, 낮을수록 좋음) 0.414 0.078 0.172

유해한 응답과 거짓말이 눈에 띄게 줄었다. 특히 TruthfulQA는 두 배 가까이 올랐다.

다만 환각(Hallucination) 항목은 SFT만 한 쪽이 더 낮다. 모든 지표가 한 방향으로 좋아지지는 않는다. 이런 부분을 그냥 넘기지 않고 보는 게 중요하다.

개방형 모델에서도

Meta의 LLaMA 2도 비슷한 길을 갔다.

  공개한 것
LLaMA 1 사전 학습된 모델만
LLaMA 2 RLHF + 대화 데이터로 학습한 Chat 모델까지

LLaMA 2는 보상 모델을 안전성용(Safety)유용성용(Helpful) 둘로 나눠서 썼다. 안전한 답과 도움이 되는 답이 늘 같지는 않기 때문이다.

결과적으로 당시 대화형 개방형 모델 중 가장 좋은 성능을 냈다. 7B 모델이 MPT-7B를 상대로 승률 61.1%, 34B 모델이 Falcon-40B를 상대로 76.3%였다.


정리

  • GPT-3 = 175B 파라미터, 3,000억 토큰, 학습 비용 약 150억 원. 거대 언어 모델의 시초
  • 다음 토큰 예측만으로 학습한 모델은 지시를 따르지 않는다. 그럴듯하게 이어 쓸 뿐
    • 모델이 틀린 게 아니라 우리가 원하는 것과 모델이 배운 것이 달랐다
  • 정렬(Alignment) = 출력을 사용자의 의도·가치에 맞추는 작업. 두 단계
  • 지시 학습 — 모든 작업을 “텍스트 지시 + 응답” 으로 통일한다
    • 하나의 모델이 모든 작업을 처리. 작업별 모델 저장이 불필요
    • 다양한 작업을 학습할수록, 모델이 클수록 효과가 크다
    • 자연어로 사람에게 말하듯 지시하는 것이 가장 잘 통한다
  • 선호 학습 — 정답이 하나가 아닌 작업에서 더 좋은 답을 고르게 만든다
    • 모델이 후보를 만들고, 사람은 순위만 매긴다. 노동을 생성에서 판단으로 옮겼다
  • RLHF 3단계 — 지시 학습 → 보상 모델 학습 → 강화 학습
    • 3단계에서는 사람의 개입이 없다. 그래서 규모가 나온다
  • 결과 — 지시 수행·유해성·진실성 모두 개선. 1.3B InstructGPT > 175B GPT-3
    • 단, 모든 지표가 한 방향으로 좋아지지는 않았다

다음 글에서

학습이 끝난 모델은 이제 말귀를 알아듣는다. 그럼 실제로 답을 만들어낼 때 무슨 일이 일어날까?

다음 글에서는 디코딩 알고리즘프롬프트 엔지니어링 — 같은 모델에서 다른 답이 나오게 하는 두 가지 방법을 다룬다.

참고 자료

한줄 평

  • 사람을 닮은 AI로 사람을 대체하는 건 당연한 일이라 생각했지만, AI 학습과정에서도 사용하는게 정말 웃프게 다가왔다.