전시실
#07 · 일곱째 전시실
관람객 질문
"아까 '배가 고파서 배를 깎아 먹었다'라고 써 봤는데요. 앞의 배랑 뒤의 배가 다른 거, AI도 알아요? AI는 앞에 나온 말을 기억해요?" (준이)
전시로 보여 줄 것
문장 속 단어가 다른 단어를 얼마나 참고하는지(어텐션)를 선의 굵기로 보여 주고, 문맥에 따라 '배'의 뜻이 과일·배(선박)·몸 쪽으로 옮겨 가는 모습을 전시한다.
한빛과학관 특별전 «AI는 어떻게 생각하나» 준비실
개막이 가까워진 어느 오후, 준이는 여섯째 전시실의 '이어 쓰기' 전시대 앞에 한참 서 있었습니다. 한 단어씩 문장이 자라는 게 재미있었는지, 이번에는 지난번 쪽지의 '배' 문장을 짧게 줄여 직접 써 넣어 보고 있었습니다. 그러다 화면을 가리키며 묻습니다. "'배가 고파서 배를 깎아 먹었다.' 여기 '배'가 두 번 나오잖아요. 앞에 건 배고픈 배고, 뒤에 건 먹는 배예요. AI도 이걸 구별해요?"
나래는 다섯째 전시실의 단어 지도를 떠올립니다. 그 지도에서는 '배'를 과일과 선박 두 점으로 나눠 놓았지만, 진짜 단어 벡터라면 '배'는 점 하나입니다. "그럼 과일 배, 타는 배, 몸의 배가 다 같은 점이에요?"
백 박사가 고개를 끄덕입니다. "단어 벡터만 쓰면 그렇습니다. 그래서 문장을 읽을 때 한 단계가 더 필요해요. 각 단어가 문장의 다른 단어들을 둘러보고, 누구를 얼마나 참고할지 숫자로 정한 다음, 그만큼 뜻을 섞어 자기 점을 옮기는 겁니다. 그 '얼마나 참고할지'가 어텐션(attention) 입니다. 준이 질문에 답하자면, 기억한다기보다 문장 전체를 매번 다시 훑어보는 쪽에 가까워요."
이번 교시에서는 작은 장난감 모델로 어텐션을 직접 계산해 봅니다. 그리고 이 계산을 여러 겹 쌓은 트랜스포머(transformer) 가 오늘날 대형 언어 모델의 뼈대가 된 이유를 봅니다.
우리말의 '배'는 적어도 세 가지 뜻이 있습니다.
| 문장 | '배'의 뜻 | 뜻을 정해 주는 단어 |
|---|---|---|
| 배를 깎아 먹었다 | 과일 | 깎아, 먹었다 |
| 항구에 배가 들어왔다 | 물 위를 다니는 배(선박) | 항구에, 들어왔다 |
| 배가 아파서 병원에 갔다 | 몸의 배 | 아파서, 병원에 |
사람은 이 표의 셋째 칸을 의식하지도 않고 읽습니다. '배' 하나만 봐서는 뜻을 알 수 없고, 주변 단어(문맥) 를 함께 봐야 뜻이 정해진다는 것을 알기 때문입니다.
지금까지 배운 도구로는 이 일을 하기 어렵습니다.
필요한 것은 이것입니다. 문장 안의 모든 단어가 서로를 둘러보고, 자기 뜻을 정하는 데 도움이 되는 단어를 골라 더 많이 참고하는 장치. 그 장치가 어텐션입니다.
아래 실습대의 위쪽 띠에는 문장의 단어(토큰)가 칸으로 놓여 있습니다. 주황 테두리 칸이 지금 고른 단어입니다. 고른 단어에서 다른 단어로 가는 남색 곡선은 굵고 진할수록 더 많이 참고한다는 뜻이고, 곡선 위 숫자가 그 비율(어텐션 가중치)입니다. 자기 자신에게 돌아오는 작은 고리도 있습니다. 가중치는 모두 더하면 1입니다.
가운데 그림은 5교시처럼 손으로 만든 2차원 의미 지도입니다. 왼쪽 위가 과일 무리, 오른쪽 위가 바다 무리, 아래가 몸 무리입니다. 남색 점은 문장 속 단어, 회색 점은 문장에 없는 다른 단어입니다. 문맥 없는 '배'는 세 무리 사이 한가운데에 있습니다. 고른 단어의 새 의미 점(주황) 은 가중치만큼 다른 단어들의 점을 섞은 자리, 즉 가중 평균입니다. 주황 점선 화살표가 원래 자리에서 옮겨 간 길이고, 옅은 주황 선은 새 점을 끌어당긴 단어들입니다(진할수록 많이 끌어당김). 맨 아래 표는 가중치를 계산한 과정입니다.
오른쪽에서 문장을 고르고, 띠의 단어 칸을 눌러 보세요(키보드로는 Tab으로 옮겨 Enter). '섞기 다시 보기'를 누르면 곡선이 자라고 점이 옮겨 가는 과정을 다시 보여 줍니다.
단어 칸을 누르면 그 단어가 다른 단어를 얼마나 보는지 계산합니다.
의미 지도 (손으로 만든 2차원 장난감 공간)
질문 Q(배를) = (0, 2, 0)
| 단어 | 열쇠 K | 점수 Q·K | e^점수 | 가중치 |
|---|---|---|---|---|
| 배가 | (0, 0, 1.5) | 0 | 1 | 0.016 |
| 고파서 | (1.8, 0, 0) | 0 | 1 | 0.016 |
| 배를 | (0, 0, 1.5) | 0 | 1 | 0.016 |
| 깎아 | (0.3, 1.8, 0) | 3.6 | 36.6 | 0.571 |
| 먹었다 | (0.3, 1.6, 0) | 3.2 | 24.53 | 0.383 |
| 합 | 64.13 | 1 |
고른 단어 배를
가장 많이 본 단어 깎아 (0.57)
새 점이 가까운 무리 과일
'배를'는 '깎아'를 가장 많이 봅니다(가중치 0.57). 섞인 의미 점이 과일 무리 쪽으로 옮겨 갑니다.
실습대에서 본 것을 정리합니다.
'배를'이면 대략 0.57 × (깎아의 점) + 0.38 × (먹었다의 점) + 나머지 세 단어 × 0.016씩입니다. 계산하면 지도 좌표로 (2.58, 7.42)이고, 과일 무리 한복판에 닿습니다.
어텐션이 하는 일을 한 문장으로 줄이면 이렇습니다. 각 단어가 문장 전체를 둘러보고, 참고할 비율을 정해, 그 비율대로 다른 단어의 정보를 섞어 자기 뜻을 새로 만든다. 이렇게 만든 '문맥이 반영된 단어 벡터'는 다음 단계(다음 층, 그리고 마지막에는 6교시의 다음 단어 확률)로 넘어갑니다.
백 박사의 한마디
곡선이 굵다고 모델이 그 단어를 '이해했다'는 뜻은 아니에요. 그 단어의 숫자를 많이 섞었다는 뜻일 뿐입니다. 어텐션 그림은 속을 엿보는 좋은 창이지만, 모델이 왜 그렇게 판단했는지를 다 설명해 주지는 않아요.
그렇다면 '배를'이 '깎아'를 많이 보기로 한 숫자 0.57은 어디서 나왔을까요? 어텐션은 단어마다 세 가지 숫자 목록(벡터)을 둡니다. 도서관에 비유하면 이렇습니다.
| 이름 | 비유 | 하는 일 |
|---|---|---|
| 질문 (Query, Q) | 내가 들고 간 질문 카드 | "나는 이런 정보를 찾는다" |
| 열쇠 (Key, K) | 책등에 붙은 분류 라벨 | "나는 이런 정보를 갖고 있다" |
| 값 (Value, V) | 책의 내용 | 뽑혀 갔을 때 실제로 건네주는 정보 |
질문 카드와 라벨이 잘 맞는 책일수록 많이 꺼내 읽습니다. 그리고 꺼낸 책의 내용을 읽은 비율만큼 섞습니다. 맞는지 보는 일은 Q와 K가 하고, 섞는 재료는 V입니다.
이 장난감 모델에서 머리 1의 Q와 K는 칸이 세 개입니다. 첫째 칸은 '나를 설명하는 서술어', 둘째 칸은 '목적어에 일어난 동작', 셋째 칸은 '명사'입니다. V는 의미 지도의 위치입니다.
| 단어 | 질문 Q | 열쇠 K | 뜻 |
|---|---|---|---|
| 배를 | (0, 2, 0) | (0, 0, 1.5) | 나(목적어)에게 일어난 동작을 찾는다 |
| 배가 | (2, 0, 0) | (0, 0, 1.5) | 나(주어)를 설명하는 서술어를 찾는다 |
| 깎아 | (0, 0, 1.5) | (0.3, 1.8, 0) | 목적어를 받는 동작이다 |
| 먹었다 | (0, 0, 1.5) | (0.3, 1.6, 0) | 목적어를 받는 동작이다 |
| 고파서 | (0, 0, 1.5) | (1.8, 0, 0) | 주어를 설명하는 서술어다 |
가중치는 세 걸음으로 계산합니다.
① 점수 = Q와 K를 칸끼리 곱해 더하기. '배를'의 Q (0, 2, 0)과 '깎아'의 K (0.3, 1.8, 0)이면 입니다. '먹었다'와는 , 명사·서술어 칸만 있는 '배가', '고파서', 자기 자신과는 0입니다. 질문과 열쇠가 같은 칸에서 클수록 점수가 큽니다. 이 계산을 내적(dot product) 이라고 합니다.
② 점수를 양수로 바꾸고 키우기. 점수마다 를 계산합니다. 는 약 2.718인 수이고, 점수가 1 오를 때마다 값이 약 2.7배가 됩니다. 그래서 점수가 조금만 앞서도 크게 앞서게 됩니다. , , 입니다.
③ 합이 1이 되게 나누기. 다섯 값의 합은 입니다. 각자를 합으로 나누면 가중치입니다.
| 단어 | 점수 Q·K | 가중치 | |
|---|---|---|---|
| 배가 | 0 | 1 | 0.016 |
| 고파서 | 0 | 1 | 0.016 |
| 배를 (자기) | 0 | 1 | 0.016 |
| 깎아 | 3.6 | 36.6 | 0.571 |
| 먹었다 | 3.2 | 24.5 | 0.383 |
②와 ③을 합쳐 소프트맥스(softmax) 라고 부릅니다. 대형 언어 모델이 다음 단어의 점수를 확률로 바꿀 때도 같은 계산을 씁니다. 식으로 쓰면 이렇습니다.
'배가'가 Q (2, 0, 0)으로 같은 계산을 하면 '고파서'와의 점수가 이고 나머지는 0 또는 0.6이어서, 가중치 0.87이 '고파서'에 몰립니다. 같은 단어 '배'라도 조사가 달라 질문이 다르니 보는 곳이 다릅니다.
이 장난감에서는 Q, K, V를 사람이 손으로 정했습니다. 실제 모델에서는 아무도 정해 주지 않습니다. 단어 벡터에 숫자 표(행렬) 세 개를 곱해 Q, K, V를 만들고, 그 표의 숫자들을 2교시의 경사하강법으로 배웁니다. 다음 단어를 잘 맞히는 쪽으로 숫자를 조금씩 고치다 보면, 쓸모 있는 질문과 열쇠가 저절로 생깁니다. 그 칸이 꼭 '서술어', '동작'처럼 사람이 이름 붙이기 쉬운 뜻을 갖지는 않습니다.
실습대에서 '머리 둘'을 켜 보세요. 단어 띠 아래쪽에 청록 곡선이 생깁니다. 두 번째 어텐션, 즉 두 번째 머리(head) 입니다. 이 머리는 다른 질문과 열쇠를 써서 '장소·주제' 단어를 찾습니다. "항구에 배가 들어왔다"에서 머리 1은 '들어왔다'(0.95)를, 머리 2는 '항구에'(0.95)를 봅니다. 의미 지도에는 머리 1의 결과(남색 고리)와 머리 2의 결과(청록 고리)가 따로 찍히고, 둘을 평균한 주황 점이 바다 무리 안쪽으로 들어갑니다.
첫 문장의 '배를'에서는 머리 2가 '깎아'(0.30), '고파서'(0.25), '먹었다'(0.20)에 고르게 퍼집니다. 주제 단어가 섞인 문장이라 이 머리는 헷갈린 셈입니다. 그래도 머리 1이 분명하게 과일 쪽을 가리켜 합친 점은 과일 무리에 남습니다. 머리를 여럿 두면 한 머리가 놓친 것을 다른 머리가 잡을 수 있습니다. 실제 모델에서는 머리마다 결과를 이어 붙인 뒤 숫자 표를 한 번 더 곱해 합칩니다. 이 실습대는 그 합치기를 평균으로 줄였습니다.
이것을 여러 머리 어텐션(multi-head attention) 이라고 부릅니다. 그리고 이런 어텐션 단계를 여러 층(layer) 으로 쌓습니다. 첫 층에서 '배'가 과일 쪽으로 옮겨 가면, 다음 층에서는 그렇게 바뀐 '배'를 다른 단어들이 다시 참고합니다. 층이 깊어질수록 단어 하나의 벡터에 문장 전체의 정보가 점점 더 녹아듭니다. 3교시에서 뉴런 층을 쌓았더니 직선 하나로 못 하던 일을 하게 된 것과 같은 이치입니다.
트랜스포머는 이 구조에 붙인 이름입니다. 2017년 논문 «Attention Is All You Need»(어텐션만 있으면 된다)가 소개했습니다. 그 전의 언어 모델은 주로 단어를 한 번에 하나씩 차례로 읽으며 앞의 정보를 다음 칸으로 넘겨주는 방식(순환 신경망)이었습니다. 트랜스포머는 문장의 모든 단어 쌍을 어텐션으로 한꺼번에 계산합니다. 차례를 기다리지 않으니 계산을 동시에 나눠 하기 좋고, 멀리 떨어진 단어도 한 번에 바로 볼 수 있습니다. 그 논문의 기본 모델은 층마다 머리 8개를 두고, 문장을 읽는 쪽과 쓰는 쪽에 층을 6개씩 쌓았습니다.
두 가지를 덧붙입니다.
이제 준이의 질문에 답할 수 있습니다. 6교시의 언어 모델이 다음 단어를 고를 때, 실제 모델은 바로 앞 단어 하나가 아니라 지금까지 나온 모든 토큰을 어텐션으로 둘러봅니다. 다만 다음 단어를 맞히도록 학습하는 모델에서는 각 단어가 자기보다 앞에 있는 단어만 볼 수 있게 가립니다. 아직 나오지 않은 단어를 미리 보면 답을 훔쳐보는 셈이기 때문입니다.
그러니 "기억한다"보다는 이렇게 말하는 것이 정확합니다.
| 용어 | 쉬운 말 | 실제 AI에서는 |
|---|---|---|
| 어텐션 (attention) | 다른 단어를 얼마나 참고할지 정한 비율, 그리고 그 비율대로 섞기 | 트랜스포머의 모든 층에서 모든 토큰 쌍에 대해 계산 |
| 질문·열쇠·값 (Q, K, V) | 찾는 것, 가진 것의 라벨, 건네줄 내용 | 단어 벡터에 학습된 숫자 표를 곱해 만든다 |
| 소프트맥스 (softmax) | 점수를 합이 1인 비율로 바꾸기 | 어텐션 가중치와 다음 단어 확률 모두에 쓰인다 |
| 머리 (head) | 서로 다른 관점의 어텐션 하나 | 층마다 수십 개인 경우가 흔하다 |
| 층 (layer) | 어텐션을 한 번 거치는 단계 | 대형 모델은 수십 층을 쌓는다 |
| 트랜스포머 (transformer) | 어텐션 층을 쌓은 구조 | 2017년 논문 이후 대형 언어 모델의 기본 뼈대 |
| 문맥 창 (context window) | 한 번에 읽을 수 있는 길이 | 수천에서 수십만 토큰 이상 |
장난감 모델의 단어는 다섯 개, Q와 K는 세 칸, 의미 지도는 2차원이었습니다. 실제 대형 언어 모델에서 단어 벡터는 수천 칸이고, 층은 수십 개, 층마다 머리도 수십 개입니다. 문장 하나를 읽을 때마다 이 모든 머리에서 모든 토큰 쌍의 점수를 계산합니다. 그래도 한 칸에서 하는 일은 이번 교시에 손으로 한 계산과 같습니다. 곱해서 더하고, 소프트맥스로 비율을 정하고, 그 비율대로 섞는 것. 트랜스포머는 번역, 요약, 이미지 생성 AI의 글 이해 부분에도 쓰입니다. 그림을 작은 조각으로 나눠 토큰처럼 다루면 이미지에도 같은 어텐션을 쓸 수 있습니다.
전시 설명판
같은 단어도 문맥에 따라 뜻이 달라진다. 단어 벡터 하나로는 이 차이를 담지 못한다.
어텐션: 각 단어가 문장의 다른 단어를 얼마나 참고할지 비율(가중치)을 정하고, 그 비율대로 뜻을 섞어 자기 벡터를 새로 만든다.
비율은 질문(Q)과 열쇠(K)를 곱해 더한 점수를 소프트맥스로 바꿔 정한다. 섞는 재료는 값(V)이다.
머리를 여럿 두면 서로 다른 관점으로 보고, 층을 쌓으면 문장 전체의 정보가 단어마다 녹아든다. 이 구조가 트랜스포머(2017)다.
모델은 앞의 말을 '기억'하기보다 문맥 창 안의 토큰을 매번 다시 읽는다. 창 밖은 보지 못한다.
전시실 문을 닫기 전, 준이가 마지막으로 준비실 노트북의 챗봇에 질문을 하나 넣어 봅니다. "한빛과학관은 몇 년에 문을 열었어?" 화면에는 금세 그럴듯한 답이 떠오릅니다. 연도도, 첫 관장의 이름도 있습니다. 나래가 액자에 걸린 개관 기념사진을 보더니 고개를 갸웃합니다. "연도가 틀렸는데요. 그런 이름의 관장님도 없었고요." 준이가 눈을 동그랗게 뜹니다. "AI가 거짓말한 거예요?" 백 박사가 말합니다. "그게 마지막 전시실의 주제입니다." 8교시에서는 AI가 틀리는 세 가지 방식, 과적합과 편향과 환각을 보고, 개막 전날 특별전 전체를 돌아봅니다.
새 교시·새 강의 소식 받기
이 강의에 새 교시가 더해지거나 이어지는 강의가 열리면 이메일로 알려 드려요.
R
ReflexKR
눌러 보며 배우는 파이썬과 Reflex. 모든 예제는 Reflex 0.10.0에서 직접 실행해 확인했습니다.
ReflexKR은 배너 광고 없이 무료로 운영돼요. 도움이 되셨다면 커피 한 잔으로 응원해 주세요.
© 2026 ReflexKR · Since 2026 · CC BY-NC 4.0
질문과 답변
이 교시에서 궁금한 점을 남겨 주세요. 모든 언어 페이지의 질문이 함께 모입니다.