통계 실험실 차트
넘스탯 로고
넘스탯
LEARN · SIMULATE · VERIFY

확률부터 LLM까지, 원리부터 제대로 배우는 자기주도 학습 플랫폼

로그인
학습 메뉴
도움말

디코더 아틀라스 — 숫자로 걷는 트랜스포머

"이 문장 다음엔 무슨 토큰?" — 그 답이 나오기까지 9단계의 모든 행렬을 실제 값으로

원하는 개념·랩·가이드를 검색해보세요

Ctrl K
LLM 실습실로Transformer 아키텍처 이론

설명 그림은 많이 봤는데, 실제 숫자가 어떻게 흘러가는지는 본 적이 없다면

Transformer 블록 해부실이 부품을 끄면 무엇이 무너지는가를 봤다면, 여기서는 숫자가 어떻게 흐르는가를 봅니다. d=4·헤드 2·블록 2·어휘 195(흥부놀부 말뭉치 BPE)짜리 소형 모델이라 모든 행렬을 화면에 다 펼칠 수 있어요. 가중치는 학습된 것이 아니라 고정 시드값이라 예측이 자연스러울 이유는 없지만 — 계산 자체는 실제 트랜스포머 디코더 수식 그대로이고, 검증 스크립트가 손계산·마스크·인과성을 단언합니다.
이 페이지에서 배우고 나면
  • 토큰 ID가 4차원 벡터가 되고, 위치가 더해지고, Q·K·V로 갈라져 어텐션 표가 만들어지는 과정을 실제 값으로 추적합니다.
  • 인과 마스크(−∞)가 왜 "학습을 가능하게 하는 장치"인지 — 마지막 위치만 쓰는 추론과 모든 위치를 쓰는 학습의 차이를 로짓 표에서 봅니다.
  • Add&Norm이 왜 각 행의 평균을 0으로 만드는지, softmax가 왜 합 1인지를 표의 숫자로 확인합니다.
예측 먼저 — 실험 전에 답을 정해 보세요
예측 → 실험 → 확인

정답을 몰라도 괜찮습니다 — 먼저 예측을 정해야 시뮬레이션 결과가 기억에 남습니다. 예측을 고른 뒤 아래 시뮬레이션으로 직접 확인하고, 그다음 결과를 열어 보세요.

1. 어텐션 표에서 대각선 오른쪽 위가 전부 −∞(빗금)입니다. 이 마스크의 역할은?
2. ⑨ 확률 탭에서 1위 후보의 확률이 2%도 안 됩니다. 왜일까요?
로그인하면 예측 기록이 계정에 저장됩니다

어느 기기에서든 이어서 학습하고, 오답 기반 복습 추천을 받을 수 있습니다.

카카오로 시작하기네이버로 시작하기구글로 시작하기
회원가입 절차 없음 — 닉네임만 저장하며, 이메일·연락처는 수집하지 않습니다.
디코더 아틀라스 — 프롬프트가 확률이 되기까지

문장을 넣으면 토큰화 → 임베딩 → 어텐션 → FFN → 로짓 → 확률의 9단계가 모든 중간 숫자와 함께 다시 계산됩니다.

흥부는 제비의 다리를
놀부는 박씨를 마당에
가을이 되자 지붕 위에
제비는 다시 날게 되어
흥부는139
제비143
98
다리를184
4 토큰
디코더 구조 — 노드를 클릭하면 그 단계로
트랜스포머 디코더 구조입력 토큰이 임베딩, 위치 인코딩, 마스킹 멀티헤드 어텐션, Add&Norm, 피드포워드, 선형 계층과 softmax를 거쳐 다음 토큰 확률이 되는 과정. 노드를 클릭하면 해당 단계의 실제 숫자를 볼 수 있습니다.입력 프롬프트InputEmbeddingPositionalEncodingBLOCK 1MaskedMulti-HeadAttentionAdd & NormFeedForwardAdd & NormBLOCK 2 … NLinearSoftmax다음 토큰 확률
① 입력 토큰화

