Deep DiveGPT-3 원 논문 arXiv v4·OpenAI GPT-3 연구 artifact 고정 commit·OpenAI GPT-2 공개 기준 구현·Python 3.9 few-shot/likelihood/compute 계산

Language Models are Few-Shot Learners 해부: GPT-3는 예시 몇 개로 왜 일을 바꿔 하는가

Language Models are Few-Shot Learners를 GPT-3의 decoder-only 구조, in-context learning, zero/one/few-shot 평가, 175B 규모·300B 토큰 학습, 데이터 혼입과 프롬프트 운영 한계까지 연결해 읽는다. 예시가 가중치를 바꾸지 않아도 출력을 바꾸는 이유를 작은 계산으로 확인한다.

1단계 두 번째 논문. 이 글은 Brown 외, Language Models are Few-Shot Learners arXiv v4(2020-07-22)를 직접 읽고 썼다. 이 글에서 말하는 GPT-3는 논문의 175B 모델과 당시 평가다. 2026년의 특정 API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스) 모델명·가격·동작을 뜻하지 않는다. OpenAI의 GPT-3 연구 artifact 저장소 commit d7a9bb5와, 논문이 “GPT-2와 같은 구조”라고 한 부분을 대조하기 위한 GPT-2 공개 구현 commit 9b63575도 읽었다.

이 글에서 얻을 답과 범위

이 논문이 바꾼 질문은 “새 작업마다 모델을 다시 학습해야 하나?”다.

기존: 번역 작업용 데이터 수천 장 → fine-tuning(미세조정) → 번역 모델
      요약 작업용 데이터 수천 장 → fine-tuning → 요약 모델

GPT-3 논문: 작업 설명과 예시 몇 개를 prompt(프롬프트, 모델 입력) 안에 넣고
            가중치는 고치지 않은 채 다음 답을 이어 쓰게 하자.

예를 들어 다음처럼 prompt를 만들 수 있다.

영어: cat
한국어: 고양이

영어: dog
한국어: 개

영어: book
한국어:

모델의 다음 토큰 예측기는 위 패턴을 보고 같은 completion(완성문)을 낼 수 있다. 이때 모델 parameter(파라미터, 학습으로 정해진 숫자)는 바뀌지 않는다. 예시가 입력 문맥에 들어가서 이번 요청에서의 다음 토큰 확률만 바꾼다. 이를 ICL(In-Context Learning, 문맥 내 학습)이라고 부른다.

이 글을 다 읽으면 다음 질문에 답할 수 있어야 한다.

  1. zero-shot, one-shot, few-shot, fine-tuning은 입력·가중치·비용이 어떻게 다른가?
  2. ICL은 왜 “학습”이라 불리지만 gradient update(기울기 갱신)를 하지 않는가?
  3. GPT-3 175B(Billion, 10억)는 원 Transformer에서 무엇을 남기고 무엇을 바꾼 decoder-only(디코더 전용) 모델인가?
  4. 예시의 순서·형식·토큰 길이가 왜 평가 점수와 제품 결과를 바꾸는가?
  5. 300B training tokens(학습 토큰), 175B parameter, 2,048 context window(문맥 창)는 비용과 운영에 무엇을 뜻하는가?
  6. 웹 규모 사전학습에서 benchmark contamination(벤치마크 오염)을 왜 성능보다 먼저 확인해야 하는가?

범위: GPT-3 원 논문의 사전학습·few-shot 평가·한계·공개 artifact를 설명한다. GPT-3 가중치와 실제 학습/추론 코드는 이 저장소에 공개돼 있지 않으므로, 비공개 구현을 읽거나 모델을 실행했다고 주장하지 않는다. RAG(Retrieval-Augmented Generation, 검색 증강 생성), LoRA(Low-Rank Adaptation, 저랭크 적응), RLHF(Reinforcement Learning from Human Feedback, 인간 피드백 강화학습)는 이 논문 뒤에 연결될 별도 주제다.

먼저 외울 한 문장

GPT-3는 175B 파라미터의 autoregressive(자기회귀) decoder-only Transformer를 300B 토큰으로 사전학습하고, 새 작업의 예시를 prompt 안에 넣어 가중치 갱신 없이 다음 토큰 예측으로 작업 형식에 맞추게 한 연구다.

왜 필요한가: 새 작업마다 모델을 다시 고치는 병목

12살 비유: 공책을 다시 외우는 학생과 문제지를 읽는 학생

새 단어를 번역하는 일을 시킨다고 하자.

fine-tuning 학생
  “cat→고양이, dog→개”가 든 새 공책을 수천 번 풀고
  기억 자체를 다시 고친 뒤 시험을 본다.

few-shot 학생
  시험지 위의 “cat→고양이, dog→개” 두 줄을 보고
  이번 시험에서만 book의 짝을 이어 쓴다.

