-
MicroGPT는 200줄짜리 순수 Python 코드로 작성된 GPT 모델의 최소 구현체로, 대형 언어모델의 핵심 구조를 시각적으로 이해할 수 있게 구성됨
- 32,000개의 인간 이름 데이터셋을 학습해 새로운 이름을 생성하며, 토크나이징·예측·손실 계산·역전파 과정을 단계별로 시각화함
-
Softmax, Cross-Entropy Loss, Backpropagation, Embedding, Attention 등 GPT의 주요 구성 요소를 코드와 함께 설명함
- 학습 과정에서는 Adam 옵티마이저를 사용해 손실을 점차 줄이고, 이후 온도 조절(Temperature Sampling) 을 통해 다양한 이름을 생성함
- 이 스크립트는 ChatGPT와 같은 대형 모델의 핵심 알고리듬을 단순화한 형태로, LLM의 내부 작동 원리를 이해하는 교육용 예시로 중요함
MicroGPT 개요
-
Andrej Karpathy가 작성한 200줄짜리 Python 스크립트를 기반으로, GPT 모델의 학습과 추론 과정을 시각적으로 해설
- 외부 라이브러리 없이 순수 Python만으로 구현
- ChatGPT와 같은 대형 언어모델의 기본 알고리듬을 그대로 포함
- 글은 초보자 친화적인 시각적 접근을 통해 모델의 각 단계를 단계별로 보여줌
데이터셋과 학습 목표
- 32,000개의 인간 이름(예: emma, olivia, ava 등)을 학습 데이터로 사용
- 각 이름은 하나의 문서로 간주되며, 모델은 이름의 문자 패턴을 학습
- 학습 후 “kamon”, “karai”, “anna”, “anton” 등의 새로운 이름을 생성
- 모델은 문자 간의 통계적 관계, 이름의 길이, 시작과 끝의 음운 패턴 등을 학습
텍스트를 숫자로 변환하는 과정
- 신경망은 숫자만 처리하므로, 각 문자를 정수 ID로 변환
- a–z는 0–25, BOS(Beginning of Sequence)는 26으로 지정
- BOS 토큰은 이름의 시작과 끝을 표시
- 실제 GPT-4의 tiktoken은 문자 대신 문자 조각 단위로 토큰화하지만, 원리는 동일
다음 토큰 예측
- 모델은 주어진 문맥에서 다음 문자를 예측
- 예: [BOS] → “e”, [BOS, e] → “m”, [BOS, e, m] → “m”, [BOS, e, m, m] → “a”
- 각 단계는 입력(문맥)과 목표(다음 문자) 쌍을 생성하며, 이 방식은 ChatGPT와 동일
Softmax와 확률 계산
- 모델 출력은 27개의 로짓(logit) 으로 구성되며, Softmax를 통해 확률로 변환
- 각 로짓을 지수화 후 합으로 나누어 확률 분포 생성
- 최대값을 빼는 연산은 오버플로 방지를 위한 안정화 처리
- Softmax 결과는 각 토큰이 다음에 등장할 확률을 나타냄
손실 계산: Cross-Entropy
- 예측의 정확도를 −log(p) 로 계산
- 정답 확률이 높을수록 손실이 낮고, 0에 가까울수록 손실이 커짐
- p=1일 때 손실 0, p→0일 때 손실 무한대
- 학습은 이 손실을 최소화하는 방향으로 진행
역전파(Backpropagation)
- 손실을 기준으로 각 파라미터가 손실에 미치는 영향을 계산
- 모든 연산(add, multiply, exp, log 등)을 노드로 구성한 계산 그래프를 통해 미분 수행
- 각 노드는 입력과 지역 미분값을 저장하고, 역방향으로 그래디언트를 전파
- 예시: L = a⋅b + a (a=2, b=3) → a의 그래디언트는 4.0 (두 경로의 합)
- PyTorch의 loss.backward()와 동일한 원리
임베딩(Embedding)
- 각 토큰 ID는 16차원 벡터로 변환되어 의미를 학습
- 토큰 임베딩과 위치 임베딩을 더해 입력으로 사용
- 위치에 따라 같은 문자의 역할이 달라짐
- 학습 후 유사한 문자(예: 모음)는 유사한 벡터를 갖게 됨
어텐션(Attention)
- 각 토큰은 Query, Key, Value 벡터를 생성
- Query와 Key의 내적을 통해 관련성을 계산하고, Softmax로 가중치를 산출
- 가중합된 Value가 출력으로 사용
-
Causal Mask를 적용해 미래 토큰을 참조하지 않음
- 4개의 어텐션 헤드가 병렬로 작동하며, 서로 다른 패턴을 학습
전체 GPT 구조
- 입력 토큰은 다음 단계를 거침
- 임베딩 + 위치 임베딩
- RMSNorm 정규화
- 멀티헤드 어텐션
- 잔차 연결(Residual)
- MLP(64차원 확장 → ReLU → 16차원 축소)
- 다시 잔차 연결 후 출력 로짓 계산
-
Residual 연결은 그래디언트 소실을 방지
-
RMSNorm은 활성값의 크기를 일정하게 유지해 학습 안정화
학습 루프
- 1,000회 반복 학습
- 이름 선택 → 토크나이즈 → 순전파 → 손실 계산 → 역전파 → 파라미터 업데이트
-
Adam 옵티마이저 사용
- 초기 손실 약 3.3에서 2.37로 감소
- 생성된 이름이 무작위에서 점차 자연스러운 형태로 발전
추론(Inference)과 샘플링
- 학습 후에는 BOS로 시작해 다음 토큰을 반복적으로 예측
-
Temperature로 샘플링 다양성 조절
- 낮을수록 결정적(평균적), 높을수록 창의적이지만 불안정
- 이름 생성의 적정 온도는 약 0.5
- 예시 출력: “karai”
효율성과 확장성
- MicroGPT는 GPT의 핵심 알고리듬을 단순화한 완전 구현체
- ChatGPT와의 차이는 규모뿐임
- 32,000개 이름 대신 수조 개 토큰, 4,192개 파라미터 대신 수천억 개 파라미터
- CPU 기반 스칼라 연산 대신 GPU 텐서 연산 사용
- 기본 루프는 동일: 토크나이즈 → 임베딩 → 어텐션 → 예측 → 손실 → 역전파 → 업데이트
결론
- MicroGPT는 GPT의 내부 작동 원리를 직관적으로 학습할 수 있는 교육용 모델
- 대규모 LLM의 복잡한 구조를 단순화해, 언어모델의 핵심 메커니즘을 직접 체험할 수 있게 함