문장을 어휘집에 있는 조각으로 나눕니다. 어휘집은 사람이 고른 단어 목록이 아니라, 말뭉치에서 BPE로 학습해 만든 것입니다. 자주 쓰인 말은 통째로 한 토큰이 되고 드문 말은 여러 조각으로 쪼개집니다.

FORMULA
text → [piece₁, …, pieceₜ] → [id₁, …, idₜ]
흥부는
ID 139
제비
ID 143
ID 98
다리를
ID 184
문자열
4개 토큰
정수 ID
이 어휘집은 어떻게 만들어졌나

미리 정해 둔 단어 목록이 아닙니다. 아래 동화 한 편을 읽고 BPE(Byte Pair Encoding)로 학습한 결과입니다. 실제 LLM이 어휘집을 만드는 절차와 같습니다.

STEP 1

말뭉치를 읽는다

흥부와 놀부 · 482자 · 186단어(고유 116개)
옛날 어느 마을에 흥부와 놀부 형제가 살았다.
형 놀부는 욕심이 많았고 동생 흥부는 마음이 착했다.
부모가 남긴 재산을 놀부가 모두 차지하자 흥부는 집을 떠났다.
흥부는 작은 집을 짓고 가난하게 살았지만 늘 웃음을 잃지 않았다.
어느 봄날 흥부는 다리가 부러진 제비 한 마리를 보았다.
흥부는 제비의 다리를 정성껏 묶어 주고 날마다 돌보았다.
제비는 다시 날게 되어 강남으로 떠났다.
이듬해 봄 제비가 돌아와 흥부에게 박씨 하나를 물어다 주었다.
흥부는 박씨를 마당에 심고 정성껏 길렀다.
가을이 되자 지붕 위에 커다란 박이 주렁주렁 열렸다.
흥부가 톱으로 박을 켜자 쌀과 금은보화가 쏟아져 나왔다.
흥부는 하루아침에 큰 부자가 되었다.
소문을 들은 놀부는 흥부를 찾아가 자초지종을 물었다.
놀부는 제비를 잡아 일부러 다리를 부러뜨리고 다시 묶어 주었다.
이듬해 제비는 놀부에게도 박씨 하나를 물어다 주었다.
놀부는 박씨를 마당에 심고 날마다 커다란 박을 기다렸다.
가을이 되자 놀부의 지붕 위에도 박이 주렁주렁 열렸다.
놀부가 톱으로 박을 켜자 도깨비가 쏟아져 나왔다.
도깨비는 놀부의 재산을 모두 가져갔다.
가난해진 놀부는 그제야 자기 잘못을 뉘우쳤다.
흥부는 형을 용서하고 재산을 나누어 함께 살았다.
두 형제는 그 뒤로 오래도록 사이좋게 살았다.
한국 전래동화 · 저작자 미상(공유 저작물)을 학습용으로 짧게 간추린 판본
STEP 2

가장 작은 단위에서 출발한다

말뭉치에 등장한 낱글자 134개가 최초의 어휘집입니다. 이 상태에서는 "흥부는"이 흥·부·는 세 조각입니다.

STEP 3

가장 자주 붙어 나온 쌍을 합친다

이웃한 두 조각의 등장 횟수를 세어 1위 쌍을 하나로 합치고 어휘집에 추가합니다. 이 과정을 60번 반복했습니다.

병합 순서 (앞 12단계)먼저 합쳐진 규칙일수록 먼저 적용됩니다
01+부는13
02+12
03+11
04+9
05+부는흥부는8
06+놀부6
07+았다6
08+6
09+제비6
10+6
11+5
12+부는놀부는5
처음에는 "부 + 는 → 부는"처럼 조사가 붙고, 그 조각들이 다시 합쳐져 "▁흥부는" 같은 한 단어가 통째로 토큰이 됩니다.
최종 어휘집

