오늘도 공부
Microgpt 분석 #1 본문
microgpt
This is a brief guide to my new art project microgpt, a single file of 200 lines of pure Python with no dependencies that trains and inferences a GPT. This file contains the full algorithmic content of what is needed: dataset of documents, tokenizer, autog
karpathy.github.io
🧠 순수 파이썬으로 GPT를 직접 만들 내용을 분석
— 외부 라이브러리 없이, 아주 작은 GPT(microGPT) 구현기
“이름을 잔뜩 읽고, 다음 글자를 맞히는 연습을 해서,
결국 새로운 이름을 만들어내는 프로그램.”
오늘 소개할 microgpt.py는
PyTorch도, TensorFlow도 없이,
오직 순수 파이썬만으로 GPT를 구현한 교육용 코드입니다.
이 한 파일 안에는 다음이 전부 들어 있습니다:
- 데이터 준비
- 글자 → 숫자 변환
- 자동미분(autograd) 구현
- 트랜스포머(GPT) 구현
- 학습 루프
- 새로운 이름 생성
📌 이 코드가 하는 일 (한 문장 버전)
이름을 많이 읽고 “다음 글자가 뭐가 올지” 맞히는 연습을 한 뒤,
그걸 이용해 새로운 이름을 한 글자씩 만들어내는 프로그램입니다.
예를 들어:
emily
를 보면 모델은 이렇게 배웁니다:
- e 다음엔 m이 자주 오네?
- m 다음엔 i가 자주 오네?
- i 다음엔 l이 자주 오네?
이 감각이 쌓이면,
이제 처음부터 끝까지 새 이름을 만들어낼 수 있게 됩니다.
🗺 전체 구조 한눈에 보기
1️⃣ 이름 데이터 준비
2️⃣ 글자를 숫자로 바꾸기 (토크나이저)
3️⃣ 자동미분 구현 (어디를 고칠지 계산하는 장치)
4️⃣ 미니 GPT 모델 만들기
5️⃣ 학습 (1000번 연습)
6️⃣ 새 이름 20개 생성
1️⃣ 이름 데이터 준비
프로그램은 먼저 input.txt가 있는지 확인합니다.
없다면:
- 인터넷에서 names.txt 다운로드
- 파일 저장
- 한 줄씩 읽어서 리스트에 담기
- 순서를 섞기(셔플)
왜 섞을까요?
👉 항상 같은 순서로 공부하면 편식할 수 있기 때문입니다.
docs = 이름들이 잔뜩 들어있는 상자
2️⃣ 글자 → 숫자로 바꾸기 (토크나이저)
컴퓨터는 글자보다 숫자를 좋아합니다.
그래서 등장하는 모든 글자에 번호를 붙입니다.
예:
a = 0
b = 1
c = 2
...
그리고 특별한 토큰을 하나 추가합니다.
BOS = 시작/끝 표시 토큰
- 토크나이저 = 글자 스티커를 숫자 스티커로 바꾸는 기계
- BOS = 출발선 스티커
3️⃣ 자동미분(Autograd) 구현하기
이 코드의 가장 멋진 부분입니다.
Value 클래스는 숫자 하나를 저장하지만,
단순 숫자가 아닙니다.
그 숫자가:
- 어떻게 계산되었는지
- 어디서 왔는지
- 틀렸다면 어떻게 고쳐야 하는지
까지 기억합니다.
내부 구성
- data → 실제 숫자
- grad → 얼마나 고쳐야 할지 방향
- backward() → 계산을 거꾸로 따라가며 기울기 계산
🎓 비유
문제를 틀렸을 때:
“어디 때문에 틀렸는지”
“어디를 고치면 되는지”
선생님이 알려주는 것과 같습니다.
이 코드는 그 선생님을 **수학 공식(체인룰)**로 구현합니다.
4️⃣ 미니 GPT 만들기
이제 진짜 GPT를 만듭니다.
하지만 초소형 버전입니다.
n_layer = 1
n_embd = 16
block_size = 16
n_head = 4
진짜 GPT가 초대형 도서관이라면,
이건 교실 책장 정도입니다.
📦 모델이 기억하는 것들
모델의 지식은 숫자 행렬로 저장됩니다.
- wte → 글자 임베딩
- wpe → 위치 임베딩
- attn_wq, attn_wk, attn_wv, attn_wo → 어텐션
- mlp_fc1, mlp_fc2 → 작은 신경망
- lm_head → 다음 글자 점수표
이 모든 숫자는 Value 객체로 만들어져
자동으로 학습됩니다.
🧠 GPT 핵심 원리 쉽게 이해하기
1) 임베딩 = 글자에게 성격 카드 주기
글자 ‘a’는 단순한 문자입니다.
하지만 GPT는 이렇게 생각합니다:
a는 이런 특징 16개를 가진 존재야.
그래서 각 글자는 16차원 숫자 벡터로 표현됩니다.
🎒 비유:
글자에게 “성격 카드 16장”을 쥐어주는 것.
2) 어텐션 = 과거를 돌아보기
어텐션은 이렇게 말합니다:
다음 글자를 만들 때,
앞에서 쓴 글자 중 무엇이 중요할까?
구성 요소:
- Query → 내가 찾는 힌트
- Key → 과거 글자들의 특징
- Value → 참고할 실제 정보
🎒 비유:
손전등으로 중요한 과거 글자에 불빛을 비추는 것.
3) MLP = 한 번 더 생각하기
어텐션으로 모은 정보를
작은 신경망이 다시 섞어서 결론을 냅니다.
여기서는 ReLU를 사용합니다.
5️⃣ 학습 (Training)
이제 1000번 반복합니다.
한 번의 학습 과정:
- 이름 하나 선택
- [BOS] 이름 [BOS] 형태로 구성
- 매 위치에서 다음 글자 맞히기
- 틀리면 벌점 계산 (loss)
- backward()로 어디를 고칠지 계산
- Adam 알고리즘으로 조금씩 수정
📉 Loss란?
모델이 만든 확률 중에서
정답 글자의 확률이 낮으면 벌점이 커집니다.
🎒 비유:
퀴즈에서 틀리면 감점
잘 맞히면 감점 적음
목표: 벌점을 계속 줄이기
🛠 Adam이란?
그냥 고치면 흔들릴 수 있습니다.
Adam은:
- 최근에 어떻게 고쳤는지 기억
- 너무 크게 흔들리지 않게 조절
즉, “안정적인 수정 요령”입니다.
6️⃣ 생성 (Inference)
학습이 끝나면 새 이름을 만듭니다.
과정:
- BOS에서 시작
- 다음 글자 확률 계산
- 확률에 따라 하나 선택
- BOS 나오면 종료
🌡 Temperature = 창의력 다이얼
temperature = 0.5
- 낮으면 → 안전하고 비슷비슷
- 높으면 → 창의적이지만 이상해질 수도
🎒 비유:
- 낮음 = 교과서 스타일
- 높음 = 상상력 폭발
🎮 직접 해보면 재밌는 실험
- num_steps = 3000 → 더 오래 학습
- temperature = 0.2 → 더 안전
- temperature = 1.0 → 더 창의적
- n_embd 증가 → 더 똑똑하지만 느림
💡 왜 이 코드가 좋은가?
1️⃣ GPT의 핵심 구조만 남겨 흐름이 명확하다
2️⃣ 자동미분을 직접 구현해 학습 원리를 이해할 수 있다
3️⃣ 대형 프레임워크 없이 트랜스포머의 뼈대를 보여준다
🎯 마무리
이 microgpt.py는
GPT가 왜 학습되는지
어텐션이 왜 필요한지
자동미분이 어떻게 동작하는지
를 “감각적으로 이해”하게 해주는 코드입니다.
거대한 모델을 쓰기 전에,
이 작은 GPT를 한 번 직접 돌려보세요.
GPT가 마법이 아니라,
수학과 반복 연습의 결과라는 걸 느끼게 됩니다.
다음에는 코드로 좀 더 자세하게 분석해보겠습니다.
'AI' 카테고리의 다른 글
| Microgpt 코드 분석 #2 (0) | 2026.02.20 |
|---|---|
| AI 에이전트 오케스트레이션 바닥부터 #1 (0) | 2026.02.17 |
| WebMCP Starter webmcp-starter 정리: “Midnight Eats”로 보는 에이전트 친화적인 웹 주문 흐름 (0) | 2026.02.14 |
| Excalidraw MCP 서버 아키텍처 가이드 (0) | 2026.02.12 |
| UI/UX Pro Max 검색 시스템 분석 문서 (0) | 2026.02.07 |
