AI VIDEO BRIEFING

어텐션 메커니즘 쉽게 이해하기: 쿼리 키 밸류와 소프트맥스를 단어 중력으로 설명하다

문장 두 개와 단어 네 개로 만든 초소형 트랜스포머에 어텐션을 붙여가며 쿼리와 키, 밸류 행렬, 스케일드 내적, 소프트맥스가 각각 무슨 일을 하는지 직관으로 풀어낸 강의입니다. 키와 쿼리를 둘로 나누는 이유도 짚습니다.

단어가 서로를 끌어당긴다: 세상에서 가장 작은 어텐션 메커니즘 영상 대표 이미지

핵심 메시지

  • 어텐션은 단어들이 임베딩 공간에서 서로를 끌어당기는 중력으로 이해할 수 있고, 그 당김이 곧 신경망에 기억을 부여한다.
  • 밸류 행렬은 당김의 방향을 정한다. 사람과 동사를 가르는 축은 거의 움직이지 못하게 막고, 친절함처럼 문맥으로 바뀔 수 있는 축은 크게 열어준다.
  • 키와 쿼리를 두 개로 나누는 이유는 영향력이 대칭이 아니기 때문이다. 하나의 임베딩으로는 두 방향의 서로 다른 당김을 만들 수 없다.
  • 트랜스포머가 쓰는 유사도는 코사인도 내적도 아닌 스케일드 내적이며, 수식의 루트 d_k는 차원 수로 나눠 정규화하는 항이다.
  • 소프트맥스는 점수를 합이 1인 양수로 바꿔 두 단어를 잇는 선분 위 어느 지점까지 이동할지를 정한다.

쉽게 이해하기

이 강의는 트랜스포머 3부작의 마지막 편입니다. 앞선 편에서 만든 모델은 문장 두 개(메리가 밥에게 인사했다, 밥이 메리를 무시했다)와 단어 네 개, 그리고 노드 두 개짜리 은닉층 하나로 이루어진 극단적으로 작은 신경망이었습니다. 이 신경망의 앞쪽 절반은 데이터를 이해해 임베딩을 만들고, 뒤쪽 절반은 그 임베딩을 여러 방향에서 읽어 다음 단어를 고릅니다. 임베딩의 가로축은 사람인가 동사인가, 세로축은 친절한가 불친절한가를 나타냅니다.

문제는 기억이었습니다. 이 신경망은 직전 단어 하나만 보고 다음 단어를 내놓기 때문에 밥이 밥을 봤다, 메리가 메리를 봤다 같은 말이 되지 않는 문장을 아무 제약 없이 만들어냅니다. 순환 신경망이나 LSTM도 몇 단어 앞까지만 기억하므로 근본 해결이 되지 못합니다. 강연자는 이를 기억이 짧은 물고기처럼 말하는 상태에 비유합니다.

여기서 어텐션이 들어옵니다. 강연자는 어텐션을 단어 중력으로 봅니다. 임베딩 공간에 놓인 단어들이 서로를 끌어당기면서 자기 성질을 조금씩 상대에게 주입한다는 것입니다. 카를로스라는 중립적인 인물이 메리 뒤에 오면 조금 친절한 쪽으로 끌려 올라가고, 밥 뒤에 오면 불친절한 쪽으로 끌려 내려갑니다. 그 결과 같은 카를로스라도 앞에 무엇이 왔는지에 따라 임베딩에서 다른 자리에 놓이고, 신경망은 그 위치 차이로 앞 문맥을 기억하게 됩니다.

다만 그냥 상대 쪽으로 끌려가면 곤란합니다. 밥이 봤다의 봤다는 여전히 동사여야 하는데, 밥 쪽으로 끌려가면 사람 쪽으로 옮겨가 버립니다. 그래서 밸류 행렬이 필요합니다. 밸류 행렬은 이동의 지형을 정하는 선형 변환입니다. 사람과 동사를 가르는 가로 방향은 거칠게 만들어 거의 움직이지 못하게 하고, 친절함을 나타내는 세로 방향은 매끄럽게 만들어 크게 움직이게 합니다. 아무리 말을 덧붙여도 동사가 사람이 되지는 않지만, 어떤 단어를 더 친절하거나 불친절하게 만드는 일은 가능하다는 언어적 직관을 행렬로 옮긴 것입니다.

