프롬프트를 입력하면
무슨 일이 일어나는가

LLM의 내부 동작 원리를 단계별로 시각화

✂️토크나이징
Step 1
→
📐임베딩
Step 2
→
🔗어텐션
Step 3
→
🎯다음 토큰
Step 4
✂️ Step 1

토크나이징

텍스트를 의미 있는 조각(토큰)으로 분해하고 각 조각에 고유 ID 번호를 부여한다.
단어 전체가 아니라 BPE 방식으로 자주 붙어 나오는 조각 단위로 쪼갠다.

📐 Step 2

임베딩

토큰 ID로 임베딩 행렬에서 해당 행을 꺼내온다.
행 = 토큰, 열 = 차원(벡터값). 이 숫자 배열이 공간상의 좌표가 된다.
비슷한 의미일수록 벡터 위치가 가깝다. 값은 학습으로 결정된다.

토큰 ID 차원1 차원2 차원3 차원4 차원5 차원6 ... (×8000)
💡 실제 모델은 약 10만 행 × 8000열짜리 행렬. 숫자 하나하나는 학습을 통해 자동으로 결정된다. 비슷한 문맥에서 쓰이는 단어일수록 벡터값이 비슷해진다.
🔗 Step 3

어텐션

모든 토큰이 서로 "나 이 단어랑 얼마나 관련 있어?"를 계산한다.
관련도를 반영해 각 토큰의 벡터를 업데이트한다. 이 과정을 수십 레이어 반복한다.

단어를 클릭해서 관련도 확인

어텐션이 하는 일

Before
"먹었다" = 그냥 "먹다"의 의미
↓ 어텐션
After
"먹었다" = "밥을 먹은 행위"로 변환
(문맥이 벡터에 반영됨)
이 과정을 수십 개 레이어에서 반복.
레이어가 깊어질수록 더 추상적인 의미 파악.
🎯 Step 4

다음 토큰 예측

어텐션으로 변환된 벡터와 전체 어휘 벡터들의 유사도(내적)를 계산한다.
가장 가까운(유사도 높은) 토큰을 선택하고, 이를 누적하며 반복한다.

벡터 공간 시각화 (2D 단순화)

입력: "나는 밥을" 다음 토큰 확률
먹었다
먹는다
좋아했다
달렸다
하늘
📋 정리

전체 흐름

토큰 하나가 출력될 때마다 아래 과정을 처음부터 반복한다.

1

토크나이징

텍스트를 의미 있는 조각으로 분해 → 각 조각에 ID 부여
"개발자" → "개발"|"자" → [45231, 891]

2

임베딩

토큰 ID로 임베딩 행렬에서 해당 행(벡터)을 꺼내온다.
ID 45231 → [0.5, -0.2, 0.8, ...] (8000차원)

3

어텐션 (수십 레이어 반복)

토큰끼리 관련도 계산 → 문맥 반영해 벡터 업데이트
"먹었다" 벡터 → "밥을 먹은 행위" 벡터로 변환

4

다음 토큰 선택

변환된 벡터와 전체 어휘 유사도(내적) 계산 → 가장 가까운 토큰 선택
선택된 토큰을 누적 → 1번으로 돌아가 반복