어텐션(Attention)
쿼리(query)를 모든 키와 내적(dot product)으로 비교해 소프트맥스(softmax)로 가중치(weight)를 만들고, 그 가중치로 값들을 평균(mean)하는 '부드러운 찾기'. 트랜스포머(transformer)의 핵심 연산이다.
사전에서 값을 찾을 때는 열쇠가 정확히 맞아야 합니다. '고양이'를 찾으면 '고양이' 칸의 값 하나가 나옵니다. 어텐션은 이 찾기를 부드럽게 만든 것입니다. 찾는 것(쿼리 q)을 모든 열쇠(키
아래 평면에서 노란 쿼리 q를 끌어 보세요(여기서 d = 2). 그림을 단순하게 하려고 값을 열쇠와 같은 벡터(vector)로 두었습니다(
쿼리를 한 열쇠 쪽으로 돌리면 그 열쇠의 가중치가 커집니다. 방향은 그대로 두고 원점에서 멀리 끌면 점수 차이가 벌어져, 가중치가 점수가 가장 큰 열쇠로 몰리고 청록 점이 그 열쇠 끝으로 다가갑니다. 쿼리를 한없이 길게 늘인 극한(limit)에서는 내적이 가장 큰 열쇠 하나만 고르는 보통의 찾기가 됩니다(가장 큰 점수가 하나뿐일 때). 열쇠들의 길이가 모두 같다면 이것은 방향이 가장 가까운 열쇠, 곧 최근접 이웃(nearest neighbor) 찾기입니다. 이 그림처럼 열쇠 길이가 다르면 긴 열쇠가 유리합니다. 반대로 쿼리가 원점에 가까우면 가중치가 고르게 퍼져 출력은 모든 값의 평균에 가까워집니다. 소프트맥스는 이 두 극단 사이를 매끄럽게 이어 주므로 미분(differentiation)할 수 있고, 그래서 '무엇을 볼지'를 역전파(backpropagation)로 배울 수 있습니다.
왜 √d로 나누는가. d는 쿼리와 키의 차원입니다. 학습을 시작할 때처럼 q와 k의 성분이 서로 독립(independence)이고 평균 0, 분산(variance) 1이라고 합시다. 내적
행렬(matrix)로 한 번에. 실제로는 쿼리 n개를 한꺼번에 처리합니다. 쿼리들을 행으로 쌓은 행렬 Q(n×d), 키 행렬 K, 값 행렬 V를 두면,
셀프 어텐션. 쿼리, 키, 값이 모두 같은 문장에서 나오는 경우입니다. 토큰마다 벡터 x가 있고(임베딩, embedding), 학습되는 행렬 세 개로
인과 마스크(causal mask)는 다음 토큰을 예측하는 언어 모델(language model)이 쓰는 방식입니다. i번째 토큰은 자기와 그 앞만 볼 수 있도록 뒤쪽 점수를 −∞로 두어 가중치를 0으로 만듭니다. 그래서 '산'은 뒤에 올 '책을'을 보지 못하고 앞의 '민수가'를 가장 많이 봅니다. 양방향으로 바꾸면 '산'이 '책을'을 가장 많이 봅니다. 문장 전체를 한꺼번에 읽는 BERT(2018) 같은 모델이 이 방식입니다. √d로 나누지 않으면 같은 점수가 두 배가 되어 각 행이 한 칸으로 더 쏠리는 것도 보입니다.
여러 헤드. 트랜스포머는 이런 어텐션을 여러 벌(헤드) 나란히 돌립니다. 차원 d를 h개로 나눠 헤드마다 d/h차원의 쿼리·키·값을 따로 만들고, 결과를 이어 붙인 뒤 행렬 하나를 곱합니다. 헤드마다 다른 관계를 볼 수 있게 하려는 설계이고, 실제로 바로 앞 토큰을 보는 헤드, 같은 낱말이 앞에 나왔던 자리를 찾아 그 다음 토큰을 베껴 오는 헤드 같은 것이 관찰되었습니다. 그러나 어텐션 가중치를 그대로 '모델이 이 낱말 때문에 이렇게 답했다'는 설명으로 읽어도 되는지는 논쟁거리입니다(2019년의 논문 "Attention is not Explanation"과 그 반론). 가중치는 값을 섞는 비율일 뿐이고, 섞인 값이 뒤에서 어떻게 쓰이는지는 따로 살펴야 합니다.
순서를 모른다. 마스크가 없으면 어텐션에는 순서 개념이 없습니다. 입력 토큰의 순서를 섞으면 출력도 똑같이 섞일 뿐, 각 토큰이 받는 값은 그대로입니다. 가중 평균은 더하는 순서와 무관하기 때문입니다. 영어의 'dog bites man'과 'man bites dog'처럼 같은 토큰으로 된 다른 문장을 구별하려면 위치 정보를 따로 넣어야 하고, 그 방법은 트랜스포머에서 다룹니다. 입력에 위치 벡터를 더하는 방법에서 쿼리와 키를 위치만큼 회전시키는 RoPE까지, 그 방법들이 바뀌어 온 과정은 위치 인코딩(positional encoding)에 따로 모아 두었습니다.
어텐션은 2014년 드미트리 바흐다나우, 조경현, 요슈아 벤지오가 기계 번역(machine translation)에 도입했습니다. 그전의 순환 신경망(recurrent neural network) 번역기는 원문 전체를 고정된 길이의 벡터 하나에 눌러 담아야 해서 긴 문장에 약했습니다. 그들은 번역할 낱말마다 원문의 어느 부분을 볼지 가중치로 고르게 했습니다. 다만 점수는 내적이 아니라 작은 신경망(neural network)으로 매겼습니다. 2017년 아시시 바스와니 등은 "Attention Is All You Need"에서 순환을 아예 빼고, 이 페이지의 내적 어텐션과 토큰마다 따로 적용하는 작은 신경망만으로 쌓은 트랜스포머를 내놓았습니다.
이어지는 곳. 온도를 낮출수록 한 곳으로 몰리는 소프트맥스의 성질은 디코딩에서 다음 토큰을 고를 때 다시 나오고, 소프트맥스가 왜 지수 꼴인지는 최대 엔트로피 원리(principle of maximum entropy)가 설명합니다. 쿼리와 키를 길이 1로 맞추면 점수는 코사인 유사도(cosine similarity)가 되고, 그때 온도를 0으로 보낸 극한이 최근접 이웃 찾기입니다. 어텐션이 문맥 안에서 쿼리와 가까운 키를 찾아 그 값을 가져오는 일이라면, 문맥 밖의 큰 문서 모음에서 질문과 가까운 글을 찾아 문맥에 넣어 주는 검색 증강 생성(retrieval-augmented generation)은 같은 일을 한 단계 바깥에서 하는 셈입니다. 가까운 점일수록 큰 가중치를 주어 값들을 평균한다는 점에서 통계(statistics)의 커널 회귀(1964년 나다라야와 왓슨)와 같은 모양입니다. 위의 가정(성분이 독립) 아래에서 점수는 독립인 d개 항의 합이므로, d가 크면 중심극한정리(central limit theorem)에 따라 정규분포(normal distribution)에 가까워집니다. √d 계산은 그 분포의 폭을 잰 것입니다. 쿼리·키·값을 만드는 행렬은 선형변환(linear transformation)이고, 이것을 층층이 쌓아 잔차 연결(residual connection)과 정규화로 감싼 것이 트랜스포머입니다.
이 개념이 나오는 긴 글
이 개념 위에 세워진 것
이 개념을 언급하는 페이지
- 내적
… 코사인 유사도가 큰 문서를 찾아 언어 모델의 문맥에 넣는 방법이 검색 증강 생성입니다. 언어 모델의어텐션도 쿼리 벡터와 여러 키 벡터의 내적으로 비슷한 정도를 잰 뒤, 그 점수를 소프트맥스로 합이 1인 …
- 코사인 유사도
… 사이각을 잴 수 있는데, 푸리에 급수의 계수는 함수와 사인·코사인 사이의 그런 내적입니다. 트랜스포머의어텐션도 쿼리와 키가 얼마나 닮았는지를 내적으로 재지만, 길이로 나누지 않고 차원의 제곱근 \sqrt d 로만 …
- 단어 임베딩
… 겪는데, 비슷한 낱말끼리 통계를 나누어 쓰게 하는 임베딩이 이를 누그러뜨렸습니다. 오늘날의 언어 모델은어텐션으로 앞뒤 낱말의 벡터를 섞어 문맥에 따라 벡터가 바뀌는 임베딩을 만들어, 과일 '배'와 타는 '배'에 …
- 신경망
… 낱말 벡터들을 각각 변환한 벡터들 사이의 내적으로 각 낱말이 다른 낱말에 얼마나 주목할지를 정하는(어텐션) 신경망이고, 오늘날 대형 언어 모델의 뼈대입니다. 2022년 이후 이 뼈대 위에서 일어난 일, 곧 선호 …
- 기계 학습
… 연쇄⟧, 은닉 마르코프 모델이고, 언어를 배우는 모형은 n-그램과 단어 임베딩에서 토큰화,어텐션, 트랜스포머, 언어 모델로 이어집니다. 분류 모형으로는 로지스틱 회귀, 결정 트리, …
- 소프트맥스와 교차 엔트로피
… 학습합니다. 그 확률에서 글을 뽑을 때 온도를 바꾸는 것이 디코딩의 가장 단순한 손잡이입니다.어텐션은 단어 사이의 유사도 점수를 소프트맥스로 가중치로 바꾸어, 어느 단어를 얼마나 참고할지 정합니다. 이때 …
- 인공지능
… 돌아갔습니다. 트랜스포머와 대형 언어 모델(2017년–). 2017년 구글 연구자들은 순환 구조 없이어텐션만으로 문장을 처리하는 트랜스포머를 발표했습니다. 병렬 계산이 쉬워 아주 큰 모델을 학습시킬 수 …
- 합성곱 신경망
… 정규화에서 다룹니다. 같은 무늬를 어디서나 찾는 대신, 멀리 떨어진 칸끼리 직접 참고하게 하는 방법은어텐션입니다. 시간 축의 되풀이 계산도 합성곱이 될 수 있습니다. 상태 h_t 를 행렬 \bar A, \bar …
- 순환 신경망과 LSTM
… 같은 해 드미트리 바다나우, 조경현, 벤지오는 풀어낼 때마다 입력 문장의 어느 낱말을 볼지 고르는어텐션을 덧붙였습니다. 2016년에는 구글 번역도 LSTM 기반 신경망으로 바뀌었습니다. 2017년의 …
- 토큰화와 BPE
… 어휘 크기 V는 저울질입니다. V가 크면 같은 글이 더 적은 토큰이 되어, 길이의 제곱으로 비싸지는어텐션의 부담이 줄어듭니다. 대신 토큰마다 벡터 하나를 두는 임베딩 행렬(V×d)이 커지고, 드문 토큰은 …
- 트랜스포머
… 여기에 위치를 나타내는 벡터를 더합니다(아래 '위치' 참고). 블록 L개. 블록마다 두 단계가 있습니다.어텐션은 토큰들 사이에 정보를 섞고, MLP(작은 2층 신경망)는 토큰마다 따로 벡터를 변환합니다. 두 단계 …
- 언어 모델과 다음 토큰 예측
… 지금까지의 글을 고정된 크기의 벡터 하나에 요약하며, 트랜스포머는 정해진 문맥 창 안의 모든 토큰을어텐션으로 직접 봅니다. 무엇을 최소화하는가. 모델 q의 학습 목표는 실제 글의 토큰마다 모델이 준 확률의 …
- 디코딩: 온도, top-p, 빔 탐색
… 어떤 규칙이 '좋은' 글을 주는지는 과제마다 실험으로 정합니다. 이어지는 곳. 온도가 있는 소프트맥스는어텐션의 가중치에도, 인간 피드백 강화 학습의 최적 정책 \pi^\ast \propto …
- 위치 인코딩의 변천
토큰 세 개 [A, B, C]를 셀프어텐션에 넣은 결과와, 순서를 바꾼 [C, A, B]를 넣은 결과를 비교해 봅시다. 마스크가 없다면 두 번째 …
- 상태 공간 모형과 선형 순환
… & j \le i \\ 0 & j \gt i \end{cases} 입니다(∘는 칸끼리의 곱). 인과어텐션\operatorname{softmax}(QK^{\mathsf T} + \text{마스크})V 와 나란히 …
- 언어 모델의 발전사: RLHF 이후
… 강화 학습)을 보고했습니다. 효율 쪽에서는 세 갈래가 이때 시작됩니다. 5월의 FlashAttention은어텐션을 근사 없이, GPU 메모리를 덜 읽고 쓰는 순서로 계산합니다. 8월의 LLM.int8()과 10월의 …