2026/05 60

mini GPT 공부 4편 - Multi-Head Attention은 왜 head를 나누는가

밑바닥부터 만드는 mini GPT 공부 시리즈 4편self-attention 하나로도 각 토큰이 문맥을 참고할 수 있다. 그런데 GPT는 보통 attention을 하나만 쓰지 않고 여러 head로 나눈다.핵심은 여러 관점이다. 같은 문장을 보더라도 한 head는 가까운 단어 관계를, 다른 head는 문장 전체 분위기를, 또 다른 head는 특정 패턴을 더 잘 보도록 학습될 수 있다.이번 글에서 다루는 것head를 나눈다는 말의 shape 의미`d_model`과 `n_heads`, `head_dim`의 관계각 head 결과를 다시 합치는 이유Multi-Head Attention을 shape 흐름으로 읽는 법1. head는 embedding 차원을 나눈 작은 attention 공간이다입력 벡터의 마지막 차원..

카테고리 없음 2026.05.31

mini GPT 공부 3편 - Self-Attention과 Causal Mask

밑바닥부터 만드는 mini GPT 공부 시리즈 3편embedding까지 끝나면 각 토큰은 벡터가 된다. 하지만 벡터가 되었다고 해서 문맥을 이해하는 것은 아니다. 각 위치의 토큰이 앞뒤 토큰과 어떤 관계를 맺는지 계산해야 한다.self-attention은 같은 문장 안의 토큰들이 서로를 참고하는 방식이다. GPT에서는 여기에 causal mask가 붙어서 현재 토큰이 미래 토큰을 보지 못하게 만든다.이번 글에서 다루는 것attention이 “어떤 토큰을 얼마나 참고할지” 정하는 방식Query, Key, Value를 너무 어렵게 보지 않는 방법causal mask가 왜 다음 토큰 예측에서 필수인지attention score, softmax, weighted sum의 흐름1. Attention은 참고 비율을..

카테고리 없음 2026.05.31

mini GPT 공부 2편 - Dataset과 Embedding, 다음 토큰 예측 샘플 만들기