전자는 weight(가중치, 모델이 다음 토큰 확률을 정하는 학습 숫자)를 바꾼다. 후자는 weight는 그대로 두고 입력에 들어온 예시를 읽는다. 후자가 항상 더 똑똑하거나 정확한 것은 아니다. 하지만 매 작업마다 대규모 레이블 데이터·학습 GPU(Graphics Processing Unit, 그래픽 처리 장치)·별도 모델 배포가 필요한 비용을 크게 줄일 가능성을 보였다.

논문 확인: GPT-3 논문은 전통적인 task-specific fine-tuning이 보통 수천~수십만 레이블 예시를 필요로 한다고 설명하고, GPT-3은 모든 평가에서 gradient update나 fine-tuning 없이 text interaction(텍스트 입력)만으로 작업과 예시를 제공했다고 명시한다(초록, §1, §2).

“few-shot”은 예시가 적다는 뜻이지, 학습 데이터가 적다는 뜻이 아니다

이 논문에서 few-shot은 추론 시점에 K개 demonstration(시연 예시)을 prompt에 넣는 평가 방식이다. 175B 모델이 그 few examples만 보고 세상 지식을 처음 배운다는 뜻이 아니다. 수천억 토큰 사전학습으로 이미 언어·패턴을 배운 뒤, 이번 prompt가 “어떤 패턴을 꺼내 쓸지” 힌트를 주는 것이다.

이 차이를 놓치면 “예시 3개로 모델을 학습했다”는 오해가 생긴다. 모델이 한 요청에서 적응해 보이는 행동이 진짜 새 알고리즘을 배운 것인지, 사전학습에서 이미 본 패턴을 인식한 것인지는 논문도 열어 둔 질문이다. 논문은 이를 meta-learning(메타 학습, 학습하는 방법을 넓은 작업 분포에서 얻는 관점)이라 부르지만, 새로운 작업을 완전히 처음부터 배운다고 단정하지 않는다.

무엇인가: 네 가지 설정을 한 표로 분리하기

원 논문 Figure 2.1과 §2는 작업별 데이터에 의존하는 정도가 다른 네 설정을 구분한다.

설정prompt에 들어가는 것가중치 갱신논문에서의 핵심 장단점
Fine-tuning(FT, 미세조정)보통 작업 입력만있음. 작업 레이블 데이터로 재학습강한 task 성능 가능 / 데이터·학습·모델 버전 필요
Few-shot(FS, 소수 예시)설명 + K개 입력→정답 + 새 입력없음작업 형식을 예시로 전달 / 2,048 token 예산을 소모
One-shot(1S, 한 예시)설명 + 1개 예시 + 새 입력없음예시 하나로 형식 전달 / 하나의 편향된 예시에 민감
Zero-shot(0S, 예시 없음)자연어 지시 + 새 입력없음가장 간단한 호출 / 형식이 모호하면 어려움

논문은 few-shot의 K를 context window가 허용하는 0부터 최대값까지 두고, 보통 10~100개 예시가 들어간다고 썼다. K가 크다고 항상 좋은 것도 아니다. 개발 set에서 몇 K를 시험해 가장 좋은 값을 고르고 test set에 적용했다(§2.4). 이 선택 자체가 평가 결과에 영향을 주므로 기록하지 않으면 공정 비교가 어렵다.

ICL은 parameter learning이 아니라 activation-level conditioning이다

Transformer가 prompt를 읽으면 각 층은 그 요청의 token representation(활성값, 이번 입력 처리 중 생기는 벡터)을 만든다. few-shot 예시는 뒤의 query token이 attention으로 참조할 수 있는 앞 문맥이 된다.

고정된 parameter θ
          │
prompt = [예시 1][예시 2]...[새 질문]
          │
forward pass(순전파)
          │
Pθ(다음 token | prompt)가 바뀜
          │
θ는 그대로

반대로 fine-tuning은 loss(손실)를 계산하고 backpropagation(역전파)으로 θ ← θ - η∇θL을 바꾼다. η(eta)는 learning rate(학습률), ∇θL은 loss의 가중치별 기울기다. ICL의 “학습”은 input-conditioned behavior(입력 조건부 행동)를 뜻할 뿐, 저장된 모델 기억을 수정하는 업데이트가 아니다.

GPT-3는 GPT-2 계열 decoder-only Transformer다

논문 확인: GPT-3 §2.1은 GPT-2와 같은 model architecture를 쓰고, modified initialization(수정 초기화), pre-normalization(사전 정규화), reversible tokenization(가역 토큰화)을 따르며, attention 층은 dense(전체 연결)와 locally banded sparse(가까운 위치만 보는 띠 모양 희소)를 교대로 쓴다고 밝힌다. 공개된 GPT-3 repo에는 synthetic dataset·overlap 자료·model card는 있지만 training/inference source나 weights는 없다. 따라서 GPT-2 공개 코드를 GPT-3의 정확한 구현이라고 부르면 안 된다.

