AI VIDEO BRIEFING

어텐션 키·쿼리·값 행렬 쉽게 이해하기: 중력에 비유해 배우는 트랜스포머 어텐션의 원리

챗GPT를 말하게 만든 어텐션을 중력에 빗대 설명한다. 단어가 서로를 끌어당기는 힘이 왜 비대칭인지, 키·쿼리·값 세 행렬이 각각 무슨 일을 하는지, 멀티헤드 어텐션은 왜 필요한지 차근차근 풀어본다.

단어가 서로를 끌어당긴다: 키·쿼리·값 행렬로 이해하는 어텐션 영상 대표 이미지

핵심 메시지

  • 어텐션은 '지금 보고 있는 단어와 비슷한 단어에 더 주목한다'는 원리이며, 비슷한 단어끼리는 행성처럼 서로를 끌어당겨 임베딩 공간에서 가까워진다.
  • 유사도는 임베딩 벡터의 내적이나 코사인으로 잰다. 두 단어가 비슷하면 같은 위치에 큰 값이 있어 곱한 합이 커지고, 다르면 큰 값들이 서로 어긋나 합이 작아진다.
  • 행렬은 숫자 덩어리가 아니라 선형변환이다. 어떤 차원은 늘리고 어떤 차원은 줄이거나 서로 더해서, 유사도를 더 잘 드러내는 임베딩으로 바꾸는 일을 한다.
  • 끌어당기는 힘은 비대칭이다. 흔한 단어일수록 끌려 들어오고 드문 단어일수록 끌어당기기 때문에, 키(끄는 쪽)와 쿼리(끌리는 쪽)에 서로 다른 행렬을 쓴다.
  • 값 행렬은 또 다른 목적을 맡는다. 유사도를 재기에 좋은 임베딩과 다음 단어를 만들어내기에 좋은 임베딩은 다르며, 실제로 단어를 움직이는 무대는 값 행렬이 만든 공간이다.

쉽게 이해하기

누군가 '애플'이라고만 말하면 과일인지 기업인지 알 수 없다. 앞뒤로 배·오렌지 이야기를 했다면 과일이고, 노트북과 휴대폰 이야기를 했다면 기업이다. 어텐션은 바로 이 맥락을 수학으로 처리하는 장치로, 문장 안의 다른 단어들이 '애플'을 자기 쪽으로 끌어당겨 임베딩 공간에서의 위치를 옮긴다고 보면 된다. 강연자는 이를 행성 사이의 중력에 비유한다. 가까이 있는 지구와 달은 서로 강하게 당기지만 목성이나 토성은 멀어서 거의 영향을 주지 못하듯, 문장 안의 모든 단어가 조금씩 끌어당기되 비슷한 단어가 압도적으로 크게 당긴다.

그러려면 '비슷하다'를 숫자로 정의해야 한다. 임베딩은 각 단어에 수백에서 수천 개의 숫자를 붙여 좌표를 주는 방식으로, 각 숫자는 단어의 어떤 성질을 나타낸다고 볼 수 있다. 유사도를 재는 대표적인 방법이 내적이다. 가로축을 '과일다움', 세로축을 '기술다움'이라 두고 오렌지가 (6,1), 배가 (7,2), 안드로이드가 (1,8)이라면 오렌지와 배의 내적은 44로 크고, 오렌지와 안드로이드는 14로 작다. 큰 값이 같은 자리에 놓인 두 벡터만 큰 점수를 받는 구조다. 원점과 이루는 각도를 쓰는 코사인 유사도도 본질적으로 같은 이야기이며, 실제 모델은 내적을 특정 값으로 나눈 스케일드 닷 프로덕트를 쓴다.

문제는 원래의 임베딩이 유사도를 재기에 늘 좋지는 않다는 점이다. 여기서 행렬이 등장하는데, 강연자는 행렬을 숫자 배열이 아니라 '선형변환'이라는 이야기로 볼 것을 권한다. 회전·확대축소·전단(밀기)을 조합해 정사각형을 평행사변형으로 바꾸는 변환이 곧 행렬이다. 예를 들어 토끼·코끼리·트럭이 있는 임베딩에서 '크기' 축만 0.3배로 눌러버리면, 크기 대신 '동물다움'이 더 크게 반영돼 토끼와 코끼리가 서로 가까워진다. 사람을 비교할 때 나이와 출생지에는 큰 가중치를, 태어난 요일에는 0.1배 같은 작은 가중치를 주는 것과 같은 원리다.

차원을 누르고 늘리는 것만으로는 부족해서 서로 더해야 할 때도 있다. 수학을 가장 좋아하는 학생과 물리를 가장 좋아하는 학생은 원래 임베딩에서 완전히 다른 곳에 놓이지만, 수학 점수의 50%를 물리 점수에 더하고 반대로도 더해주면 두 사람이 훨씬 가까워진다. 이 변환에 해당하는 행렬은 좌표축 자체를 비스듬한 방향으로 바꿔 정사각형을 평행사변형으로 만든다. 즉 키·쿼리 행렬은 '어떤 특징이 비교에 중요한가'와 '어떤 특징들을 묶어서 봐야 하는가'를 동시에 학습한다.