밑바닥부터 만드는 mini GPT 공부 시리즈 2편BPE가 문장을 token ID 목록으로 바꾸었다면, 다음 단계는 그 목록을 학습 샘플로 자르는 일이다. GPT는 현재까지의 토큰을 보고 다음 토큰을 맞히도록 학습한다.이 단계에서 자주 헷갈리는 지점은 두 가지다. 첫째, input과 target은 길이가 같지만 한 칸 밀려 있다. 둘째, token ID는 그 자체로 의미 벡터가 아니므로 embedding을 거쳐야 한다.이번 글에서 다루는 것GPTDataset이 input과 target을 어떻게 만드는지context_length와 stride가 샘플 수에 어떤 영향을 주는지token embedding과 position embedding을 왜 더하는지최종 입력 shape가 왜 `(batch_size, seq..

카테고리 없음 2026.05.31

mini GPT 공부 1편 - 한글 토큰화와 byte-level BPE

밑바닥부터 만드는 mini GPT 공부 시리즈 1편GPT는 문자열을 직접 읽지 않는다. 먼저 문장을 숫자 ID의 목록으로 바꾼다. 이 변환을 담당하는 부품이 토크나이저다.이번 과제에서 중요한 지점은 교재처럼 이미 만들어진 토크나이저를 쓰지 않는다는 점이다. 특히 한글 리뷰 데이터를 다루기 때문에, 공백 기준 단어 분리보다 더 낮은 단위에서 시작해야 한다.이번 글에서 다루는 것토큰화가 왜 GPT 구현의 첫 단계인지한글에서 공백 기준 토큰화가 왜 쉽게 무너지는지UTF-8 byte에서 시작하는 BPE가 어떤 문제를 해결하는지encode와 decode에서 가장 조심해야 할 복원 원칙1. 토큰화는 문장을 모델의 입력으로 바꾸는 번역기다사람은 “이 영화는 정말 좋았다”를 문장으로 읽는다. 하지만 모델은 이 문장을 ..

카테고리 없음 2026.05.31

mini GPT 공부 0편 - LLM을 직접 만든다는 것은 무엇을 쌓는 일인가

밑바닥부터 만드는 mini GPT 공부 시리즈 0편LLM을 처음 공부할 때 가장 위험한 착각은 ChatGPT 같은 결과물을 바로 떠올리는 것이다. 과제에서 만드는 모델은 거대한 챗봇이 아니라, GPT 계열 모델의 핵심 부품을 손으로 조립해보는 교육용 mini GPT다.그래서 이 시리즈의 출발점은 거창한 생성 결과가 아니다. 텍스트가 숫자가 되고, 숫자가 벡터가 되고, 벡터가 서로를 참고하고, 마지막에 다음 토큰 점수로 바뀌는 흐름을 잡는 것이다.이번 글에서 잡을 관점LLM은 문장을 한 번에 이해하는 블랙박스가 아니라, 다음 토큰을 예측하도록 훈련되는 모델이다.mini GPT 구현은 토크나이저, 데이터셋, 임베딩, 어텐션, 트랜스포머 블록, 학습 루프를 순서대로 쌓는 일이다.책 공부 시리즈는 코드 전체를 ..

카테고리 없음 2026.05.31

MNIST Lab - 기본 MLP에 random 1px shift 적용하기

MNIST Lab 데이터 증강 실험기본 MNIST MLP 구현에서 출발해 학습 데이터에만 1픽셀 랜덤 이동을 적용하는 실험을 만든다.핵심부터 말하면기본 MNIST MLP 모델은 그대로 두고, 학습 batch에만 1픽셀 랜덤 이동을 적용해 본다. 모델 구조를 바꾸지 않고 입력 데이터만 살짝 흔들었을 때 학습 흐름이 어떻게 바뀌는지 확인하는 실험이다.이 글의 성공 기준독자가 기본 MLP 코드가 있는 상태에서 증강 함수와 학습 루프 변경 지점을 추가해 같은 실험을 실행할 수 있어야 한다.1. 왜 1픽셀만 움직이나선택지의미이번 글의 판단0픽셀원본 그대로 학습기본 모델 기준점이다.1픽셀숫자를 위/아래/좌/우/대각선으로 조금 이동MNIST 숫자의 의미는 유지하면서 위치 변화에 익숙하게 만든다.큰 이동숫자 위치가 크..

카테고리 없음 2026.05.30

MNIST Lab - 기본 MLP에서 CNN+BatchNorm 모델 구현하기

MNIST Lab CNN 실험기본 MNIST Lab 구현 위에 CNN+BatchNorm 모델을 직접 추가한 기록이다. 어떤 파일을 만들고 어떤 계층을 구현해야 하는지 코드 기준으로 정리한다.핵심부터 말하면이 글은 기본 MLP 구현에서 출발해 CNN+BatchNorm 모델을 새로 추가하는 실험 기록이다. 목표는 784개 픽셀을 한 줄로만 보던 모델에서 벗어나, MNIST 이미지를 이미지 모양 그대로 처리하는 모델을 직접 구성하는 것이다.이 글의 성공 기준독자가 기본 MNIST Lab 코드가 있는 상태에서 새 CNN 계층 파일, CNN 모델 파일, Momentum, CNN 학습 루프를 추가해 같은 방향의 실험을 실행할 수 있어야 한다.1. 왜 MLP에서 CNN으로 바꾸는가구분기본 MLPCNN 도전입력 해석..

카테고리 없음 2026.05.30

MNIST Lab 11편 - 21개 테스트와 98.41% 결과 해석하기

MNIST Lab 기본 구현 11편마지막 글은 구현 결과를 해석한다. 21개 테스트는 부품 검증이고, 98.41% 정확도는 실제 MNIST 학습 검증이다. 둘은 비슷해 보이지만 의미가 다르다.1. 21 passed가 의미하는 것테스트 21개는 ReLU, Softmax, Affine, 손실 함수, 옵티마이저, 네트워크 조립, 학습 루프가 최소 조건을 만족했는지 확인한다.구분확인한 것확인하지 않는 것계층 테스트forward/backward shape와 기본 계산실제 데이터에서 정확도가 높은지optimizer 테스트파라미터가 변하는지최적 학습률인지train/evaluate 테스트루프가 동작하는지loss가 충분히 잘 내려가는지2. 실제 학습 결과항목값모델 구조784 - 512 - 256 - 10BatchNorm..

카테고리 없음 2026.05.30

MNIST Lab 10편 - train/evaluate로 학습 루프 완성하기

MNIST Lab 기본 구현 10편이제 모든 부품을 실제 학습 루프로 연결한다. train()은 미니배치를 만들고, forward, loss, backward, optimizer update를 반복하며 epoch별 loss를 기록한다.1. 학습 루프의 전체 순서1데이터 섞기epoch마다 인덱스를 섞어 batch 순서를 바꾼다.2미니배치 만들기batch_size만큼 입력과 정답을 잘라 가져온다.3Forwardmodel.forward로 예측 확률을 만든다.4Losscross_entropy_loss로 벌점을 계산한다.5Backward 시작점softmax + cross entropy gradient를 만든다.6Backwardmodel.backward로 각 계층 gradient를 계산한다.7Updateoptimi..

카테고리 없음 2026.05.30

MNIST Lab 9편 - Dropout forward/backward 직접 구현하기

MNIST Lab 기본 구현 9편Dropout은 학습 중 일부 뉴런을 무작위로 끄는 계층이다. 핵심은 학습 모드에서는 mask를 만들고, backward에서는 같은 mask로 gradient도 막는 것이다.1. Dropout이 막는 문제모델이 특정 뉴런 몇 개에만 과하게 의존하면 훈련 데이터에는 잘 맞지만 새로운 데이터에는 약해질 수 있다. Dropout은 학습 때 일부 뉴런을 랜덤하게 꺼서 이런 의존을 줄인다.1학습 모드랜덤 mask를 만들고 일부 뉴런 출력을 0으로 만든다.2역전파꺼졌던 뉴런 위치는 gradient도 흐르지 않게 한다.3평가 모드랜덤하게 끄지 않고 평균적인 출력 크기만 맞춘다.2. 최종 구현 코드class Dropout: def __init__(self, drop_ratio=0...

카테고리 없음 2026.05.29