GPT-3 175B의 논문 Table 2.1 값은 다음이다.

항목GPT-3 175B의미
total parameters175.0B논문 Appendix D에는 실제 집계 174.6B도 제시된다.
layers96decoder block을 96개 쌓는다.
d_model12,288token 표현의 폭이다.
heads96attention 관점 수다.
d_head128head 하나의 폭이다. 96 × 128 = 12,288이다.
FFN(Feed-Forward Network, 피드포워드 네트워크) inner width49,152논문 규칙 d_ff = 4 × d_model에서 나온다.
context window2,048 tokensprompt + 생성 결과가 함께 쓰는 당시 한도다.
training tokens300B8개 모델 모두 이 토큰 수로 학습했다.

선행 개념: 다음 토큰 확률과 prompt likelihood

1. autoregressive language model은 왼쪽만 보고 다음을 맞힌다

입력 token x₁, x₂, ..., x_T의 확률을 GPT-3 같은 causal language model(인과 언어 모델)은 다음처럼 쪼갠다.

P(x₁, x₂, ..., x_T)
  = P(x₁) × P(x₂ | x₁) × ... × P(x_T | x₁ ... x_T₋₁)

앞의 Attention Is All You Need 글에서 본 causal mask(인과 마스크)가 미래 token을 막는다. decoder-only 모델은 입력 문장을 따로 encode한 memory를 두지 않는다. prompt의 왼쪽 전체를 읽고 마지막 위치에서 다음 token 분포를 만든다.

2. 예시는 “명령”이 아니라 다음 토큰 패턴의 일부다

few-shot prompt는 컴퓨터의 함수 호출 파라미터가 아니라 긴 텍스트다.

Q: 1 + 1 =
A: 2

Q: 2 + 3 =
A: 5

Q: 4 + 6 =
A:

모델은 이 문법을 특별 API로 이해하는 것이 아니다. 사전학습에서 본 대화·질문·답 형식과 현재 token 배열을 바탕으로 10이 이어질 확률을 높인다. 그래서 newline(줄바꿈), Q:/A: 이름, 예시 순서, 언어, label token, 공백 하나도 결과를 바꿀 수 있다. prompt engineering(프롬프트 설계)은 마법 주문 찾기가 아니라 입력 인터페이스와 실험 조건을 고정하는 일이다.

3. 선택형 작업은 문장을 생성하지 않고 completion 확률을 비교할 수 있다

문제에 A/B/C/D 선택지가 있을 때 모델에게 긴 답을 쓰게 한 뒤 문자열을 파싱할 필요는 없다. 논문 §2.4는 각 후보 completion의 language-model likelihood(언어 모델 우도, 그 문자열이 이어질 확률)를 비교했다. 길이가 긴 후보는 token을 더 많이 곱하므로 대체로 확률이 더 작아진다. 그래서 대부분 task에서는 per-token likelihood(토큰당 평균 로그 확률)를 비교해 길이를 정규화했다.

score_raw(c) = Σ_t log P(c_t | prompt, c_<t)
score_per_token(c) = score_raw(c) / token_count(c)

일부 ARC(AI2 Reasoning Challenge, 과학 문제 벤치마크)·OpenBookQA·RACE(ReAding Comprehension from Examinations, 시험 기반 독해)에서는 generic answer context의 unconditional probability로 한 번 더 나눈 점수가 개발 set에서 유리했다고 논문이 보고한다. 이 세부는 중요한 교훈이다. “모델 파라미터만 같으면 평가 공정”이 아니다. 후보 표기와 scoring rule도 모델의 일부처럼 고정해야 한다.

4. context window는 작은 데이터베이스가 아니라 고정 길이 버퍼다

n_ctx=2048은 token 수다. 예시, 지시, 사용자 질문, 검색한 문서, 생성될 답이 이 예산을 나눠 쓴다.

[system/format][K demonstrations][new query][reserved output]
                 └───────── 모두 2,048 tokens 이하 ─────────┘

예시를 많이 넣으면 작업 형식 힌트는 늘지만, 새 질문·근거 문서·답을 위한 공간이 줄고 비용·지연 시간도 늘어난다. GPT-3 논문의 10~100 예시는 2020년 2,048 token 환경의 관찰이지, 오늘의 모든 모델에 적용하는 권장 K값이 아니다.

밑바닥 원리: 예시가 가중치 없이 답을 바꾸는 실행 순서

요청 한 건의 실제 계산 경로

1. 애플리케이션이 prompt template과 K개 예시를 조립한다.
2. tokenizer가 문자열을 token ID로 바꾼다.
3. decoder-only Transformer가 causal mask 아래에서 왼쪽 token들을 처리한다.
4. 마지막 위치의 logits(softmax 전 점수)에서 다음 token 분포를 만든다.
5. 선택형 task면 후보 completion 각각의 log likelihood를 비교한다.
   자유 생성 task면 sampling 또는 beam search로 token을 이어 붙인다.
