캡스톤 · 1
미니 트랜스포머 조립
트랜스포머는 셀프-어텐션으로 시퀀스 전체를 한 번에 읽는다: 각 위치가 다른 위치들의 정보를, 얼마나 관련 있는지로 가중해 끌어온다. 인과 마스크가 그것을 언어 모델로 만든다 — 토큰은 자기 과거만 볼 수 있다. 여기서는 이미 만난 부품들로 인과 어텐션 블록 하나를 조립한다. 모든 것이 이 페이지에서, 양 언어로 돈다.
셀프-어텐션: 모든 위치가 서로를 저울질한다
각 위치 쌍을 내적(√D 로 스케일)으로 점수 매기고, 각 행을 softmax 로 분포로
만든다. 행 i 는 토큰 i 가 — 자기 자신을 포함해 — 모든 토큰에서
얼마나 끌어오는지를 말한다.
인과 마스크: 앞을 훔쳐보지 않기
softmax 전에 대각선 위쪽 모든 점수에 −1e9 를 더해, 그 미래 위치들이 0
가중치를 받게 한다. 결과는 하삼각이다: 토큰 i 는 토큰 0…i 만
본다.
블록 조립
각 위치의 값 벡터를 어텐션 가중치로 섞은 뒤, 입력을 다시 더한다 — 잔차 연결이다. 시퀀스가 들어가 시퀀스가 나오고, 각 토큰은 이제 자기 과거의 요약을 지닌다. 이 블록을 몇 번 쌓으면 GPT 의 핵심이 된다.
직접: 인과적으로 만들기
이 블록은 토큰 0 이 미래(위치 1…T−1)에 얼마나 가중치를 주는지 보고한다. 언어 모델이라면 그 값은 0 이어야 한다 — 첫 토큰은 자기 뒤에 오는 것을 볼 수 없다. 빈 마스크를 인과 마스크로 바꿔라.
인과 마스크, 그려보기
어텐션 가중치를 히트맵으로: 밝은 하삼각과 어두운 상삼각. 각 행이 한 토큰이고, 어두운 칸은 봐선 안 되는 미래다. 이 한 장의 그림이 트랜스포머를 언어 모델로 만든다.
기억할 것
- 셀프-어텐션은 각 위치가 다른 위치들의 정보를 관련도로 가중해 섞게 한다.
- 인과 마스크(softmax 전, 대각선 위 −∞)가 언어 모델로 만든다: 토큰은 자기 과거만 본다.
- 트랜스포머 블록은 어텐션 + FFN + 잔차 + 레이어 정규화; 쌓으면 GPT.
- 여기서는
mm·softmax·triu마스크로 만들었다 —nn.MultiheadAttention이 감싸는 그 산술.