당김의 세기는 유사도가 정합니다. 강연자는 거리, 원점과 이루는 각의 코사인, 내적 세 가지를 비교한 뒤 트랜스포머가 실제로 쓰는 것은 스케일드 내적이라고 정리합니다. 내적을 차원 수의 제곱근으로 나누는 것이며, 수식에 등장하는 루트 d_k가 바로 그것입니다. 마지막으로 소프트맥스는 이 점수들을 지수함수에 넣어 순서를 유지한 채 양수로 바꾸고, 합으로 나눠 합이 1이 되게 만듭니다. 계수의 합이 1이면 두 점의 선형 결합은 두 점을 잇는 선분 위의 점이 되므로, 한 단어가 다른 단어 쪽으로 몇 퍼센트 이동할지가 정해집니다.

주요 인사이트

  • 키와 쿼리를 굳이 둘로 나누는 이유는 대칭을 깨기 위해서입니다. 밥이 붙으면 봤다는 험악한 눈초리로 의미가 크게 바뀌지만, 봤다가 붙는다고 밥이 달라지지는 않습니다. 영향력은 방향에 따라 다릅니다.
  • 그런데 코사인이든 내적이든 두 단어 사이의 유사도는 하나의 값뿐입니다. 임베딩을 아무리 손봐도 두 개의 값이 나오지 않습니다. 그래서 끌어당기는 쪽을 위한 임베딩(키)과 끌려가는 쪽을 위한 임베딩(쿼리)을 따로 두는 것입니다.
  • 행렬을 숫자 배열이 아니라 선형 변환으로 보면 키와 쿼리의 역할이 선명해집니다. 신경망이 찾아준 정사각형 임베딩이 최선이 아닐 수 있고, 사람끼리는 더 가깝고 사람과 동사는 더 멀어지는 평행사변형으로 바꾸면 유사도가 더 쓸모 있어집니다.
  • 멀티 헤드 어텐션은 잘 작동하는 키와 쿼리 쌍이 여러 개일 때 하나를 고르는 대신 가중치를 학습해 섞는 방식입니다. 그 가중치 자체가 학습 가능한 파라미터라서 문맥마다 어느 관점을 더 볼지 달라집니다.
  • 강연자는 2차원만으로는 비대칭 유사도를 만드는 수치 예제를 끝내 만들지 못했다고 솔직히 밝힙니다. 사람, 동사, 친절함을 각각 축으로 둔 3차원으로 올려야 성립했고 그 부분은 별도 부록 영상으로 뺐다고 말합니다.

자주 묻는 질문

어텐션이 없으면 정확히 무엇이 문제인가요?

직전 단어 하나만 보고 다음 단어를 고르기 때문에 문맥이 사라집니다. 강의의 데이터셋에서는 밥이 밥을 봤다, 메리가 메리를 봤다 같은 문장을 막을 방법이 전혀 없습니다.

밸류 행렬은 무슨 일을 하나요?

당김의 방향을 정합니다. 이동하려는 벡터를 받아 지형에 맞게 꺾어주는 선형 변환으로, 바뀔 수 없는 축의 움직임은 억제하고 바뀔 수 있는 축의 움직임은 키웁니다.

수식의 루트 d_k는 왜 나누나요?

스케일드 내적을 쓰기 때문입니다. 내적을 차원 수의 제곱근으로 나눠 정규화하는 항이며, 예시의 2차원에서는 루트 2로, 임베딩이 1,000차원이라면 루트 1,000으로 나눕니다.

소프트맥스는 왜 필요한가요?

점수를 순서를 유지한 채 양수로 바꾸고 합이 1이 되게 만들기 위해서입니다. 합이 1인 계수로 두 단어를 선형 결합하면 두 점을 잇는 선분 위의 점이 되고, 그것이 곧 이동 비율이 됩니다.

원문과 출처

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

YouTube 원본 영상 보기 ↗

관련 AI 소식