Karpathy makemore bigram 실습: 문자 단위 언어모델을 손으로 이해하기 | DAKER 커뮤니티
Karpathy makemore bigram 실습: 문자 단위 언어모델을 손으로 이해하기
makemore bigram 실습은 한 글자가 다음 글자를 예측하는 가장 작은 언어모델 훈련입니다. Karpathy의 Zero to Hero 2강을 볼 때 핵심은 Transformer를 바로 이해하려 하기보다, 입력 텍스트가 확률표와 loss로 바뀌는 첫 루프를 손으로 따라가는 것입니다.

*이미지 설명: NotebookLM 카드형 이미지. names.txt 입력, bigram 빈도표, 확률 샘플링, negative log likelihood 평가로 이어지는 문자 단위 언어모델 실습을 정리했다.*
오늘 배울 것은 무엇인가요?
한 줄 요약: 이름 목록 같은 작은 텍스트에서 "앞 글자 다음에 어떤 글자가 올까"를 세고, 그 확률로 새 문자열을 샘플링합니다.
Karpathy의 makemore는 한 줄에 하나의 학습 항목이 있는 텍스트 파일을 입력으로 받아 비슷한 항목을 더 만들어 보는 교육용 언어모델입니다. 2강의 출발점은 bigram입니다. bigram은 현재 문자 하나로 다음 문자 하나를 예측하는 단순한 모델이지만, training, sampling, loss 평가라는 언어모델의 큰 골격을 모두 담고 있습니다.
질문 | bigram에서 보는 답 | 나중에 확장되는 곳 |
|---|---|---|
입력은 무엇인가요? | 한 줄짜리 문자열 목록 | 대규모 텍스트 corpus |
모델은 무엇을 하나요? | 다음 문자 확률 예측 | 다음 token 확률 예측 |
평가는 어떻게 하나요? | negative log likelihood | cross entropy loss |
핵심 개념은 어떻게 잡아야 하나요?
첫 번째 개념은 문자 vocabulary입니다. 입력 데이터에 등장하는 글자를 모으고, 시작과 끝을 표시하는 특별 토큰을 둡니다. 그래야 "단어가 어떻게 시작되는가"와 "언제 끝나는가"도 모델이 배울 수 있습니다.
두 번째 개념은 count table입니다. 예를 들어 e 다음에 m이 몇 번 왔는지, a 다음에 끝 토큰이 몇 번 왔는지 세면 bigram 빈도표가 됩니다. 이 표를 행별로 정규화하면 다음 문자 확률표가 됩니다.
세 번째 개념은 loss입니다. 모델이 실제 다음 문자에 높은 확률을 주면 loss가 낮고, 낮은 확률을 주면 loss가 높습니다. Karpathy 강의는 이 흐름을 통해 language modeling framework, sampling, negative log likelihood를 함께 보여 줍니다.

