"zero"라고 쓰면 0을 그리는 조건부 디퓨전 모델을 111만 파라미터로 만들었습니다. 노이즈를 섞는 forward는 공식 한 줄이고, 복원하는 reverse는 그 한 줄을 400번 거꾸로 밟는 것뿐입니다. 5편에서 L1 손실이 색을 바래게 만든 문제를 디퓨전이 어떻게 피해 가는지, 그리고 왜 모델이 노이즈를 예측하도록 학습되는지를 실제 생성 결과로 확인합니다.
시리즈에서 가장 작은 모델인 47만 파라미터 U-Net으로 CIFAR-10 흑백 이미지를 컬러로 복원했습니다. 형태는 정확히 살렸지만 색이 눈에 띄게 바랬는데, 이건 모델 용량 문제가 아니라 L1 손실을 고른 결과입니다. skip connection이 무엇을 나르는지, 그리고 회귀 손실이 왜 채도를 죽이는지를 실제 결과 이미지로 확인합니다.
CNN 인코더와 트랜스포머 디코더를 이어 붙여 Fashion-MNIST 이미지에 캡션을 다는 모델을 만들었습니다. 137만 파라미터, 10분 학습으로 라벨 적중률 91%가 나왔습니다. 인코더-디코더 구조에서 cross-attention이 무엇을 하는지, 그리고 3편에서 정확도를 7.5%로 떨어뜨렸던 EOS 버그가 왜 이 코드에는 없었는지를 두 함수를 나란히 놓고 확인합니다.
이미지와 질문을 함께 받아 답하는 VQA 모델을 148만 파라미터로 만들었습니다. 학습 손실은 0.0017까지 떨어졌는데 정확도는 7.5%였습니다. 무작위보다 나쁜 수치였죠. 원인은 모델이 아니라 정답을 만드는 코드 한 줄이었고, 고치자 99.5%가 됐습니다. 왜 낮은 손실이 좋은 모델을 보장하지 않는지, 그리고 그 함정을 어떻게 알아채는지를 실제 출력으로 확인합니다.
GPU 한 장으로 언어모델을 처음부터 학습시켜 봅니다. TinyStories 데이터셋과 1,600만 파라미터짜리 디코더 전용 트랜스포머로 15분 만에 읽히는 영어 동화를 생성했습니다. 어텐션 마스크가 왜 필요한지, 가중치 묶기가 무엇을 절약하는지, perplexity 20이 실제로 어떤 문장을 뜻하는지를 실제 학습 로그와 생성 결과로 확인합니다. RTX 3090 실측 기준.