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

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

로그인
학습 메뉴
도움말

Self-Attention 실습실

문장의 단어들이 서로에게 주는 어텐션 가중치를 직접 살펴보세요. 쿼리 단어를 바꾸고, √d_k 스케일링을 켜고 꺼가며 어떻게 달라지는지 확인합니다.

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

Ctrl K

문장 속 어떤 단어가 서로를 주목하는지 눈으로 봅니다

"그는 사과를 먹었다. 그것은 맛있었다"에서 '그것'이 '사과'를 가리킨다는 걸 모델은 어떻게 알까요? 셀프 어텐션은 문장의 모든 단어가 서로를 얼마나 참고할지 계산합니다. 어텐션 가중치를 직접 시각화하며 그 연결을 눈으로 확인해 보세요.
이 페이지에서 배우고 나면
  • 어텐션 가중치가 어떤 단어 쌍을 강하게 연결하는지 시각화로 관찰할 수 있습니다.
  • Query·Key·Value가 각각 무슨 역할을 하는지 감을 잡을 수 있습니다.
  • 문맥이 바뀌면 같은 단어의 주목 대상이 어떻게 달라지는지 확인할 수 있습니다.
예측 먼저 — 실험 전에 답을 정해 보세요
예측 → 실험 → 확인

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

1. "동물이 길을 건너지 못했다. 그것은 너무 피곤했다" — 모델이 "그것"의 정체를 아는 방법은?
2. 어텐션 헤드를 하나가 아니라 여러 개(Multi-Head) 두는 이유는?
로그인하면 예측 기록이 계정에 저장됩니다

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

카카오로 시작하기네이버로 시작하기구글로 시작하기
회원가입 절차 없음 — 닉네임만 저장하며, 이메일·연락처는 수집하지 않습니다.

"민수사과를 사서 그것먹었다"

쿼리 단어를 클릭하면 그 단어가 다른 단어들을 얼마나 참조하는지 보여줍니다.

민수
사과
그것
먹었다

어텐션 히트맵 — 행(쿼리)이 열(키)을 얼마나 참조하나

민수
사과
그것
먹었다
민수
0.75
0.07
0.10
0.07
사과
0.05
0.55
0.34
0.05
그것
0.11
0.47
0.35
0.07
먹었다
0.08
0.08
0.08
0.77

색이 진할수록 그 단어를 많이 참조합니다. 각 행의 합은 1입니다.

"먹었다"의 어텐션 계산 — 4단계

민수

점수 0.00 → ÷√d_k 0.00

8%

사과

점수 0.00 → ÷√d_k 0.00

8%

그것

점수 0.00 → ÷√d_k 0.00

8%

먹었다

점수 4.00 → ÷√d_k 2.31

77%


→ "먹었다"은(는) "먹었다"을(를) 가장 강하게 참조합니다 (77%). 점수(QKᵀ) → ÷√d_k → softmax → 비중의 순서입니다.

멀티헤드 어텐션 — 머리마다 다른 관점

실제 MHA는 head마다 다른 W_Q·W_K를 학습해 서로 다른 관계를 잡습니다. 아래는 "학습이 끝난 뒤의 세 관점"을 손으로 만든 것 — 수식은 전부 동일한 softmax(QKᵀ/√d)입니다.

헤드 1개
헤드 2개
헤드 3개

의미 head

민수
사과
그것
먹었다
민수
0.75
0.07
0.10
0.07
사과
0.05
0.55
0.34
0.05
그것
0.11
0.47
0.35
0.07
먹었다
0.08
0.08
0.08
0.77

"그것"이 의미가 닮은 "사과"를 찾는다 (대명사 해소)

헤드를 늘리면 "그것" 행이 의미(사과)·위치(이웃)·문법(동사) 관점을 동시에 갖게 됩니다 — 한 개의 head로는 하나의 관계밖에 못 잡습니다.

