전체 글 251

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

MNIST Lab 8편 - BatchNorm forward/backward 직접 구현하기

MNIST Lab 기본 구현 8편BatchNorm은 미니배치의 평균과 분산을 이용해 값을 정규화한다. 구현에서는 학습 모드와 평가 모드가 다르고, backward에서는 gamma, beta, x에 대한 gradient를 모두 계산해야 한다.1. BatchNorm의 역할1평균 계산현재 미니배치 feature별 평균을 구한다.2분산 계산feature별 값이 평균 주변에 얼마나 퍼졌는지 구한다.3정규화평균 0, 분산 1에 가까운 값으로 바꾼다.4scale/shiftgamma와 beta로 다시 적절한 크기와 위치로 조정한다.2. forward에서 값이 어떻게 변하는가BatchNorm은 입력 shape를 바꾸지 않는다. 대신 각 feature 열의 분포를 정리한다. 예를 들어 x가 (128, 512)라면 128개..

카테고리 없음 2026.05.29

MNIST Lab 7편 - NeuralNetwork로 계층 조립하기

MNIST Lab 기본 구현 7편이제 개별 부품을 하나의 모델로 묶는다. NeuralNetwork는 params를 만들고, 계층을 순서대로 쌓고, forward와 backward를 통해 전체 신경망을 통과시킨다.1. 모델 구조베이스 모델은 784개 입력을 512, 256 은닉층을 거쳐 10개 숫자 클래스로 보낸다.1입력MNIST 28x28 이미지를 펼친 784차원 벡터2은닉층 1Affine1 - BatchNorm1 - ReLU1 - Dropout13은닉층 2Affine2 - BatchNorm2 - ReLU2 - Dropout24출력층Affine3 - Softmax2. params, layers, grads가 어떻게 연결되는가NeuralNetwork 구현에서 헷갈리는 지점은 계층을 쌓는 코드보다 이름의 연..

카테고리 없음 2026.05.29

MNIST Lab 6편 - Adam update 직접 구현하기

MNIST Lab 기본 구현 6편Adam은 SGD보다 코드가 길지만, 생각은 단순하다. gradient의 방향 기록 m과 크기 기록 v를 따로 저장하고, 초반 보정을 거쳐 파라미터별 이동량을 조절한다.1. Adam이 기억하는 두 가지기록의미직관mgradient의 이동평균최근 어느 방향으로 계속 가려 했는지 기억한다.vgradient 제곱의 이동평균어느 파라미터가 크게 흔들렸는지 기억한다.tupdate 횟수초반에 m, v가 0에서 시작해 작게 잡히는 문제를 보정한다.Adam을 한 문장으로 보면SGD가 매 순간 gradient만 보고 걷는다면, Adam은 최근 방향과 흔들림 크기를 함께 보고 보폭을 조절한다.2. 최종 구현 코드class Adam: def __init__(self, lr=0.001): ..

카테고리 없음 2026.05.29

MNIST Lab 5편 - SGD update 직접 구현하기

MNIST Lab 기본 구현 5편SGD는 가장 단순한 파라미터 갱신 규칙이다. gradient가 손실이 증가하는 방향을 가리킨다면, 우리는 그 반대 방향으로 learning rate만큼 움직인다.1. SGD 공식업데이트 공식은 단순하다. param = param - lr * grad다. 여기서 lr은 한 번에 얼마나 크게 움직일지 정하는 학습률이다.1gradient 계산현재 파라미터를 어느 방향으로 바꾸면 loss가 커지는지 알게 된다.2반대 방향 이동loss를 줄이고 싶으므로 gradient 반대 방향으로 움직인다.3in-place 갱신params 딕셔너리 안의 배열을 직접 수정한다.2. 최종 구현 코드class SGD: def __init__(self, lr=0.01): self.l..

카테고리 없음 2026.05.29