English
AI Foundations

Language Model언어 모델

ChatGPT도 이 페이지의 모델도 규칙은 하나입니다. 지금까지 나온 글을 보고 다음 조각을 맞힙니다. 파라미터 약 7만 개짜리 트랜스포머를 여러분 브라우저에서 직접 학습시키며, 아무 글자나 내던 모델이 헌법처럼 보이는 문장을 쓰게 되는 과정을 봅니다.

Tokenization

모델은 숫자만 봅니다. 그래서 먼저 글을 조각(토큰)으로 자르고 조각마다 번호를 붙입니다. 이 페이지는 한국어를 자모로 자릅니다. '한'은 ㅎ + ㅏ + ㄴ이 됩니다. 그러면 음절 380가지 대신 토큰 약 75가지만 남습니다.

초성중성받침
헌법, 1,000단계, 시드 1토큰 종류Next Token 검증 손실바이그램 검증 손실차이
음절로 자르기3803.2853.157+0.128
자모로 자르기(이 페이지)751.5832.087−0.504

손실 값은 같은 자르기 방식 안에서만 비교합니다. 자모가 음절보다 작은 단위이기 때문입니다. 음절로 자르면 이 작은 모델은 1,000단계 안에 바이그램을 넘지 못했고, 자모로 자르면 0.50 앞섰습니다.

요약모델은 번호 붙은 글 조각(토큰)을 읽습니다.어떻게 자르느냐에 따라 문제의 난이도가 바뀝니다.진짜 LLM은 데이터에서 배운 단어 조각(BPE)을 씁니다.

체험: BPE 어휘 배우기

BPE(byte-pair encoding)는 글자 하나씩에서 시작해, 가장 자주 붙어 나오는 두 토큰을 새 토큰 하나로 합치기를 되풀이합니다. 슬라이더로 말뭉치 앞 4,000자에서 배운 합치기를 늘려 가며, 내 문장이 어떻게 잘리는지 보세요.

참고문헌

  1. Sennrich, R., Haddow, B., Birch, A. (2016). Neural machine translation of rare words with subword units. ACL.
  2. Data: Constitution of the Republic of Korea (KoNLPy kolaw; not copyrighted, Copyright Act art. 7) · NSMC CC0 1.0 · Tiny Shakespeare (public domain, karpathy/char-rnn)

Bigram Baseline

다음 토큰을 맞히는 가장 단순한 방법은 세는 것입니다. 학습 글에서 각 토큰 뒤에 무엇이 왔는지 세어 확률로 바꿉니다. 이것이 바이그램 모델입니다. 학습이 필요 없지만 늘 한 토큰 뒤만 봅니다. 트랜스포머가 이걸 못 이기면 쓸모 있는 걸 배우지 못한 것입니다.

작은 트랜스포머 (앞 64토큰까지 봄)

바이그램 (마지막 토큰만 봄)

요약바이그램은 마지막 토큰 하나로만 추측합니다.학습 곡선에서 트랜스포머가 내려가야 할 선입니다.트랜스포머가 더하는 것은 문맥입니다.

체험: 바이그램 표

행은 지금 글자, 열은 다음 글자(가장 흔한 글자 24개, 진할수록 자주). 행을 누르세요.

체험: 바이그램으로 글 쓰기

글자마다 바로 앞 글자만 보므로, 짧게는 그럴듯해도 글이 표류합니다. 다음 탭의 트랜스포머가 메우는 것이 이 틈입니다.

참고문헌

  1. Shannon, C.E. (1948). A mathematical theory of communication. Bell System Technical Journal 27.

Loss & Overfitting

한 단계마다 64토큰짜리 창 8개를 무작위로 뽑아 손실을 재고, 7만 개 숫자를 각각 어느 쪽으로 움직여야 손실이 줄지 계산(역전파)한 뒤 조금 움직입니다(AdamW). 학습 손실은 외우기만 해도 계속 내려갑니다. 정직한 점수는 처음 보는 글로 잰 검증 손실입니다. 학습 손실은 내려가는데 검증 손실이 멈추면 외우기 시작한 것입니다. 이것이 과적합입니다.

검증 손실, 1,000단계, Node 22시드 1바이그램글자 빈도만고르게 찍기
요약학습은 손실이 줄도록 모든 숫자를 조금씩 미는 것입니다.평가는 학습에 쓰지 않은 글로 합니다.글이 짧은데 오래 돌리면 외웁니다.

체험: 손실 숫자 읽기

체험: 학습률 일정

이 페이지의 학습기: 30단계 워밍업 뒤 1,000단계 동안 0.01에서 0.0005로 코사인 감소(AdamW). 워밍업은 아직 크기가 맞지 않은 첫 갱신을 작게 하고, 감소는 끝에 자리를 잡게 합니다.

참고문헌

  1. Vaswani, A. et al. (2017). Attention is all you need. NeurIPS.
  2. Loshchilov, I., Hutter, F. (2019). Decoupled weight decay regularization. ICLR.
  3. Data: Constitution of the Republic of Korea (KoNLPy kolaw; not copyrighted, Copyright Act art. 7) · NSMC CC0 1.0 · Tiny Shakespeare (public domain, karpathy/char-rnn)

Attention