195

<unk> 1 + 낱글자 134 + 병합 60
단어당 평균

2.27조각

학습 전에는 단어당 2.59조각
STEP 4

완성된 어휘집 195

ID 0 – 194 · 이 랩이 실제로 쓰는 어휘집 전체입니다

특수 토큰

1ID 0어휘집에 없는 글자가 떨어지는 자리
0<unk>

낱글자

134ID 1–134말뭉치에 나온 글자를 모은 출발점
1.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134

병합으로 생긴 토큰

60ID 135–194병합 순서대로 붙은 ID
135부는
136
137
138
139흥부는
140놀부
141았다
142
143제비
144
145
146놀부는
147
148
149었다
150흥부
151
152
153
154
155박씨
156살았다
157
158재산
159재산을
160다리
161
162으로
163
164
165주었다
166렸다
167박을
168
169
170어느
171형제
172놀부가
173
174모두
175
176집을
177
178떠났
179떠났다
180가난
181
182부러
183보았다
184다리를
185
186정성
187정성껏
188
189묶어
190날마
191날마다
192
193제비는
194다시

학습된 것은 어휘집뿐입니다. 이 랩의 어텐션·FFN 가중치는 여전히 결정론적 수식으로 만든 고정값이라, 예측된 다음 토큰이 이야기 내용과 맞아떨어지지는 않습니다. 실제 모델은 같은 말뭉치로 가중치까지 학습합니다.

디코더 구조 — 노드를 누르면 그 단계로
트랜스포머 디코더 구조입력 토큰이 임베딩, 위치 인코딩, 마스킹 멀티헤드 어텐션, Add&Norm, 피드포워드, 선형 계층과 softmax를 거쳐 다음 토큰 확률이 되는 과정. 노드를 클릭하면 해당 단계의 실제 숫자를 볼 수 있습니다.입력 프롬프트InputEmbeddingPositionalEncodingBLOCK 1MaskedMulti-HeadAttentionAdd & NormFeedForwardAdd & NormBLOCK 2 … NLinearSoftmax다음 토큰 확률
실측 요약 — 이 실습이 보여주는 것

문장을 넣으면 토큰화 → 임베딩 → 위치 결합 → [마스킹 멀티헤드 어텐션 → Add&Norm → FFN → Add&Norm]×2 → 로짓 → softmax 의 9단계가 모든 중간 행렬과 함께 다시 계산되는 실험입니다. 소형 결정론 디코더(d=4·헤드 2·블록 2·FFN 8·어휘 195, 파라미터 1,255개)라 모든 값을 표로 펼칠 수 있고, 단계 탭·블록/헤드 선택으로 원하는 위치의 실제 숫자를 봅니다. 어휘는 『흥부와 놀부』 482자 말뭉치에서 BPE 병합 60회로 만든 것이라 토큰화 표에서 어휘가 "만들어진" 과정까지 보입니다. 정직성 규약 — 계산은 실제 디코더 수식 그대로지만 가중치는 학습된 것이 아니라 고정 시드값(화면에 명시), 그래서 예측이 자연스러울 이유가 없으며 랩은 "계산의 흐름"만 보여줍니다.

  • 인과 마스크 실측: 모든 블록·헤드에서 j>i 어텐션 가중치가 정확히 0이고 각 행 합이 1이며, 첫 토큰은 자기 자신에게 1.00. 인과성의 결정적 증거 — 프롬프트 뒤에 토큰을 덧붙여도 앞 위치들의 최종 표현은 소수점 12자리까지 완전히 불변(검증 스크립트 단언). 이것이 T개 위치를 한 순전파로 동시에 학습할 수 있는 이유다
  • BPE 손계산: "▁흥부는"은 [▁,흥]→[부,는]→[▁흥,부는] 세 번 병합으로 단일 토큰이 되고, "▁제비의"는 [▁제비, 의]로 쪼개진다(어휘에 "의"를 붙이는 병합 규칙이 없어서). 기본 프롬프트 "흥부는 제비의 다리를"은 4토큰 — "▁다리를"이 통째로 한 토큰(병합 순위 49). 어휘 195 = 기본 문자 134 + 병합 60 + <unk>
  • 학습 전 분포의 실측: softmax 상위 1위 확률이 2% 미만(195개 균등 시 0.51%) — 로짓이 시드 잡음이라 서로 비슷하기 때문. LayerNorm 출력은 행마다 평균 0·분산 1, PE(0)=[0,1,0,1], softmax 합=1이 부동소수 수준으로 검증된다. 파라미터 폐형: 블록당 4d²+d·f+f+f·d+d = 140, 전체 2×140 + 195×4 + 195 = 1,255