6. 응답이 끝나도 parameter θ는 저장소에 다시 쓰이지 않는다.

여기서 3단계의 self-attention은 새 질문 token이 앞의 demonstrations를 직접 볼 수 있게 한다. 그러나 모델이 cat→고양이라는 짝을 영구 DB에 INSERT하는 것은 아니다. 다음 요청에서 예시를 빼면 그 요청의 activation도 사라진다. 이것이 ICL과 fine-tuning의 가장 큰 운영 차이다.

scale은 왜 few-shot 향상을 보였나

논문은 125M부터 175B까지 8개 크기를 모두 300B tokens로 학습해 비교했다. validation cross-entropy(검증 교차 엔트로피, 다음 token 예측 손실)는 training compute에 대해 대체로 power law(멱법칙) 추세를 유지했고, 많은 task에서 더 큰 모델일수록 zero/one/few-shot이 상승했다. 특히 큰 모델일수록 demonstrations를 넣었을 때 얻는 이득이 더 커지는 경향을 보고했다(Figure 1.2, 1.3, 3.1).

하지만 이 관찰은 “파라미터만 키우면 어떤 작업도 해결된다”는 법칙이 아니다. 같은 논문도 ANLI(Adversarial Natural Language Inference, 적대적 자연어 추론), WiC(Word-in-Context, 문맥 속 단어 의미), 일부 독해에서 few-shot이 약했다고 보고한다. scale은 품질 좋은 데이터, 올바른 평가, 충분한 context, 적절한 목적함수의 대체물이 아니다.

dense와 locally banded sparse attention을 교대하는 이유

dense attention은 한 token이 window의 모든 token을 본다. 길이 n에서 attention score 표가 n × n이라 O(n²) 비용이다. locally banded sparse attention은 일정한 가까운 범위 안에서만 보게 해 일부 계산·메모리를 줄인다. GPT-3은 이 두 attention pattern을 교대했다고만 논문에 공개했다. band 폭, 정확한 layer 배치, kernel 구현은 공개 원문에서 충분히 명세되지 않았고 공개 GPT-3 training source도 없으므로 이 글에서 지어내지 않는다.

이 선택은 현대 긴 문맥 모델의 중요한 출발점이다. 전역 연결은 정보 접근에 좋지만 비싸고, 지역 연결은 싸지만 멀리 있는 근거를 직접 놓칠 수 있다. 모델 구조·retrieval·chunking을 함께 설계해야 한다.

내부 구조와 실제 실행 흐름: 데이터부터 평가 prompt까지가 모델이다

사전학습 데이터는 크기만큼 비례해서 뽑지 않았다

논문 Table 2.2의 최종 혼합은 다음과 같다.

데이터원문 token 수학습 mix 비율300B token 학습 시 경과 epoch
filtered Common Crawl410B60%0.44
WebText219B22%2.9
Books112B8%1.9
Books255B8%0.43
English Wikipedia3B3%3.4

논문 확인: 더 작지만 고품질이라고 본 WebText2·Wikipedia 등을 실제 크기보다 자주 샘플링했다. Common Crawl은 2016~2019 월별 41 shard를 내려 받아 quality classifier와 fuzzy deduplication(퍼지 중복 제거)으로 거르고, 데이터셋 안팎 문서 중복도 제거했다. 즉 “웹을 많이 긁으면 데이터 파이프라인이 끝난다”가 아니다. 품질 기준, 중복, 분포, 재샘플링 가중치가 학습 분포를 결정한다.

training loop: 300B tokens를 한 번에 넣는 것이 아니다

논문 부록 B의 공개 설정은 Adam(Adaptive Moment Estimation, 적응형 모멘트 추정) optimizer의 β₁=0.9, β₂=0.95, ε=1e-8, global gradient norm clipping(전체 기울기 크기 자르기) 1.0, weight decay(가중치 감쇠) 0.1이다. learning rate는 처음 375M tokens 동안 선형 warmup하고 260B tokens 동안 원값의 10%까지 cosine decay(코사인 감쇠)한다. batch는 모델 크기에 따라 32K tokens에서 목표 크기로 4~12B tokens 동안 키웠다.

문서 수집·필터·중복 제거
  → 2,048-token sequence로 packing
  → causal next-token loss
  → backpropagation + Adam update
  → 300B tokens까지 반복

짧은 문서를 2,048 token sequence에 여러 개 packing하고 document 사이에는 special end-of-text token을 넣었다. 논문은 문서 사이에 특별 mask를 쓰지 않았다고 명시한다. 이 구현은 GPU 활용에는 좋지만, 데이터 경계 token 처리와 packer 버그가 모델 학습에 직접 영향을 준다.