가장 흥미로운 대목은 끌어당김이 대칭이 아니라는 사실이다. '어부'와 '그물'을 보면, 그물은 훨씬 흔한 단어라 배드민턴이나 인터넷 문맥에도 나오지만 어부 이야기가 나오면 그물은 거의 반드시 등장한다. 그래서 어부가 그물을 당기는 힘이 그 반대보다 훨씬 세다. 이런 비대칭을 만들려면 변환이 하나여서는 안 된다. 끄는 쪽에 쓰는 변환(키 행렬)과 끌리는 쪽에 쓰는 변환(쿼리 행렬)을 따로 두면, 같은 두 단어라도 방향에 따라 각도가 달라져 한쪽은 강한 끌림, 다른 쪽은 약한 끌림이 된다.

마지막이 값 행렬이다. 유사도를 재는 데 가장 좋은 임베딩과, 다음에 올 단어를 만들어내는 데 가장 좋은 임베딩은 서로 다르다. 단어를 설명하는 여덟 개 항목 가운데 대화에 실제로 쓸모 있는 몇 개만 골라내거나 둘을 평균 내 합치는 식으로 압축한 것이 값 벡터이고, 그 추출을 담당하는 것이 값 행렬이다. 실제 어텐션 도식은 이 셋을 순서대로 엮는다. 키와 쿼리를 곱해 유사도를 구하고, 마스킹으로 앞선 단어들만 참조하게 한 뒤, 값 행렬이 만든 공간에서 단어들을 실제로 이동시킨다.

주요 인사이트

  • 임베딩을 '단어의 좌표'로 보면 어텐션은 결국 좌표를 다시 계산하는 일이다. 같은 단어라도 문맥에 따라 위치가 달라지기 때문에 '애플'이 과일이 되기도 하고 기업이 되기도 한다.
  • 키와 쿼리를 굳이 따로 두는 이유는 흔히 설명되지 않는데, 강연자는 그 답을 언어의 비대칭성에서 찾는다. 인기 있는 단어는 끌려오고 희소한 단어는 끌어당긴다는 관찰이 두 행렬을 나눈 근거다.
  • 멀티헤드 어텐션은 '어떤 임베딩이 최선인가'라는 질문에 하나의 답을 고르지 않는 방법이다. 수학과 물리를 비슷하게 보는 관점과 다르게 보는 관점을 모두 두고, 위에 붙은 선형 층이 맥락에 따라 어느 관점에 더 큰 표를 줄지 결정한다.
  • 여러 헤드가 결국 똑같아지지 않고 서로 다른 강점을 갖게 되는 현상은 축구팀에서 포지션이 갈리는 것과 닮았다. 전문가 혼합(MoE) 모델이나 신경망 노드에서도 같은 분업이 자연스럽게 나타난다.
  • 값 행렬의 존재 이유는 직관적이지 않지만 중요하다. 비교에 좋은 표현과 생성에 좋은 표현을 분리했기 때문에, 어텐션은 '무엇에 주목할지'와 '주목한 결과로 무엇을 말할지'를 따로 학습할 수 있다.

자주 묻는 질문

키와 쿼리는 각각 무엇을 뜻하나요?

끌어당기는 쪽 단어가 키, 끌려오는 쪽 단어가 쿼리입니다. 어부와 그물의 예에서 어부가 그물을 대화로 끌어들이므로 이때 어부가 키, 그물이 쿼리이며, 반대 방향으로 계산할 때는 역할이 바뀝니다.

왜 키와 쿼리에 서로 다른 행렬을 써야 하나요?

변환이 하나뿐이면 두 단어 사이의 유사도가 어느 방향으로 계산해도 같은 값이 되어 버립니다. 키와 쿼리에 서로 다른 변환을 적용해야 두 벡터가 이루는 각도가 방향에 따라 달라지면서, 한쪽은 강하게 끌고 다른 쪽은 약하게 끌리는 비대칭을 만들 수 있습니다.

값 행렬은 왜 따로 필요한가요?

두 단어가 비슷한지 판단하기에 좋은 임베딩과, 다음 단어를 생성하기에 좋은 임베딩이 다르기 때문입니다. 값 행렬은 단어를 설명하는 여러 항목 중 대화에서 실제로 쓸모 있는 특징만 골라내거나 합쳐 새 벡터를 만들고, 어텐션은 그 공간 안에서 단어들을 이동시킵니다.

멀티헤드 어텐션은 무엇을 하는 건가요?

서로 다르게 학습된 임베딩(헤드)을 여러 개 두고 각각의 관점을 함께 쓰는 방식입니다. 맨 위의 선형 층이 상황에 따라 어떤 헤드의 의견에 더 큰 가중치를 줄지 정해 가중합으로 결합합니다.

원문과 출처

이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.

YouTube 원본 영상 보기 ↗

관련 AI 소식