실험으로 확인해 볼 것

  • "그것"을 쿼리로 선택하면 어느 단어를 가장 많이 참조하나요? ('사과'인지 확인하세요)
  • √d_k 스케일링을 끄면 가중치 분포가 어떻게 변하나요? (한쪽으로 더 쏠려 포화되는지 관찰 — 이것이 스케일링이 필요한 이유)
  • 히트맵에서 각 행의 합이 왜 항상 1인가요? (softmax의 성질)
  • 거리가 먼 단어끼리도 직접 참조가 되나요? (RNN과 달리 어텐션은 거리에 무관)
  • 헤드를 1 → 3개로 늘리면 "그것"과 "먹었다"의 참조 패턴이 어떻게 달라지나요? (의미·위치·문법 — 헤드마다 다른 관계를 잡는 이유)

※ 임베딩 숫자는 개념 이해를 위한 예시이며, 적용된 계산은 실제 Scaled Dot-Product Attention 수식과 동일합니다.

실측 요약 — 이 실습이 보여주는 것

"민수는 사과를 사서 그것을 먹었다"의 네 토큰(민수·사과·그것·먹었다)에 3차원 토이 임베딩을 주고, 실제 Scaled Dot-Product Attention 수식 softmax(QKᵀ/√d_k)V를 그대로 적용해 4×4 어텐션 히트맵과 쿼리별 4단계 계산(점수 → ÷√d_k → softmax → 비중)을 확인하는 실험입니다. √d_k 스케일링 스위치를 꺼서 가중치 분포가 한쪽으로 포화되는 것도 관찰합니다.

  • 랩의 임베딩(민수 [2,0,0], 사과 [0,2,0], 그것 [0.3,1.6,0], 먹었다 [0,0,2], d_k=3)으로 직접 계산하면 쿼리 "그것"의 내적 점수는 사과 3.20, 자기 자신 2.65, 민수 0.60, 먹었다 0 — √3으로 나눠 softmax하면 사과 47%, 그것 35%, 민수 11%, 먹었다 8%로, "그것"이 문법 규칙 없이 점수 계산만으로 "사과"를 가장 강하게 참조한다
  • √d_k 스케일링을 끄면 같은 점수의 softmax가 쏠린다: "민수" 행의 자기 참조 75% → 94%, "먹었다" 행은 77% → 95%, "그것"의 사과 참조도 47% → 59%로 포화 — 큰 점수가 softmax를 독식해 학습이 굳는 것을 막는 것이 √d_k로 나누는 이유다
  • softmax의 성질상 히트맵 각 행(쿼리)의 가중치 합은 정확히 1이며, 문장에서 멀리 떨어진 단어 쌍도 RNN과 달리 한 번의 내적으로 직접 참조된다 — 계산 수식은 실제 Transformer의 Scaled Dot-Product Attention과 동일하다

바로잡는 오개념: "모델은 문법 분석기나 '그것 = 바로 앞 명사' 같은 고정 규칙으로 대명사를 해석한다"는 착각 — 어텐션은 모든 단어 쌍의 관련도(내적)를 가중치로 계산해 참조를 표현하며, 규칙을 코딩하지 않고 데이터에서 참조 관계를 배운다.

AI 튜터에게 물어보기
베타

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

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

AI 답변은 부정확할 수 있습니다. 핵심 개념은 반드시 시뮬레이션 실측으로 확인하세요. 질문 0/5 · 하루 질문 한도가 있습니다
다음 학습

여기서 본 것은 한 문장 안의 단어들이 서로를 쳐다보는 self-attention입니다. 같은 "어디를 볼지 배운다"는 아이디어가 번역에서는 출력(영어)이 입력(한국어)을 쳐다보는 cross-attention으로 쓰입니다 — 번역 모델 실습에서 어순 재배열이 히트맵에 나타나는 것을 확인해 보세요. 직접 길러 본 모델들을 비교하고 싶다면 모델 성능 비교 실습도 좋습니다.