175B를 한 GPU에 올린 것이 아니다

논문 확인: 큰 모델은 memory 부족을 피하려고 matrix multiply 내부와 layer 사이 모두에서 model parallelism(모델 병렬화)을 썼고, Microsoft의 high-bandwidth cluster에서 V100 GPU로 학습했다(§2.3). 175B parameter를 FP16(Floating Point 16, 16비트 부동소수점) weight만으로 단순 환산해도 175B × 2 bytes = 약 326 GiB(Gibibyte, 2³⁰ bytes)다. optimizer state, gradient, activation, KV cache(Key-Value cache, 키-값 캐시), 통신 버퍼는 이 계산에 없다. 그래서 이 수치는 배포 GPU 개수의 답이 아니라 “가중치만의 낮은 하한”이다.

공개 소스와 비공개 소스의 경계

GPT-3 공식 repo의 고정 commit에는 논문, synthetic task data, dataset statistics, benchmark overlap artifact, model card가 있다. training loop와 inference model implementation은 없다. 반면 GPT-2 공식 src/model.py는 다음을 직접 보여 준다.

  1. model()는 token embedding과 learned positional embedding을 더하고 block을 반복한 뒤 token embedding weight와 logits를 곱한다.
  2. block()norm → attention → residual, norm → MLP(Multi-Layer Perceptron, 다층 퍼셉트론) → residual인 pre-normalization 흐름을 보인다.
  3. attn()은 lower-triangle causal mask를 softmax 전에 더하고 K/V past cache를 이어 붙인다.

GPT-3 논문이 GPT-2 구조를 따른다고 했으므로 이 코드는 decoder-only의 기초 확인에는 도움이 된다. 그러나 GPT-3은 alternating sparse attention, 훨씬 큰 병렬 학습, 다른 hidden size를 썼다. GPT-2 코드의 줄 번호를 GPT-3 실제 내부 구현이라고 인용하면 안 된다.

평가도 모델 사용법의 일부다

논문 §2.4에서 few-shot 평가 예시는 task training set에서 무작위로 K개를 뽑고 1~2 newlines로 구분했다. 선택형은 후보 completion 확률을 비교했고, free-form(자유 생성)은 beam width 4와 length penalty α=0.6을 썼다. test set이 private이고 모델이 test server에 맞지 않으면 development set을 보고한 경우도 있다.

같은 175B parameter라도 다음이 바뀌면 결과가 바뀐다.

model checkpoint + tokenizer + prompt template + K + example random seed
+ candidate scoring + decoding parameters + dataset split + contamination rule

이것이 “프롬프트 한 번 써 보고 모델이 좋다/나쁘다”를 피해야 하는 이유다.

직접 검증: 가중치 불변, 후보 점수, 학습 계산량을 작은 수로 확인하기

검증 범위와 환경

이 Mac에는 GPT-3 175B 가중치와 공개 training/inference source가 없다. 따라서 GPT-3의 few-shot 성능이나 parameter update 부재를 실행으로 검증했다고 주장할 수 없다. 대신 논문이 정의한 가중치 갱신 없는 prompt conditioning, §2.4의 token 길이 정규화, Appendix D의 training compute 근사를 순수 Python으로 계산했다.

  • 환경: macOS 26.4.1, Python 3.9.6
  • 스크립트: /tmp/gpt3-few-shot-research/verify_gpt3_few_shot_mechanics.py
  • SHA-256(Secure Hash Algorithm 256-bit, 파일 무결성 해시): 8377c9a06d2af930547cdfb1e5dd8368a977ffb34f1e71ddcb0c7f4be6d918c8
  • 경계: 아래 작은 tuple과 log probability는 교육용 값이다. 실제 GPT-3 tokenizer·GPU 계산·모델 행동을 재현하지 않는다.
import hashlib

# prompt 구성은 parameter를 변경하지 않는다. 실제 175B 모델이 아닌 작은 불변 값이다.
parameters = (0.125, -0.75, 1.5)
before = hashlib.sha256(repr(parameters).encode()).hexdigest()
prompt = "영어: cat\n한국어: 고양이\n\n영어: dog\n한국어: 개\n\n영어: book\n한국어:"
after = hashlib.sha256(repr(parameters).encode()).hexdigest()
print("parameter hash unchanged:", before == after)

# 선택지 A는 2 token, B는 4 token인 가상의 completion이다.
candidates = {"A (2 tokens)": [-0.20, -0.30],
              "B (4 tokens)": [-0.10, -0.30, -0.20, -0.20]}
raw = {name: sum(logps) for name, logps in candidates.items()}
per_token = {name: total / len(candidates[name]) for name, total in raw.items()}
print("raw choice:", max(raw, key=raw.get))
print("length-normalized choice:", max(per_token, key=per_token.get))

