Karpathy GPT from scratch 실습: self-attention을 작은 코드로 이해하기 | DAKER 커뮤니티

작은 GPT를 token embedding, causal mask, 다음 토큰 샘플링으로 나누어 보는 NotebookLM 카드.
Karpathy GPT from scratch 실습은 거대한 챗봇을 바로 복제하는 일이 아니라, 작은 텍스트에서 다음 토큰을 예측하는 Transformer 구조를 손으로 좁혀 보는 학습입니다. 지금 중요한 이유는 LLM을 쓰는 사람도 token, context, attention mask가 어디서 품질과 비용을 바꾸는지 설명해야 하기 때문입니다.
self-attention이란, 한 시점의 토큰이 같은 문맥 안의 이전 토큰들을 가중합해 다음 표현을 만드는 계산을 의미합니다.
오늘 배울 것은 무엇인가요?
한 줄 요약: makemore WaveNet 실습까지 따라왔다면, 이제 문자 모델을 더 깊게 쌓는 단계에서 GPT의 attention block으로 넘어갈 차례입니다.
이 글은 작은 코드로 GPT 구조를 이해하고 싶은 학습자가 바로 따라 할 순서를 제시합니다.
중심 주제: Karpathy GPT from scratch
함께 익힐 표현: self-attention 실습, Transformer 구조, GPT 구현, 다음 토큰 예측
연결 학습: 작은 모델 학습법, makemore bigram, makemore MLP, WaveNet shape-first 순서로 보면 부담이 줄어듭니다.
GPT from scratch는 어떤 문제를 작게 만들까요?
공식 확인 기준으로 Karpathy의 Zero to Hero GPT 강의는 Attention Is All You Need와 GPT 계열 구조를 따라 Generatively Pretrained Transformer를 from scratch로 구현합니다. 이 글은 2026년 6월 27일 확인한 공개 강의 페이지와 공식 코드 기준으로 정리했습니다.
핵심은 모델 이름을 외우는 것이 아니라 자동회귀 언어모델의 반복 구조를 보는 것입니다. 입력 토큰을 embedding으로 바꾸고, 위치 정보를 더하고, causal mask가 미래 토큰을 가린 뒤, 마지막 위치의 logits에서 다음 토큰을 뽑습니다.
핵심 개념은 query, key, value를 어떻게 보는 것인가요?
개념 | 한 문장 설명 | 실습 확인 포인트 |
|---|---|---|
query | 현재 토큰이 무엇을 찾는지 표현합니다. | shape가 (B,T,hs)인지 확인합니다. |
key | 각 이전 토큰이 어떤 단서인지 표현합니다. | q @ k.transpose 결과가 (B,T,T)인지 봅니다. |
value | 실제로 섞어 가져올 정보입니다. | attention weight와 곱해지는지 확인합니다. |
causal mask | 미래 토큰을 보지 못하게 막습니다. | upper triangle이 -inf로 가려지는지 봅니다. |

query, key, value와 causal mask, residual 블록, generate 루프를 단계별로 정리한 NotebookLM 워크플로 카드.
따라 해볼 실습은 어떤 순서가 좋을까요?
긴 말뭉치 대신 짧은 텍스트 하나로 시작합니다.
문자를 정수 토큰으로 바꾸고 (B,T) batch를 출력합니다.
token embedding과 position embedding을 더한 뒤 shape를 적습니다.
query, key, value 텐서를 만들고 attention score의 (B,T,T)를 확인합니다.
causal mask를 씌운 전후를 작은 행렬로 비교합니다.
마지막 토큰 logits만 뽑아 다음 토큰을 샘플링합니다.
자주 막히는 지점은 어디인가요?
block_size를 키우기 전에 작은 T에서 attention 행렬을 눈으로 확인하지 않습니다.
mask가 없으면 모델이 미래 정답을 훔쳐보는 문제를 놓칩니다.
loss만 보고 query/key/value의 shape 오류를 늦게 발견합니다.
Residual과 LayerNorm을 “성능 트릭”으로만 보고 gradient 흐름 안정화 역할을 놓칩니다.
공식 코드의 간단한 구조를 보기도 전에 대형 프레임워크 설정부터 시작합니다.
다음 학습 연결은 어떻게 잡으면 좋을까요?
nanochat 파이프라인 지도와 nanochat 전체 흐름 글은 토크나이저, 사전학습, 평가, 추론, UI를 한 장으로 보는 데 도움이 됩니다. 오늘 GPT block을 이해했다면 다음 글에서는 문자열이 token id가 되는 tokenizer 단계를 따로 떼어 보겠습니다.
공식 출처 기준으로 어디까지 확실한가요?
Karpathy Zero to Hero 공식 페이지는 GPT 강의가 from scratch 구현이며, 이전 makemore 영상의 자동회귀 언어모델·tensor·PyTorch nn 지식을 전제로 한다고 설명합니다.
공식 gpt.py는 Head, MultiHeadAttention, FeedForward, Block, GPTLanguageModel, generate 루프를 한 파일에서 보여 줍니다.
이 글의 공개 링크는 DAKER 정책에 따라 확인된 DAKER 내부 글만 사용했습니다.
자주 묻는 질문
GPT from scratch를 보기 전에 makemore를 꼭 해야 하나요?
필수는 아니지만 강하게 권합니다. makemore bigram, MLP, BatchNorm, WaveNet을 거치면 batch, context, loss, shape를 이미 알고 들어갈 수 있습니다.
처음부터 GPU가 필요한가요?
구조 이해만 목표라면 작은 텍스트와 작은 차원으로 CPU에서도 흐름을 볼 수 있습니다. 큰 모델 훈련이 아니라 attention 계산을 설명하는 것이 첫 목표입니다.
가장 먼저 디버깅할 값은 무엇인가요?
attention score의 shape와 causal mask입니다. 여기서 틀리면 loss가 그럴듯해 보여도 모델이 잘못된 정보를 보고 있을 수 있습니다.
이 실습이 실제 LLM 사용에 왜 도움이 되나요?
context length, 토큰 수, 다음 토큰 예측의 제약을 이해하면 프롬프트 길이, 비용, 출력 실패를 더 현실적으로 판단할 수 있습니다.
오늘은 전체 GPT를 이해하려 하지 말고, 작은 attention 행렬 하나가 미래 토큰을 가리는지부터 직접 확인해 보세요.