바로잡는 오개념: "트랜스포머는 그림으로 이해했으니 됐다"는 생각 — 그림은 화살표를 보여주지만 화살표를 따라 실제로 무슨 숫자가 흐르는지는 숨긴다. 이 랩에서 표를 직접 보면 세 가지가 분명해진다: ① 어텐션 표의 각 행은 확률(합 1)이고 마스크는 −∞로 "없는 값"이 아니라 "0 확률"을 만든다 ② Add&Norm은 매 토큰 벡터를 평균 0·분산 1로 재조정하는 산술이지 마법이 아니다 ③ 로짓은 위치마다 나오지만 추론은 마지막 행만 쓴다 — 구조가 아니라 "무엇을 꺼내 쓰느냐"의 차이다.

AI 튜터에게 물어보기
베타

— 정답 대신 힌트로 유도합니다. 지금 화면의 실험 상태를 알고 답해요.

예: “방금 결과가 이론과 다른데 왜죠?”, “이 값을 올렸는데 왜 반대로 변하죠?”

AI 답변은 부정확할 수 있습니다. 핵심 개념은 반드시 시뮬레이션 실측으로 확인하세요. 질문 0/5 · 하루 질문 한도가 있습니다
직접 해보기 — 실습 과제
  1. 토큰화 관찰: "흥부는"은 한 토큰인데 "흥부의"는 어떻게 쪼개질까요? ① 탭의 병합 표에서 이유를 찾아보세요 (BPE는 자주 붙어 다니는 쌍만 병합합니다)
  2. 위치의 힘: 같은 단어를 두 번 넣어("놀부는 놀부는") ③ 탭에서 두 행이 달라지는지 확인하세요 — 임베딩은 같지만 위치 벡터가 다릅니다
  3. 마스크 확인: ④ 탭에서 첫 토큰의 행을 보세요 — 자기 자신에게 1.00입니다. 볼 수 있는 게 자기뿐이니까요
  4. 두 헤드의 관점: 헤드 1과 2를 번갈아 보며 마지막 토큰이 참조하는 곳이 갈리는 프롬프트를 찾아보세요
  5. Add&Norm 검산: ⑤ 탭 표의 한 행을 골라 네 값을 더해 보세요 — 0에 가깝습니다(LayerNorm의 정의)
  6. 추론 vs 학습: ⑧ 탭에서 "추론이 쓰는 행"은 하나뿐인데 나머지 행도 계산되는 이유를 설명해 보세요
📖 더 깊이 학습하기
  • Vaswani et al. (2017): "Attention Is All You Need", NeurIPS 2017 — 사인·코사인 위치 인코딩, Scaled Dot-Product, 멀티헤드의 원전
  • Sennrich, Haddow & Birch (2016): "Neural Machine Translation of Rare Words with Subword Units", ACL — 이 랩의 어휘를 만든 BPE 토큰화
  • Radford et al. (2018): "Improving Language Understanding by Generative Pre-Training" — 디코더만 쌓은 GPT 구조