# Appendix D의 근사: attention을 무시하고 6 × parameter × training token.
flops = 6 * 174_600_000_000 * 300_000_000_000
print("training FLOPs (6*N*T):", f"{flops:.3e}")
print("petaflop/s-days:", round(flops / 8.64e19, 1))

직접 실행 결과:

few-shot prompt chars: 47
parameter hash unchanged: True
raw log-likelihood: {'A (2 tokens)': -0.5, 'B (4 tokens)': -0.8}
per-token log-likelihood: {'A (2 tokens)': -0.25, 'B (4 tokens)': -0.2}
raw choice: A (2 tokens)
length-normalized choice: B (4 tokens)
training FLOPs (6*N*T): 3.143e+23
petaflop/s-days: 3637.5
175B weight-only FP16 GiB: 326.0

두 선택지는 raw log likelihood에서는 짧은 A가 낫지만 token당 평균에서는 B가 낫다. 그래서 선택형 benchmark는 길이 정규화 여부를 숨기면 안 된다. 코드의 6×N×T에서 N은 총 parameter 수, T는 training token 수다. 3.143e23 FLOPs(Floating-Point Operations, 부동소수점 연산 수)와 3,637.5 PF-days(Petaflop per second-days, 초당 10¹⁵ 연산을 하루 수행한 단위)는 논문 Appendix D Table D.1의 3.14e23, 3.64e3와 반올림 수준으로 일치한다. 이 근사는 논문처럼 attention 연산을 무시하므로 실제 wall-clock time(실제 경과 시간)·전력·비용 계산은 아니다.

성능과 트레이드오프: 175B의 숫자보다 측정 조건을 읽기

논문이 실제로 보고한 향상과 실패

다음은 원 논문 Table 3.2·3.3의 선택된 값이다. 모두 당시 prompt, K, decoding, dataset split, contamination 분석 조건에 묶인다.

task / 지표zero-shotone-shotfew-shot읽는 법
LAMBADA(Language Modeling Broadened to Account for Discourse Aspects, 넓은 담화 문맥 단어 예측) accuracy76.272.586.4blank 형식의 여러 예시가 큰 도움. 오염 주의가 붙는다.
TriviaQA closed-book accuracy64.368.071.2외부 검색 없이 parameter 안 지식으로 답한 평가다. 최신 사실 보장은 아니다.
WebQuestions accuracy14.425.341.5few-shot 형식 영향이 큰 예다.
CoQA(Conversational Question Answering, 대화형 질의응답) F1(precision·recall 조화 평균)81.584.085.0prompt 조건이 달라지면 그대로 재현되지 않는다.

LAMBADA의 86.4만 보고 “GPT-3는 긴 문맥을 완벽히 이해한다”고 결론 내리면 안 된다. 논문은 LAMBADA에서 training data와의 genuine contamination 가능성을 따로 적었다. 반대로 GPT-3은 WiC·ANLI 같은 비교 작업과 일부 reading comprehension에서 약했고, 긴 생성에서 반복·모순·문맥 이탈도 일으킬 수 있다고 §5에 썼다.

데이터 품질과 재샘플링은 parameter 수만큼 중요하다

300B tokens는 175B parameter에 비해 오늘의 compute-optimal 관점에서는 적게 보일 수 있지만, 이 논문은 당시 scaling law 연구에 따라 모델을 크게 하고 token을 상대적으로 적게 쓰는 선택을 했다. 300B라는 합계만 외우지 말고 Common Crawl은 0.44 epoch, Wikipedia는 3.4 epoch라는 mix를 같이 봐야 한다. 같은 token 수라도 어떤 문서를 몇 번 봤는지에 따라 모델이 다르다.

해석: 데이터 파이프라인을 만들 때 모델 이름보다 먼저 다음을 versioning(버전 관리)해야 한다.

raw source revision → quality filter version → dedup rule → language/license policy
→ sampling weights → tokenizer revision → train/validation/test overlap rule

이 연결이 없으면 “모델이 좋아졌다”가 데이터 품질·중복·평가 누설 중 무엇 때문인지 알 수 없다.

175B는 제품 호출 비용을 없애지 않는다

175B 전체 weight만 FP16으로 단순 환산한 326 GiB는 한 요청의 activation, KV cache, runtime workspace, replicas, batch, network를 뺀 값이다. few-shot은 fine-tuning GPU를 생략할 수 있지만, 매 요청의 예시 token을 input으로 반복 전송·처리한다. 예시 50개를 prompt에 넣으면 그 50개는 사용자마다 다시 attention 연산과 KV cache를 소비한다.

fine-tuning 비용: 학습 때 크고, 추론 prompt는 짧게 만들 수 있음
few-shot 비용:    학습 때 작지만, 매 요청 context가 길어질 수 있음

