AI VIDEO BRIEFING

어텐션 메커니즘의 키·쿼리 행렬이 필요한 이유: 3차원 장난감 모델로 본 멀티헤드 어텐션

루이스 세라노가 단어 몇 개짜리 초소형 모델로 어텐션을 뜯어본다. 단어 사이 영향력이 한쪽으로 기운다는 사실에서 출발해, 왜 임베딩 하나로는 부족하고 키와 쿼리 행렬을 따로 두어야 하는지를 3차원 공간에서 손으로 계산해 보여준다.

어텐션은 왜 키와 쿼리를 따로 둘까, 가장 작은 모델로 따져본 이유 영상 대표 이미지

핵심 메시지

  • 단어 사이의 영향력은 서로 같지 않다. 'Bob saw'에서 Bob은 saw의 뜻을 바꾸지만, 'saw Bob'에서 Bob은 거의 변하지 않는다.
  • 코사인 유사도나 내적으로 계산한 유사도 표는 대칭일 수밖에 없어서, 이런 한쪽으로 기운 영향력을 표현하지 못한다.
  • 그래서 임베딩을 하나가 아니라 키와 쿼리 두 벌로 나누고, 각각 다른 성질을 뽑아내도록 만든다.
  • 3차원 임베딩에서 사람다움과 동사다움을 각각 뽑아내는 행렬을 짜면, 사람이 동사에 영향을 주는 통로가 자연스럽게 만들어진다.
  • 이런 영향 통로가 여럿 필요하기 때문에 실제 모델은 여러 개의 헤드를 두며, 그 값들은 손으로 정하는 것이 아니라 역전파로 학습된다.

쉽게 이해하기

이 영상은 '세상에서 가장 작은 트랜스포머' 3부작에 뒤늦게 붙인 네 번째 이야기다. 앞선 영상에서 손으로 풀어보려다 실패한 계산을 마저 해내는 것이 목표인데, 실패한 이유가 차원이 너무 적어서였다고 보고 이번에는 차원을 하나 늘려 다시 시도한다. 다루는 데이터는 'Mary greeted Bob'과 'Bob ignored Mary' 두 문장뿐이고, 신경망은 현재 단어를 보고 다음 단어를 고르는 아주 단순한 과제를 푼다.

먼저 앞선 내용을 되짚는다. 중간층 노드가 두 개인 신경망은 데이터를 2차원 공간에 배치하면서, 사람이 해석할 수 있는 두 축을 스스로 골라냈다. 가로축은 사람과 동사를 가르고, 세로축은 친근함과 불친절함을 가른다. 여기에 친근하지도 불친절하지도 않은 Carlos가 등장하면 가운데에 놓이는데, 어텐션은 Mary 뒤에 온 Carlos를 Mary 쪽으로 당겨 더 친근한 쪽에, Bob 뒤에 온 Carlos는 Bob 쪽으로 당겨 덜 친근한 쪽에 놓는다.

문제는 이 당김이 대칭이 아니라는 데서 시작된다. Bob이 앞에 오면 중립적인 동사 saw는 노려보는 행위에 가깝게 뜻이 바뀌지만, 반대로 saw 뒤에 온 Bob은 누군가에게 보였다고 해서 달라지지 않는다. 즉 Bob이 saw에 주는 영향은 크고 saw가 Bob에 주는 영향은 작아야 하는데, 코사인 유사도나 내적으로 만든 유사도 표는 위쪽과 아래쪽이 같을 수밖에 없어 이 차이를 담을 수 없다. 임베딩이 하나뿐이면 두 방향의 당김을 다르게 만들 방법이 없기 때문이다.

해법이 키와 쿼리를 위한 두 벌의 임베딩이다. 이를 계산으로 보여주기 위해 중간층을 노드 두 개에서 세 개로 늘려 데이터를 3차원에 배치한다. 이제 축은 사람인지, 동사인지, 친근한지 세 가지가 되고, 이전처럼 사람과 동사를 하나의 축에 욱여넣지 않아도 되어 이름이면서 동사인 단어까지 표현할 여유가 생긴다. 원래의 2차원 임베딩은 이 3차원 공간을 비스듬한 평면으로 잘라내면 다시 얻을 수 있다.