*이미지 설명: NotebookLM 슬라이드형 워크플로. 입력 텍스트 준비, vocabulary와 시작/끝 토큰, bigram count table, 확률 정규화와 샘플링, loss 계산, MLP와 GPT 연결 단계를 보여 준다.*
따라 해볼 실습은 어떻게 진행하나요?
아래 25분 실습으로 시작하세요. 처음부터 전체 names.txt를 쓰지 말고, 직접 만든 작은 목록으로 손계산을 먼저 해보는 편이 좋습니다.
민준,서연,지우,하준,도윤처럼 짧은 이름 10~20개를 준비합니다.시작 토큰
.과 끝 토큰.을 붙여 문자 쌍을 만듭니다.(현재 글자, 다음 글자)가 몇 번 나왔는지 표로 셉니다.각 행을 합으로 나누어 다음 문자 확률로 바꿉니다.
시작 토큰에서 출발해 확률에 따라 다음 글자를 뽑고, 끝 토큰이 나오면 멈춥니다.
실제 다음 글자에 부여한 확률로 negative log likelihood를 계산해 봅니다.
AI에게 검산을 맡길 때는 이렇게 요청하세요.
아래 이름 목록으로 문자 단위 bigram count table을 손계산해 주세요.
시작/끝 토큰은 "."으로 두고, 각 행을 확률로 정규화한 뒤
새 이름을 3개 샘플링하는 과정을 설명해 주세요.
마지막에는 negative log likelihood가 왜 필요한지도 짧게 설명해 주세요.자주 막히는 지점은 무엇인가요?
가장 흔한 실수는 생성된 샘플이 그럴듯해 보이면 모델을 이해했다고 착각하는 것입니다. bigram은 문맥을 한 글자만 보기 때문에 긴 구조를 잘 기억하지 못합니다. 그래서 샘플과 loss를 함께 봐야 합니다.
실수 방지 체크리스트입니다.
시작/끝 토큰을 빼먹지 않았나요?
count table의 행 합이 0인 경우를 처리했나요?
확률로 정규화한 뒤 각 행 합이 1에 가까운지 확인했나요?
샘플 몇 개만 보고 모델 품질을 판단하지 않았나요?
loss를 계산할 때 실제 다음 문자 확률을 사용했나요?
bigram의 한계를 MLP, CNN, Transformer의 필요성과 연결했나요?
다음 학습 연결은 어디로 이어지나요?
makemore bigram은 카파시식 AI 학습법: 작은 모델을 직접 만져라의 구체적인 실습판입니다. "작은 모델을 만진다"는 말이 막연했다면, bigram 표 하나를 직접 세는 것부터 시작하면 됩니다.
이후에는 nanochat 실습: $100 ChatGPT로 LLM 전체 파이프라인 익히기와 연결됩니다. bigram은 문자 하나의 다음 확률을 보지만, nanochat은 토크나이저, pretraining, finetuning, evaluation, inference, chat UI까지 LLM 학습 단계를 한 번에 묶습니다. 모델을 목적함수 관점으로 바라보는 태도는 Software 2.0: 코드를 쓰는 대신 목적함수를 설계하는 시대와도 이어집니다.
공식 출처:
Andrej Karpathy, Neural Networks: Zero to Hero
karpathy/nn-zero-to-hero README
karpathy/makemore README
한계도 있습니다. 이 글은 2026년 6월 24일 기준 공개된 Karpathy 강의 페이지와 GitHub README를 바탕으로 한 학습 루틴입니다. bigram은 교육용 출발점이므로 실제 LLM의 긴 문맥, 토큰화 이슈, 대규모 학습 안정성까지 설명하지는 않습니다.
FAQ
makemore bigram은 너무 단순하지 않나요?
단순해서 좋습니다. 언어모델의 입력, 확률, 샘플링, loss를 가장 작은 형태로 보기 때문에 나중에 Transformer를 볼 때 구조가 덜 낯설어집니다.
한국어 이름으로도 실습할 수 있나요?
가능합니다. 다만 문자 단위로 쪼갤 때 자모가 아니라 완성형 글자 단위로 시작하면 더 쉽습니다. 목표는 좋은 이름 생성기가 아니라 언어모델 루프 이해입니다.
negative log likelihood는 왜 필요한가요?
생성 샘플만 보면 운 좋게 좋아 보일 수 있습니다. negative log likelihood는 실제 다음 문자에 모델이 얼마나 높은 확률을 줬는지 평균적으로 보는 기준입니다.
바로 GPT 강의로 넘어가도 되나요?
가능하지만 makemore를 거치면 GPT의 다음 토큰 예측, loss, sampling을 더 쉽게 이해합니다. Karpathy도 GPT 강의 전에 makemore 흐름에 익숙해지는 것을 권합니다.
다음에는 무엇을 하면 좋나요?
오늘 만든 bigram 표에서 샘플 10개와 loss를 같이 기록해 보세요. 그 다음 MLP makemore로 넘어가면 "왜 더 깊은 모델이 필요한가"를 더 선명하게 볼 수 있습니다.