각 층에서 모든 위치는 질문(query)을 만들고, 앞의 위치들은 열쇠(key)를 내놓습니다. 질문과 열쇠가 얼마나 맞는지로 앞 토큰의 값(value)을 얼마나 가져올지 정합니다. 이 모델은 2층 × 머리 4개입니다. 아래에서 밝은 토큰일수록, 마지막 위치가 다음을 맞힐 때 그 토큰을 많이 봅니다.

요약어텐션은 앞 토큰들을 가중치를 두고 돌아보는 것입니다.가중치는 글 자체에서 계산되므로 입력마다 달라집니다.학습 전에는 가중치가 거의 고르게 퍼져 있습니다.

체험: 질의 하나, 열쇠 다섯

어텐션은 질의 벡터를 모든 열쇠와 비교하고(내적), 소프트맥스로 점수를 가중치로 바꾸고, 그 가중치로 값들을 평균합니다. 흰 질의 화살표를 끌어 보세요. 인과 마스크를 켜면 지금 토큰(4번째)은 뒤 토큰을 볼 수 없습니다.

체험: 왜 √d로 나누나

분산 1인 무작위 벡터의 d항 내적은 표준편차가 √d입니다. 나누지 않으면 d가 클수록 점수 16개의 소프트맥스가 거의 한 칸에 몰려 기울기가 사라집니다. √d로 나누면 어느 d에서나 퍼짐이 같습니다. (무작위 2,000번, 시드 고정)

참고문헌

  1. Vaswani, A. et al. (2017). Attention is all you need. NeurIPS.

Sampling

모델이 내놓는 건 확률뿐입니다. 글을 쓰려면 그 확률대로 토큰 하나를 뽑아 붙이고 다시 반복합니다. 온도는 확률로 바꾸기 전에 점수를 나누는 값입니다. 1보다 작으면 흔한 토큰이 더 흔해져 글이 되풀이되고, 1보다 크면 확률이 평평해져 글이 무너집니다.

작은 트랜스포머

바이그램

요약글쓰기는 모델의 확률에서 토큰을 하나씩 뽑는 일입니다.온도는 되풀이와 엉터리 사이를 조절합니다.같은 시드면 같은 글이 나옵니다.

체험: 분포 하나에 온도·top-k·top-p

"오늘 날씨는" 뒤에 올 후보 12개와, 보기로 손으로 정한 그럴듯한 점수(로짓).

참고문헌

  1. Holtzman, A. et al. (2020). The curious case of neural text degeneration. ICLR.

From Tiny to Large

구조는 같습니다. 토큰 임베딩, 위치 임베딩, 어텐션, 피드포워드 층, 층 정규화를 쌓습니다. 다른 것은 규모와, 사전 학습 뒤에 하는 일입니다.

이 페이지GPT-2 (2019)GPT-3 (2020)
파라미터약 6.7만1.24억~15억1,750억
층 × 머리2 × 412×12 ~ 48×2596 × 96
문맥 길이자모 64개1,024토큰2,048토큰
학습 글자모 약 3.4만 개WebText 40GB3,000억 토큰

대화형 AI는 한 단계를 더 거칩니다. 다음 토큰 맞히기로 사전 학습한 뒤, 예시 대화와 사람의 선호 평가로 다시 조정합니다(RLHF). 그 단계에서 지시를 따르는 법을 익히지만, 속에서 도는 엔진은 여전히 다음 토큰을 맞힙니다.

요약부품은 같고, 크기는 수백만 분의 1입니다.차이의 대부분은 데이터와 파라미터의 규모입니다.지시 따르기는 사전 학습 뒤의 조정에서 옵니다.

체험: 매개변수 세기

GPT식 디코더: 층마다 약 12·d²(어텐션 4d², 피드포워드 8d²)에 토큰·위치 임베딩. 편향과 층 정규화는 뺐으므로 실제 모델과 조금 다릅니다.

체험: 계산 예산 나눠 쓰기

학습 비용은 대략 6 × 매개변수 × 토큰 수 번의 연산입니다. 예산이 정해지면 큰 모델을 적은 글로, 작은 모델을 많은 글로 학습할 수 있습니다. 아래는 Chinchilla 논문이 맞춘 식으로 나눔마다 손실을 예측한 것이고, 뚜렷한 가장 낮은 곳이 있습니다. 같은 논문의 실험 기반 방법은 그 비율을 매개변수당 토큰 약 20개로, 이 식은 그보다 크게 잡으므로 정확한 숫자는 대략으로 보세요.

C ≈ 6·N·D · L(N, D) = 1.69 + 406.4 / N^0.34 + 410.7 / D^0.28 (Hoffmann et al. 2022, fit)

참고문헌

  1. Radford, A. et al. (2019). Language models are unsupervised multitask learners. OpenAI.
  2. Brown, T. et al. (2020). Language models are few-shot learners. NeurIPS.
  3. Kaplan, J. et al. (2020). Scaling laws for neural language models. arXiv:2001.08361.
  4. Ouyang, L. et al. (2022). Training language models to follow instructions with human feedback. NeurIPS.

교육용 장난감입니다. 생성된 글은 법 해석이나 누군가의 의견이 아니며, 손실 값은 맞을 확률이 아닙니다.