그다음은 영향의 통로를 직접 설계하는 대목이다. 첫 번째 통로는 사람이 동사에 미치는 영향으로, 앞 단어에서는 사람다움만 뽑아내는 키 행렬을, 뒤 단어에서는 동사다움만 뽑아내는 쿼리 행렬을 쓴다. 그러면 앞이 사람이고 뒤가 동사일 때만 내적이 1이 되고 나머지는 0이 되어, 원하는 관계에서만 종이 울리는 셈이 된다. 두 번째 통로는 사람이 사람에게 미치는 영향으로, 양쪽 모두 사람다움을 뽑아내는 행렬을 쓴다.

마지막으로 두 통로를 하나로 합친다. 사람과 동사가 만나면 1, 사람과 사람이 만나면 0.8을 내놓는 큰 키·쿼리 행렬을 만들면, 유사도가 곧 영향력이던 이전 표가 관계의 종류에 따라 값이 정해지는 표로 바뀐다. 여기서 쓴 1과 0.8 같은 숫자는 설명을 위해 손으로 넣은 값일 뿐 실제 신경망에서는 역전파로 학습되는 파라미터라는 점, 그리고 통로가 더 많이 필요하기 때문에 여러 헤드를 두는 멀티헤드 어텐션이 등장한다는 점으로 마무리한다.

주요 인사이트

  • 어텐션을 '단어끼리 얼마나 비슷한가'로 이해하면 절반만 맞다. 실제로 필요한 것은 어느 단어가 어느 단어의 의미를 바꾸느냐라는 방향이 있는 관계이며, 유사도만으로는 이 방향을 표현할 수 없다.
  • 키와 쿼리를 나누는 이유가 여기서 분명해진다. 하나의 임베딩으로 계산한 유사도 행렬은 구조상 대칭이라, 서로 다른 두 방향의 영향력을 담으려면 애초에 서로 다른 두 벌의 표현이 있어야 한다.
  • 차원을 하나 늘렸을 뿐인데 표현력이 크게 달라진 점도 눈여겨볼 만하다. 2차원에서는 사람과 동사를 한 축의 양끝으로 밀어 넣어야 했지만, 3차원에서는 각각 독립된 축을 얻어 두 성질을 동시에 가진 단어까지 다룰 수 있다.
  • 키와 쿼리 행렬을 특정 성질만 뽑아내는 장치로 보면 어텐션 헤드의 정체가 선명해진다. 하나의 헤드는 결국 '어떤 종류의 단어가 어떤 종류의 단어에 영향을 준다'는 규칙 하나를 담당한다.
  • 직접 만든 규칙이 두 개뿐이었다는 사실이 멀티헤드의 필요성을 설명한다. 사람과 동사가 결합해 다른 단어의 성질에 영향을 주는 식의 복잡한 통로까지 생각하면, 헤드가 열 개 스무 개로 늘어나는 것이 자연스럽다.

자주 묻는 질문

왜 어텐션에서 키와 쿼리 행렬을 따로 두나요?

단어 사이의 영향력이 한쪽으로 기울기 때문입니다. 임베딩이 하나뿐이면 코사인 유사도나 내적으로 만든 표가 대칭이 되어 A가 B에 주는 영향과 B가 A에 주는 영향을 다르게 만들 수 없으므로, 키용과 쿼리용 두 벌의 표현이 필요합니다.

영향력이 비대칭이라는 것을 보여주는 예는 무엇인가요?

동사 saw입니다. 앞에 Bob이 오면 saw는 노려보는 쪽으로 의미가 크게 기울지만, 반대로 saw 뒤에 온 Bob은 보였다는 이유만으로 달라지지 않습니다. 그래서 Bob이 saw를 당기는 힘은 세고 saw가 Bob을 당기는 힘은 약해야 합니다.

차원을 2차원에서 3차원으로 늘린 이유는 무엇인가요?

앞선 영상에서 키와 쿼리 계산을 손으로 풀려다 실패했는데, 차원이 너무 적은 것이 원인이라고 봤기 때문입니다. 중간층 노드를 하나 늘려 사람다움, 동사다움, 친근함을 각각 독립된 축으로 두자 원하는 계산이 가능해졌습니다.

영상에 나온 1과 0.8 같은 숫자는 어떻게 정해지나요?

설명을 위해 직접 넣은 값입니다. 실제 신경망에서는 이런 값이 모두 파라미터이며 손으로 계산하지 않고 학습 과정에서 역전파를 통해 결정됩니다.

원문과 출처

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

YouTube 원본 영상 보기 ↗

관련 AI 소식