어느 쪽이 싼지는 요청 수, 작업 수, 예시 길이, latency SLO(Service Level Objective, 서비스 수준 목표), 정확도, 개인정보·보안 제약에 따라 달라진다.

실패, 한계, 장애와 운영 기준: prompt는 데이터 경계다

1. benchmark contamination: 논문도 filtering bug를 공개했다

웹 규모 corpus는 benchmark의 test/development 문장까지 포함할 수 있다. GPT-3 논문은 학습 전 overlap을 제거하려 했지만 filtering bug 때문에 감지된 overlap 일부만 제거됐고, 재학습 비용 때문에 모델을 다시 돌리지 못했다고 명시한다(§2.2, §4).

사후 분석에서는 training corpus와 test/dev를 13-gram(연속 13단어) 기준으로 비교해 겹치는 예시를 dirty, 그렇지 않은 예시를 clean으로 표시했다. 논문은 많은 task에서 clean subset 성능 차이가 작았다고 보고했지만, PIQA(Physical Interaction Question Answering, 물리 상식 질의응답)는 29%가 flag되고 clean subset에서 약 3 percentage point 하락, Winograd는 45% flag되고 132 schema가 실제 training data에 있었다고 적었다. clean subset도 원래 분포와 같다는 보장은 없다고 스스로 한계를 남겼다.

운영 기준: 사내 평가 set은 학습·SFT(Supervised Fine-Tuning, 지도 미세조정)·prompt example·retrieval corpus와 분리하고, document hash·n-gram·semantic near duplicate를 점검한다. 테스트 답을 feature flag나 prompt에 넣지 않는다. 오염이 의심되면 점수를 자랑하기보다 test를 재구성한다.

2. closed-book은 최신·근거 있는 답이 아니다

GPT-3의 closed-book QA는 외부 문서를 검색하지 않고 parameter에 저장된 패턴만으로 답하게 한 평가다. 논문 데이터는 2016~2019 Common Crawl을 중심으로 한다. 따라서 그 결과가 오늘의 정보, 사내 문서, 법·가격·재고, 출처 인용의 정확성을 보장하지 않는다.

해석: 최신성과 근거성이 필요한 백엔드에서는 RAG 또는 승인된 API/DB(Database, 데이터베이스) 조회를 별도 단계로 둔다. 모델이 만든 문장을 데이터베이스 truth(진실 원천)로 저장하지 말고, source ID(Identifier, 식별자)·document revision·retrieval score·검증 시점을 함께 저장한다.

3. prompt injection과 예시 오염은 ICL의 입력 취약점이다

GPT-3 논문은 오늘의 prompt injection(프롬프트 주입) 용어를 다루지 않았다. 그러나 ICL 구조에서 untrusted text(신뢰할 수 없는 텍스트)가 demonstration처럼 같은 context에 들어가면, 그것은 모델이 따라 할 수 있는 강한 입력 패턴이 된다.

해석: RAG/agent(에이전트) 시스템에서는 다음 경계를 애플리케이션이 강제한다.

trusted system instruction  ≠ retrieved document ≠ user text ≠ tool result

모델 출력 → JSON(JavaScript Object Notation, 자바스크립트 객체 표기법) Schema 검증 → ACL(Access Control List, 접근 제어 목록)
          → parameterized query → 승인된 tool allowlist → audit log

예시·검색 문서가 “이전 지시를 무시하라”라고 써도 DB 변경 권한이 생기면 안 된다. 모델은 확률 생성기이고, 권한 판단기는 서비스 코드여야 한다.

4. 관측할 지표는 모델 응답 하나가 아니다

지표왜 보는가이상 시 첫 대응
prompt token / output tokenK와 문서가 context 예산을 잠식하는지template·chunk 수·output reserve 조정
p50/p95 latency(각각 중앙값/상위 5%를 제외한 지연 시간)긴 context와 tail request 감시timeout, cancellation, fallback 적용
template/model/tokenizer revision재현성request log와 evaluation fixture에 함께 저장
per-slice accuracy언어·도메인·길이별 실패mix·prompt·retrieval을 분리 분석
contamination/near-duplicate rate과대평가 차단test 분리·재평가
parse/tool denial/audit event구조화 출력·권한 경계schema·ACL·allowlist 점검

대안, 비교와 선택 기준: few-shot은 중간 선택지다

방법가중치 변경최신 사실잘 맞는 경우핵심 대가
Zero-shot prompt없음없음단순·드문 작업, 빠른 prototype형식·성능 변동 큼
Few-shot prompt없음예시 안에 든 것만예시로 출력 형식을 보여 줄 수 있음context 비용·예시 민감성
Fine-tuning있음학습 데이터 시점반복되는 좁은 작업, 충분한 품질 데이터학습/배포/평가 버전 관리
RAG보통 없음retrieval corpus에 따라 가능최신 사내 지식·근거 인용검색 실패·권한·문서 갱신
Tool calling보통 없음도구 결과에 따라 가능계산, DB 조회, workflow 실행schema·권한·실행 sandbox 필요

