|
|
GPT-3 (초거대 스케일 디코더) 구조 정리
지난번에 GPT 디코더 전용 구조, BERT 인코더 전용 구조, T5 인코더-디코더 구조를 차례로 끝냈다. 이번엔 GPT-3다.
그런데 이 글은 앞의 세 글과 성격이 좀 다르다.
앞의 글들은 "이 모델은 어떤 블록으로 이루어져 있고 데이터가 그 안을 어떻게 흘러가는가"를 뜯어보는 글이었는데, GPT-3는 그렇게 쓸 내용이 별로 없다. 왜냐하면 GPT-3의 블록 구조는 GPT-2와 사실상 같기 때문이다.
논문 2.1절이 직접 이렇게 말한다. "수정된 초기화, pre-normalization, reversible tokenization을 포함해 GPT-2와 동일한 모델·아키텍처를 사용한다.
다만 트랜스포머 레이어에서 dense와 locally banded sparse attention 패턴을 번갈아 사용한다는 점만 예외다."
인용문에 나온 용어를 풀어두면 이렇다.
수정된 초기화는 학습 시작 전 가중치에 넣는 초깃값을 레이어 수에 맞게 조정하는 것이고, pre-normalization은 LayerNorm(값의 분포를 고르게 맞춰주는 연산)을 블록 뒤가 아니라 앞에 두는 배치 방식이다.
reversible tokenization은 텍스트를 토큰으로 쪼갠 뒤 다시 원래 텍스트로 손실 없이 되돌릴 수 있는 토크나이저를 말하고, GPT-2의 byte-level BPE가 그거다.
셋 다 GPT-2 글에서 이미 다룬 것들이고 GPT-3에서 바뀌지 않았다.
즉 GPT-2에서 GPT-3로 가면서 배선이 바뀐 지점은 딱 한 군데다. 나머지는 전부 "같은 배선을 얼마나 크게, 몇 번 쌓았는가"의 문제고, 논문의 진짜 무게중심은 구조가 아니라 "그렇게 키웠더니 뭐가 나왔는가"에 있다.
그래서 이 글은 두 덩어리로 나눠서 쓴다.
1부는 구조 얘기다. 스케일이 정확히 얼마나 커졌는지, 그리고 유일하게 바뀐 dense/sparse attention이 뭔지 본다.
2부는 구조가 아니라 논문이 실험으로 보여준 주장 얘기다. 왜 키우면 좋아지는지(scaling law), 키웠더니 뭐가 나왔는지(in-context learning)를 본다.
GPT-2의 블록 구조 자체는 이미 지난 글 "GPT(v2) 디코더(챗봇형 LLM) 전용 구조"에서 다 다뤘으니 여기서 반복하지 않는다. Masked Self-Attention, Add & LayerNorm, FFN, causal mask 같은 게 기억이 안 나면 그 글을 먼저 보고 오는 게 낫다.
═══════════════════════════════════════
1부. 구조적 요소
═══════════════════════════════════════
■ 1장. 스케일 비교 — 뭐가 얼마나 커졌나
[구조도 ① — GPT-2와 GPT-3의 블록 반복 구조 비교]
▷ 전문 설명
이 장은 연산 블록 설명이 아니라 스펙 비교다. 그래서 "입력 → 연산 → 출력" 형식이 아니라 수치를 그대로 비교한다.
비교 대상은 GPT-2의 가장 큰 모델(GPT-2 XL)과 GPT-3의 가장 큰 모델(175B, API 이름으로는 davinci)이다.
[표 ① — GPT-2 XL과 GPT-3 175B 스펙 비교]
이 표에서 먼저 짚고 갈 게 있다. 파라미터는 117배 커졌는데, 레이어는 2배, d_model은 7.7배밖에 안 늘었다. 숫자가 안 맞는 것 같지만 맞다. 트랜스포머의 파라미터는 대부분 d_model의 제곱에 비례하는 행렬들이기 때문이다.
한 레이어 안을 뜯어보면 이렇다.
[표 ② — 한 레이어의 파라미터 구성]
d_model이 7.7배가 되면 d_model²은 약 59배가 되고, 여기에 레이어 2배를 곱하면 118배가 나온다. 117배라는 숫자가 여기서 나온다. 즉 GPT-3는 블록을 아주 많이 쌓아서 커진 게 아니라, 각 블록 자체를 훨씬 굵게 만들어서 커진 모델이다.
그리고 위 계산에서 하나 더 보이는 게 있다. FFN이 attention보다 파라미터가 정확히 두 배 많다. 이건 GPT-3만의 특징이 아니라 "FFN 확장 비율 4배"라는 트랜스포머 설계에서 자동으로 따라 나오는 고정 비율이다. GPT-3 175B를 실제로 세어보면 attention 관련이 약 58B, FFN이 약 116B로 딱 2:1이 나오고, FFN이 전체 파라미터의 3분의 2를 차지한다. 이 사실이 왜 중요한지는 2장 끝에서 다시 다룬다.
▷ 쉽게 다시 말하면
건물에 비유하면 GPT-2와 GPT-3는 층 구조 설계도가 똑같은 건물이다. 한 층에 뭐가 들어가는지(현관 → 복도 → 방 → 복도), 층과 층이 어떻게 연결되는지가 완전히 같다.
달라진 건 두 가지다. 층수가 48층에서 96층이 됐고, 한 층의 면적이 7.7배 넓어졌다. 층당 면적이 넓어지면 그 안에 들어가는 자재(파라미터)는 면적의 제곱에 가깝게 늘어나니까, 전체 자재량은 117배가 된다. 설계도는 손도 안 댔는데 건물은 100배 넘게 커진 셈이다.
───【핵심】───
▶ 핵심 한 줄: GPT-3는 GPT-2의 설계도를 그대로 쓰되 층수를 2배, 층당 폭을 7.7배로 키운 모델이고, 파라미터 117배는 대부분 d_model²에 비례하는 행렬에서 나온다.
■ 2장. dense와 sparse attention을 번갈아 쓰기
이 장이 GPT-2 대비 실제로 배선이 바뀐 유일한 지점이다.
입력 → 내부 연산 → 출력
• 입력: 이전 레이어에서 나온 토큰 벡터 시퀀스 (길이 n, 차원 d_model)
• 내부 연산: 각 토큰이 "어떤 이전 토큰들을 참고할지" 정하고, 그 대상들과의 attention score를 계산해서 정보를 가중합
• 출력: 문맥이 섞인 토큰 벡터 시퀀스 (모양은 입력과 동일)
바뀐 건 이 중에서 "어떤 이전 토큰들을 참고할지" 하나뿐이다. Q/K/V를 만드는 방식도, softmax도, 가중합도 GPT-2와 똑같다.
▷ 전문 설명 — 왜 바꿔야 했나
self-attention의 계산량은 시퀀스 길이 n에 대해 O(n²)이다. O( ) 표기는 "입력이 커질 때 계산량이 대략 어떤 비율로 늘어나는가"만 나타내는 기호라고 보면 된다. O(n²)이면 토큰 수가 2배가 될 때 계산량은 4배, 10배가 되면 100배가 된다는 뜻이다. 이유는 단순하다. 각 토큰이 다른 모든 토큰과의 유사도를 계산해야 하니까, 토큰 쌍의 개수인 n × n에 비례한다.
여기서 흔히 오해하는 게 있는데, 이 n²은 "특정 구간의 토큰이 쓸데없이 반복 참조돼서" 생기는 게 아니다. causal mask(뒤에 나올 토큰은 못 보게 가려버리는 장치) 때문에 뒤로 갈수록 볼 수 있는 과거 토큰이 계속 늘어나는 것이 누적된 결과다. 100번째 토큰은 99개를 보고, 2000번째 토큰은 1999개를 본다. 이걸 다 합치면 n²이 된다. 어느 한 구간이 과잉 참조되는 게 아니라 구조 자체가 그렇게 생겨먹었다.
GPT-3는 context length가 2048이라 n²이 약 400만이다. 이걸 96개 레이어에서 반복하면 비용이 만만치 않다.
그래서 Sparse Transformer(Child et al., 2019)의 방식을 가져와서, 레이어마다 dense attention과 locally banded sparse attention을 번갈아 쓴다.
▷ 전문 설명 — sparse attention이 정확히 뭘 하나
[구조도 ② — dense와 sparse의 attention 참조 패턴 비교]
sparse attention은 두 개의 고정된 규칙을 조합한다. 내용을 보고 중요도를 판단해서 걸러내는 게 아니라, 입력이 뭐든 상관없이 미리 정해진 기하학적 패턴만 본다. 이런 방식을 static sparse attention(내용과 무관하게 참조 위치가 고정된 방식)이라고 부른다.
• local attention: 시퀀스를 N개짜리 블록으로 나누고, 같은 블록 안에 있는 토큰끼리만 계산한다. 조건으로 쓰면 ⌊i/N⌋ = ⌊j/N⌋일 때만 계산한다는 뜻이다.
i는 지금 보고 있는 토큰의 위치, j는 참조 대상 토큰의 위치이고, ⌊ ⌋는 소수점 이하를 버리는 기호다. 즉 두 위치를 N으로 나눈 몫이 같으면(= 같은 블록에 속하면) 계산한다는 말이다.
• strided attention: N칸 간격으로 딱 떨어지는 위치만 계산한다. 조건으로 쓰면 (i − j) mod N = 0일 때만이다.
mod는 나눈 나머지를 뜻하니까, 두 위치의 거리가 N의 배수일 때만 계산한다는 말이다.
N을 대략 √n 정도로 잡으면, 각 토큰이 보는 대상 수가 n개가 아니라 √n개 수준으로 줄어든다. 전체 계산량은 O(n²)에서 O(n√n)이 된다.
여기서 중요한 건, 계산을 안 하는 토큰 쌍은 attention score가 0이거나 작은 게 아니라 그 쌍에 대한 연산 자체가 존재하지 않는다는 점이다. dense는 계산해보고 결과가 작게 나오는 것이고, sparse는 아예 계산하지 않는다.
▷ 전문 설명 — 그럼 건너뛴 토큰의 정보는 영영 못 받나
한 레이어에서는 못 받는다. 하지만 레이어를 여러 개 쌓으면 결국 받는다.
[구조도 ③ — local + strided의 레이어별 릴레이 도달범위]
local은 가까운 정보를 빠르게 섞는 역할이고, strided는 그렇게 섞인 정보를 멀리까지 릴레이하는 역할이다. 두 층만 거쳐도 마지막 토큰이 첫 토큰의 정보까지 간접적으로 받게 된다.
CNN에서 작은 커널을 여러 겹 쌓으면 결국 넓은 영역을 보게 되는 것과 같은 원리다. 이걸 수용영역(receptive field, 출력 하나가 실제로 영향을 받는 입력 범위) 확장이라고 부른다.
그리고 GPT-3는 sparse만 계속 쓰지 않고 dense와 번갈아 쓴다. sparse 레이어에서는 싸게 계산하면서 가까운 정보와 주기적으로 먼 정보를 유지하고, dense 레이어에서는 제한 없이 전역적으로 섞는다. 둘을 교대로 배치해서 계산량과 표현력을 절충한 것이다.
▷ 전문 설명 — 파라미터는 안 줄어든다
한 가지 헷갈리기 쉬운 지점이 있다. sparse attention을 써도 파라미터 개수는 전혀 줄어들지 않는다. Q, K, V, O 투영 행렬은 그대로 다 있다. 줄어드는 건 그 행렬들을 몇 개의 토큰 쌍에 대해 굴리느냐, 즉 연산량(FLOPs, 실제로 수행하는 덧셈·곱셈 횟수)뿐이다. 파라미터는 "모델이 들고 있는 숫자의 개수"고 연산량은 "그 숫자를 가지고 실제로 계산하는 횟수"라서, 둘은 별개다.
1장에서 FFN이 전체 파라미터의 3분의 2를 차지한다고 했는데, 이 둘을 이어보면 역할 분담이 보인다.
• attention은 "어떤 토큰의 정보를 가져올지" 정하는 라우팅(정보를 어디서 어디로 보낼지 정하는 것) 담당이다.
• FFN은 가져온 정보를 실제로 가공하고, 학습으로 축적된 지식을 적용하는 담당이다.
해석가능성(모델 내부가 실제로 무슨 일을 하는지 들여다보는 연구 분야) 쪽에서는 FFN이 key-value 메모리처럼 동작한다는 분석이 있다. 각 뉴런이 특정 입력 패턴(key)에 반응해서 특정 출력 분포(value)를 밀어주는, 거대한 룩업 테이블에 가깝다는 얘기다.
그래서 sparse attention이 건드리는 건 라우팅 비용뿐이고, 지식을 저장하는 FFN 용량에는 손대지 않는다.
한 가지 덧붙이면, 여기서 말하는 FFN은 레이어마다 딱 하나뿐이고 모든 토큰에 항상 똑같이 적용된다. "여러 개의 FFN 중 라우터(어느 것을 쓸지 골라주는 선택기)가 하나를 골라서 실행한다"는 구조는 Mixture-of-Experts(MoE, 전문가 혼합)라는 다른 아키텍처이고, GPT-3는 그게 아니다. GPT-3는 모든 파라미터가 모든 토큰에 대해 항상 다 쓰이는 dense 모델이다.
▷ 쉽게 다시 말하면
문장을 읽다가 마지막 단어의 의미를 확실히 하려고 앞을 되짚어본다고 하자. "나는 어제 학교에서 친구랑 밥을 맛있게 정말 먹었다"에서 "먹었다"를 이해하는 상황이다.
dense는 앞의 일곱 단어를 하나하나 다 훑어보고 각각과 얼마나 관련 있는지 점수를 매기는 방식이다. 놓치는 게 없는 대신 문장이 길어지면 훑을 게 그만큼 늘어난다.
sparse는 다 훑지 않는다. 바로 앞의 몇 단어("맛있게", "정말")만 자세히 보고, 나머지는 건너뛴다. 대신 멀리 떨어진 지점 하나("나는")를 체크포인트처럼 찍어둔다. 중간 단어들은 지금 이 레이어에서는 아예 안 본다.
그럼 "밥을"이라는 결정적인 단어를 놓치는 것 아니냐 싶은데, 그렇지 않다. 아래 레이어에서 이미 "밥을"의 정보가 근처 단어들 안으로 섞여 들어갔기 때문이다. 릴레이 경주 같은 거다. 첫 주자가 마지막 주자에게 직접 바통을 건네지는 않지만, 중간 주자들을 거쳐 결국 도착한다. dense가 한 방에 전체를 보는 방식이라면 sparse는 여러 단계에 걸쳐 전체를 보는 방식이다.
attention과 FFN의 역할은 사서와 처리 기계로 비유할 수 있다. 사서(attention)는 "이 질문에 답하려면 어떤 자료를 책상에 올려놓을지" 고른다.
처리 기계(FFN)는 책상에 뭐가 올라오든 항상 똑같은 방식으로 작동하는 고정된 기계다. 입력이 달라지면 출력도 달라지지만, 처리 방식 자체는 매번 같다. 다만 그 기계 안에 어마어마한 양의 지식이 들어있어서, 어떤 입력이 오느냐에 따라 다른 지식이 튀어나오는 것처럼 보인다.
───【핵심】───
▶ 핵심 한 줄: sparse attention은 각 토큰이 볼 수 있는 대상을 local + strided라는 고정 패턴으로 미리 좁혀 O(n²)을 O(n√n)으로 줄이는 것이고, 줄어드는 건 연산량이지 파라미터가 아니다.
═══════════════════════════════════════
2부. 실증적 주장
═══════════════════════════════════════
여기서부터는 구조 얘기가 아니다. "모델을 이렇게 만들었더니 이런 결과가 관찰됐다"는 논문의 주장과 근거를 본다.
그래서 구조도 대신 그래프와 프롬프트 예시를 쓴다.
■ 3장. Scaling law — 왜 그냥 키웠나
▷ 논문의 핵심 주장
GPT-3 논문의 배경에는 같은 OpenAI의 선행 연구인 Kaplan et al.(2020) "Scaling Laws for Neural Language Models"가 있다. 주장은 이렇다.
언어모델의 test loss(학습에 쓰지 않은 데이터로 재본 오차, 낮을수록 좋다)는 세 가지 변수 각각에 대해 거듭제곱 법칙(power law)을 따른다.
• N: 파라미터 수
• D: 데이터셋 크기
• C: 학습에 투입한 연산량
거듭제곱 법칙이라는 건 로그-로그 그래프(양쪽 축을 10배 단위로 눌러서 그린 그래프)에서 거의 직선으로 나타난다는 뜻이다. 직선이라는 건 규칙이 일정하다는 얘기고, 규칙이 일정하면 아직 만들어보지 않은 크기의 모델 성능도 미리 예측할 수 있다. 그리고 이 관계는 아키텍처 세부사항(레이어 수와 폭의 비율, 헤드 개수 등)에는 상대적으로 둔감하다. 즉 "어떻게 설계했는가"보다 "얼마나 크게 만들었는가"가 성능을 훨씬 잘 예측한다.
▷ 근거
GPT-3 논문은 이걸 검증하려고 125M부터 175B까지 세 자릿수 규모에 걸쳐 8개 크기의 모델을 학습시켰다. 하나만 크게 만들어놓고 "좋다"고 한 게 아니라, 크기를 바꿔가며 곡선을 그린 것이다. 모든 모델은 총 3000억 토큰으로 학습했다.
[그래프 ① — 모델 크기에 따른 성능 변화 곡선]
▷ 의미
기존에는 "성능을 올리려면 새로운 알고리즘이나 구조 혁신이 있어야 한다"는 게 상식이었다. 스케일링 법칙은 여기에 다른 답을 내놨다. 구조를 그대로 두고 N, D, C를 키우기만 해도 예측 가능하게 성능이 오른다는 것이다.
GPT-3가 GPT-2와 구조적으로 거의 같은데도 파라미터만 117배 키운 이유가 이거다. 새 구조를 발명하려던 게 아니라 이 법칙을 검증하고 활용하려던 것이다.
다만 이 얘기에는 후일담이 있다. 2022년 DeepMind의 Chinchilla 논문이 Kaplan의 N:D 배분 비율이 최적이 아니었다고 지적했다. GPT-3는 모델 크기에 비해 학습 데이터가 부족한, 이른바 undertrained(덜 학습된) 모델이었다는 것이다. 같은 연산량이면 모델을 덜 키우고 데이터를 더 먹이는 쪽이 나았다는 얘기인데, 이건 GPT-3 이후의 얘기라 여기서는 짚고만 넘어간다.
▷ 쉽게 다시 말하면
요리로 치면 이렇다. 원래는 "맛을 올리려면 새로운 레시피를 개발해야 한다"고 생각했는데, 알고 보니 같은 레시피로도 재료 양과 불 세기와 조리 시간을 비율 맞춰 늘리면 맛이 예측 가능하게 좋아지더라는 것이다. 게다가 그 좋아지는 정도가 얼마나 늘렸는지만 알면 미리 계산이 된다.
Chinchilla가 나중에 지적한 건 "비율이 틀렸다"는 얘기다. GPT-3는 냄비만 엄청 크게 키우고 재료는 그만큼 안 넣었다는 것.
───【핵심】───
▶ 핵심 한 줄: 구조 혁신 없이도 파라미터·데이터·연산량을 키우면 성능이 거듭제곱 법칙에 따라 예측 가능하게 오른다는 게 GPT-3가 기대고 있는 전제다.
■ 4장. In-context learning — 키웠더니 뭐가 나왔나
▷ 논문의 핵심 주장
GPT-3가 보여준 새로운 능력은 이거다. 파라미터를 전혀 업데이트하지 않고, 추론 시점(학습이 다 끝난 모델을 실제로 사용하는 시점)에 프롬프트 안에 주어진 지시문과 예시만으로 새로운 태스크를 수행하는 것.
여기서 강조할 게 있다. gradient descent(경사하강법, 오차를 줄이는 방향으로 가중치를 조금씩 고쳐나가는 학습 과정)가 전혀 일어나지 않는다. 학습이라는 단어가 붙어있지만 실제로 모델이 바뀌는 일은 없다는 뜻이다. 파인튜닝(모델을 특정 태스크에 맞게 추가 학습시켜 가중치를 바꾸는 것)처럼 가중치에 지식이 저장되는 게 아니라, attention이 프롬프트 안의 예시 토큰들을 참고해서 다음 토큰 예측 패턴을 그 태스크에 맞게 조정하는 것뿐이다. 그 프롬프트 안에서만 일시적으로 작동하고, 프롬프트가 끝나면 아무것도 남지 않는다.
논문은 이걸 예시 개수에 따라 세 가지로 구분한다.
[표 ③ + 예시 ① — zero-shot / one-shot / few-shot 구분과 프롬프트 예시]
▷ 근거
논문은 20개가 넘는 NLP 데이터셋과, 학습 데이터에 직접 들어있을 가능성이 낮은 새로운 태스크들에 대해 이걸 측정했다. 아래에서 말하는 벤치마크는 모델 성능을 재기 위해 표준으로 쓰는 시험 문제 세트라고 보면 된다.
[그래프 ② — 42개 벤치마크 종합, zero/one/few-shot 곡선 비교]
여기서 핵심적인 관찰이 나온다. 42개 벤치마크를 종합했을 때, zero-shot 성능은 모델 크기에 따라 꾸준히 향상되는데 few-shot 성능은 그보다 훨씬 빠르게 증가한다. 즉 큰 모델일수록 in-context learning을 더 잘한다.
이게 왜 중요하냐면, "모델이 커지면 다 같이 좋아진다"가 아니라 "모델이 커질수록 프롬프트 안의 예시를 활용하는 능력 자체가 비례 이상으로 좋아진다"는 뜻이기 때문이다. 성능 향상의 절대값이 아니라 기울기가 달라진다.
실제 수치로도 확인된다.
[표 ④ — GPT-3 175B의 closed-book TriviaQA 성능]
closed-book은 참고할 외부 문서 없이 모델이 자기 안에 저장된 지식만으로 답하는 조건을 말한다.
▷ 의미 — GPT-2와 뭐가 다른가
여기서 흔히 하는 오해를 하나 정리하고 가야 한다. "GPT-2는 그냥 사람처럼 말하기만 했고 GPT-3부터 태스크를 수행할 수 있게 됐다"는 건 정확하지 않다.
GPT-2도 파인튜닝 없이 독해, 번역, 요약을 어느 정도 해냈다. 지난 GPT-2 글에서 다룬 그대로다. 다만 그 능력이 제한적이어서, 실용적으로 쓰려면 결국 파인튜닝이 필요했고 zero-shot 성능은 전용 모델보다 한참 뒤처졌다.
GPT-3가 새로 보여준 건 "태스크 수행 능력이 처음 생겼다"가 아니라 "파인튜닝 없이 프롬프트 예시 몇 개만으로 전용 모델급 성능에 근접할 수 있게 됐다"는 것이다. 작은 모델은 프롬프트에 예시를 넣어줘도 별 이득이 없는데, 큰 모델은 그 예시로부터 실제로 배우는 것처럼 성능이 뛴다.
▷ 의미 — "없던 능력이 갑자기 생긴 것"인가
이 부분은 논쟁이 있어서 정확히 구분해서 써둔다.
GPT-3 논문이 실제로 보여준 42개 벤치마크 종합 그래프는 매끄러운 곡선이다. 어느 지점까지 0이었다가 갑자기 튀는 계단이 없다. 다만 few-shot 곡선의 기울기가 zero-shot보다 가팔라서 격차가 벌어질 뿐이다.
그런데 개별 태스크 단위로 정확도를 보면 다르게 보이는 경우가 있다. 산술 연산 같은 건 어느 크기까지 거의 무작위 수준이다가 특정 크기를 넘는 순간 확 뛰는 것처럼 관찰된다. 이후 논문들이 이런 현상을 emergent abilities(창발적 능력, 작은 모델에는 없다가 일정 규모를 넘으면 나타나는 능력)라고 부르면서 "임계점을 넘으면 없던 능력이 생긴다"는 식으로 프레이밍했다.
여기에 반박이 나왔다. 그 갑작스러운 점프가 사실은 밑에 깔린 실제 능력은 매끄럽게 좋아지고 있는데, 정확도처럼 맞다/틀리다로 끊어버리는 지표(성능을 재는 잣대)가 그 점진적 개선을 계단처럼 왜곡해서 보여주는 것일 수 있다는 지적이다. 모델이 정답에 점점 높은 확률을 주고 있어도 "정확히 맞혔는가"만 보는 지표로는 아무것도 안 보이다가, 확률이 어느 선을 넘는 순간 틀림에서 맞음으로 한 번에 뒤집힌다.
정리하면 이렇다. 일반 성능 향상은 매끄러운 정량적 개선이 맞다. few-shot in-context learning은 정도의 차이를 넘어 질적으로 다른 활용 가능성을 열었다고 보는 게 타당하다. 다만 이걸 "능력이 뿅 하고 생겨났다"고 극적으로 해석하는 건 조심할 부분이고, 지금도 완전히 합의된 문제는 아니다.
▷ 쉽게 다시 말하면
파인튜닝은 시험 전에 그 과목만 따로 공부해서 뇌를 바꿔놓는 것이다. in-context learning은 시험지 맨 앞에 예제 문제 몇 개가 풀이와 함께 붙어있는 것이다. 뇌는 그대로인데 예제를 보고 "아 이런 식으로 풀면 되는구나" 파악해서 나머지를 푼다. 시험이 끝나면 그 요령은 남지 않는다. 다음 시험지에는 다시 예제가 붙어있어야 한다.
재밌는 건, 실력이 부족한 사람에게는 예제를 붙여줘도 별 도움이 안 된다는 점이다. 예제를 보고 패턴을 뽑아내는 것 자체가 실력이기 때문이다. 모델이 커질수록 few-shot 효과가 커지는 게 정확히 이 얘기다.
───【핵심】───
▶ 핵심 한 줄: in-context learning은 파라미터를 건드리지 않고 프롬프트 안 예시만으로 태스크를 수행하는 능력이고, 모델이 클수록 예시를 활용하는 능력 자체가 비례 이상으로 좋아진다.
═══════════════════════════════════════
마무리
═══════════════════════════════════════
■ GPT-2와 GPT-3의 차이 총정리
[표 ⑤ — GPT-2 대비 GPT-3 변화 총정리]
즉 데이터가 흘러가는 경로 자체는 완전히 같다. 토큰이 Masked Self-Attention → Add&LN → FFN → Add&LN을 거치는 순서는 안 바뀌었다. 그 경로를 몇 번 왕복하는지, 경로 위를 흐르는 벡터가 얼마나 굵은지, 그리고 Masked Self-Attention 안에서 어떤 위치를 참조하는지만 달라졌다.
■ 다음 글 예고
여기까지가 구조 얘기다. 그런데 GPT-3는 아직 챗봇이 아니다. 사전학습만 끝낸 GPT-3는 여전히 "그럴듯한 다음 텍스트를 이어쓰는" 모델이지, 사람의 지시를 따르려는 목표 자체가 없다.
GPT-3에서 ChatGPT로 가는 변화는 구조가 아니라 학습 파이프라인의 변화다. 순서로 보면 이렇다.
[표 ⑥ — GPT-3에서 ChatGPT까지의 발전 단계]
참고로 "GPT-3.5"는 특정 모델 하나의 이름이 아니라 code-davinci-002, text-davinci-002, text-davinci-003, gpt-3.5-turbo를 포함하는 계열 전체의 이름이다. ChatGPT도 그 계열 안의 한 멤버다.
이 중에서 학습 방식(목적함수) 자체가 바뀌는 지점은 두 군데다. SFT가 도입되는 지점과 RLHF가 도입되는 지점. 다음 두 글에서 각각 다룬다.
• SFT (지도 파인튜닝) 학습 파이프라인 정리
• RLHF (보상모델+PPO) 학습 파이프라인 정리
참고자료
Brown et al., Language Models are Few-Shot Learners (NeurIPS 2020)
Child et al., Generating Long Sequences with Sparse Transformers (2019)
Kaplan et al., Scaling Laws for Neural Language Models (2020)
Geva et al., Transformer Feed-Forward Layers Are Key-Value Memories (EMNLP 2021)
|
|
