4장 전체 코드를 한 줄씩, 그림으로.

실제 노트북의 줄을 선택하면 역할·입출력·그림이 함께 보입니다. 먼저 ‘실행 흐름’을 따라간 뒤 각 부품 안으로 들어가세요.

① 어디에 쓰이나?main → 전체 모델 → 블록 → 세부 부품 순서로 내려갑니다.
② 준비인가, 계산인가?__init__은 도구 준비, forward는 입력에서 출력 계산입니다.
③ 무엇이 바뀌나?값·벡터 차원·토큰 수 중 무엇이 바뀌는지 구분합니다.
실행 흐름 안내

그림의 숫자·작은 ID는 설명용입니다. PyTorch 실행 결과가 아닙니다.

헷갈리면 이 기준으로 돌아오세요.

여기서 학습되는 것은 무엇인가요?

임베딩 표, Linear의 행렬·편향, LayerNorm의 scale·shift 등이 학습 가능한 파라미터입니다. forward에서 Q/K/V와 Attention 비율을 계산하는 것은 학습과 생성 모두에서 합니다. 파라미터 갱신은 별도의 loss.backward()와 optimizer.step()에서 하며, 현재 main에는 없습니다.

왜 토큰이 늘어나는 줄과 벡터가 바뀌는 줄을 구분하나요?

TransformerBlock은 (B,T,D)를 유지하며 내용을 바꿉니다. FeedForward는 내부에서 D를 4D로 바꿨다 D로 돌립니다. 출력 층은 D를 V로 바꿉니다. 생성 함수의 cat만 전체 ID 목록의 토큰 수를 1 늘립니다.

‘레이어’가 다 같은 뜻인가요?

nn.Linear 같은 개별 변환 층도 레이어라고 부르지만, n_layers=12는 TransformerBlock 12개를 뜻합니다. head=12는 각 Attention 안의 병렬 계산 개수입니다. 학습 데이터 조각 수는 이 둘과 별개입니다.

그림이 실제 모델의 내부 값인가요?

아닙니다. 이해를 돕기 위해 B=1,T=3,D=4,V=6,H=2,L=2의 작은 예를 사용합니다. 실제 노트북 코드는 바꾸지 않았습니다. ‘원래 모델 차원 표시’를 켜면 D=768,V=50257,H=12,L=12인 크기 라벨로 바뀌지만, 표시된 행렬의 칸 수나 설명용 숫자는 그대로입니다. 원래 문장의 실제 토큰화·학습 결과를 뜻하지 않습니다.

노트북의 빈칸·주석은 어떤 상태인가요?

현재 로컬 노트북에는 앞선 대화에서 채워진 답안이 있습니다. 이 페이지는 그 파일의 실제 코드를 그대로 읽어 만들었습니다. TODO·힌트와 원래 주석은 ‘주석·설명문도 보기’ 또는 ‘노트북 전체 원문’에서 확인할 수 있습니다. 이번 작업은 노트북을 수정하지 않습니다.

기존 1일차 실습 · 개념과 코드 연결 보충 · 텐서 기초