백엔드·DBA(Database Administrator, 데이터베이스 관리자) 출신인 나의 우선순위

해석: 내 첫 목표는 175B 모델을 재학습하는 것이 아니라, 재현 가능한 few-shot evaluation harness(평가 하네스)를 만드는 것이다.

1. 실제 업무 하나를 선택한다. 예: 로그 오류 분류 또는 SQL(Structured Query Language, 구조화 질의 언어) read-only 설명.
2. 정답 기준과 실패 비용을 먼저 정의한다.
3. zero-shot prompt를 baseline으로 기록한다.
4. K=1, 3, 5 예시를 같은 template·같은 held-out test로 비교한다.
5. token/latency/cost/정확도/근거성/권한 거절을 같이 기록한다.
6. few-shot이 안정적으로 이길 때만 운영 template로 versioning한다.
7. 반복 업무이고 예시가 너무 길면 RAG·fine-tuning을 비교한다.

이 과정은 GPT-3의 역사적 결론을 내 업무에 검증하는 방식이다. “예시 몇 개를 넣었더니 좋아 보였다”가 아니라, 어떤 데이터·형식·K·모델 revision에서 얼마나 좋아졌는지를 남기는 것이 경쟁력이다.

흔한 오해와 최초 질문에 대한 답

Q1. “zero-shot은 모델에 아무것도 안 주는 것인가?”

아니다. 논문에서 zero-shot은 demonstration 0개다. 보통 자연어 task instruction과 새 입력은 prompt에 준다. “gradient update가 0번”이라는 뜻이지 token 입력이 0개라는 뜻이 아니다.

Q2. “few-shot이면 모델이 예시를 영구히 기억하는가?”

아니다. 현재 request의 context에서만 예시를 참조한다. parameter가 갱신되지 않으므로 다음 요청에도 적용하려면 예시를 다시 넣거나, 별도의 fine-tuning/RAG/메모리 시스템을 설계해야 한다.

Q3. “예시를 많이 넣을수록 항상 좋아지는가?”

아니다. 논문도 K가 커질수록 대체로 좋아지지만 항상 그렇지는 않다고 썼다. context 창, 예시 품질·순서·label 균형, 새 질문의 공간, 비용이 함께 제한한다.

Q4. “175B면 최신 사실을 다 아는가?”

아니다. parameter 안의 패턴은 사전학습 데이터 시점과 분포에 묶여 있다. closed-book QA 점수는 최신성·출처·사내 권한을 보장하지 않는다. 최신 정보는 retrieval 또는 신뢰할 도구로 검증한다.

Q5. “GPT-3 결과가 좋으니 benchmark 점수를 그대로 채용 포트폴리오에 써도 되는가?”

아니다. 논문도 contamination bug와 clean subset 한계를 공개했다. 내 프로젝트는 test split, prompt version, K, decoding, seed, 데이터 중복 검사를 함께 공개해야 평가 가능한 결과가 된다.

Q6. “GPT-3의 공개 repo에서 training code를 읽으면 되나?”

아니다. 확인한 고정 commit에는 연구 artifact와 overlap 자료가 있고 GPT-3 training/inference source·weights는 없다. GPT-2 source는 decoder-only의 개념 기준일 뿐 GPT-3 sparse attention·대규모 병렬 구현의 증거가 아니다.

출처

1차 자료

  1. Tom B. Brown et al., Language Models are Few-Shot Learners, arXiv:2005.14165v4, 2020-07-22. 이 글의 초록, §1–§6, Table 2.1/2.2/3.2/3.3, Figure 1.1–3.1, Appendix B/C/D를 확인했다.
  2. OpenAI, GPT-3 연구 artifact 저장소, commit d7a9bb505df6f630f9bab3b30c889e52f22eb9ea. 공개 파일 목록, synthetic data, overlap artifact, model card의 존재와 training/inference source 부재를 확인했다.
  3. OpenAI, GPT-2 src/model.py, commit 9b63575ef42771a015060c964af2c3da4cf7c8ab. GPT-3 자체 구현이 아니라 GPT-2 계열 decoder-only의 pre-normalization·causal mask·K/V cache·token/position embedding 흐름을 코드 수준에서 대조한 보조 1차 소스다.

직접 실행

  • /tmp/gpt3-few-shot-research/verify_gpt3_few_shot_mechanics.py를 macOS 26.4.1, Python 3.9.6에서 실행했다. SHA-256과 실제 출력은 직접 검증 절에 기록했다. 이는 ICL 계약·길이 정규화·논문 compute 근사의 작은 수 검증이며 GPT-3 모델 실행 또는 학습 재현이 아니다.
대화

댓글

0
댓글을 불러오는 중입니다.