| 분류 | 신경망 연산 계열(가중 집계)[1] |
|---|---|
| 처음 쓰인 곳 | 2014년 기계 번역 모델[2] |
| 대표 구조 | 트랜스포머의 토큰 혼합 연산(2017년)[3] |
| 핵심 수식 | 스케일드 점곱 어텐션[3] |
| 기본 구성 | 질의(query), 키(key), 값(value)의 가중 합[1] |
쉽게 말하면, 어텐션은 입력의 여러 부분 가운데 지금 중요한 부분에 더 큰 비중을 두고 그 내용을 합치는 계산 방법이다. 처음에는 기계 번역에서 문장 전체를 고정 크기 벡터 하나로 압축하던 방식의 병목을 줄이려고 쓰였다. 지금은 트랜스포머가 단어들 사이의 관계를 계산하는 기본 연산으로 쓰인다.[1]
1. 개요
어텐션(attention)은 데이터에 따라 달라지는 가중치를 여러 표현에 매기고, 그 가중치로 표현들을 합쳐 출력을 만드는 신경망 연산 계열이다. 가중치는 현재의 질의나 문맥에 따라 정해지므로, 같은 입력 요소라도 디코딩 단계, 공간 위치, 층에 따라 다르게 작용할 수 있다. 어텐션은 처음에 신경망 기계 번역의 고정 벡터 병목을 없애는 방법으로 주목받았고, 이후 트랜스포머의 주된 토큰 혼합 연산이 되었다.[1]
머신러닝에서 어텐션이라는 말은 사람의 주의 집중을 재현한다는 주장이 아니라 기술 용어다. 이 말은 여러 관련 구조를 가리키며, 여기에는 순환 신경망 기반 인코더·디코더 어텐션, 셀프 어텐션, 크로스 어텐션, 희소 어텐션, 멀티헤드 어텐션이 포함된다. 이들의 공통점은 학습된 방식으로 입력에 따라 달라지는 집계를 한다는 것이다.[1]
2. 정의와 범위
이 기법 이전에는 영향력 있던 시퀀스 대 시퀀스 설계가 입력 시퀀스를 고정 차원 벡터 하나로 인코딩하고, 두 번째 순환 신경망으로 목표 시퀀스를 디코딩했다.[4] Bahdanau, Cho, Bengio는 디코더가 출력 단계마다 모든 인코더 상태에 가중치를 두어 그때그때 다른 문맥 벡터를 만들게 했다. 이들은 이를 입력 위치에 대한 미분 가능한 소프트 탐색으로 설명했고, 정렬 모델과 번역 모델을 함께 학습시켰다.[2] 이 메커니즘은 기계 번역을 위해 도입되었지만, 같은 아이디어는 곧 이미지 캡션 생성과 음성 인식에도 나타났다.[5][6][7][1]
추상적으로 어텐션 층은 다음을 입력으로 받는다:[1]
- 하나 이상의 질의(query): 무엇에 대한 정보를 요청하는지 정한다.
- 키(key): 질의와 비교되는 대상이다.
- 값(value): 집계될 정보를 담고 있다.
- 점수 함수와, 보통은 정규화 함수.[1]
질의 q_i, 키 k_j, 값 v_j에 대해 흔히 쓰는 형태는 다음과 같다.[1]
e_{ij} = s(q_i, k_j)
\alpha_{ij} = \frac{\exp(e_{ij})}{\sum_{\ell \in A_i}\exp(e_{i\ell})}
o_i = \sum_{j \in A_i}\alpha_{ij}v_j여기서 s는 학습되거나 고정된 호환성 점수, A_i는 질의 i가 볼 수 있는 위치들의 집합, α_ij는 어텐션 가중치, o_i는 출력이다. 패딩(padding) 위치, 미래 위치, 이웃이 아닌 위치처럼 허용되지 않는 연결은 마스크가 A_i에서 제외한다. 소프트맥스(softmax) 정규화를 쓰면 A_i에 대한 가중치는 음이 아니며 합이 1이다.[1]
이 정의는 흔히 혼동되는 세 가지 선택을 구분한다:[1]
- 무엇이 소통할 수 있는가? 어텐션 패턴이나 마스크가 허용하는 질의-키 쌍을 정한다.
- 관련성은 어떻게 점수화되는가? 점수는 가법, 점곱, 쌍선형 또는 다른 학습 함수일 수 있다.
- 무엇이 전달되는가? 값은 같은 입력에서 나오더라도 키와 같을 필요가 없다.[1]
따라서 어텐션은 트랜스포머와 같은 뜻이 아니다. 트랜스포머 이전에도 순환 인코더·디코더 모델이 어텐션을 썼고, 어텐션 모듈은 합성곱 신경망, 그래프, 집합, 멀티모달 구조에도 넣을 수 있다.[1]
3. 등장 배경과 발전
3.1. 인코더·디코더 어텐션
2014년 Bahdanau 모델은 순환 인코더·디코더 번역의 고정 벡터 병목을 해결하려 했다. 디코더의 각 단계 i에서 정렬 모델이 이전 디코더 상태를 양방향 인코더가 만든 각 주석(annotation)과 비교한다. 소프트맥스가 그 점수를 가중치로 바꾸고, 가중 합이 단계마다 고유한 문맥 벡터가 된다.[2] 정렬 모델이 작은 순방향 신경망을 쓰므로, 이 구성은 흔히 가법 어텐션(additive attention) 또는 Bahdanau 어텐션이라고 부른다.[1]
Luong, Pham, Manning은 나중에 모든 입력 위치를 보는 전역 어텐션과 창 안으로 제한하는 지역 어텐션을 비교했다. 점수 함수로는 점곱, 쌍선형, 연결 기반을 함께 연구했다.[5] 이 논문들을 통해 ‘어텐션’은 단일 공식이 아니라 정렬과 집계 선택의 계열을 뜻하는 말로 자리 잡았다.[1]
소프트 어텐션(soft attention)과 하드 어텐션(hard attention)의 구분은 요소를 고르는 방식에 관한 것이다. 소프트 어텐션은 연속 가중치로 값을 평균하므로 가중치를 통해 미분할 수 있다. 하드 어텐션은 이산적인 위치를 샘플링하거나 골라서 계산할 위치 수를 줄일 수 있지만, 보통 기울기 추정기나 다른 학습 전략이 필요하다. Xu 등은 이미지 캡션 생성에서 두 방식을 모두 평가했다.[6] Chorowski 등은 순환 어텐션을 음성 인식에 맞게 바꾸고, 긴 음향 시퀀스를 따라 정렬이 진행되도록 위치 인식 정보를 더했다.[7][1]
3.2. 트랜스포머 어텐션
2017년 논문 「Attention Is All You Need」는 순환이나 합성곱으로 시퀀스를 섞지 않고, 어텐션과 위치별 순방향 층만으로 만든 인코더·디코더 구조를 제시했다.[3] 핵심 연산은 스케일드 점곱 어텐션(scaled dot-product attention)이다.
\operatorname{Attention}(Q,K,V) = \operatorname{softmax}\left(\frac{QK^\top}{\sqrt{d_k}} + M\right)VQ의 행은 질의, K의 행은 키, V의 행은 값이며, M은 선택 사항인 마스크다. 스케일 계수 1/√d_k는 키 차원 d_k가 커질 때 점곱 값의 전형적인 크기를 제한한다. 이 스케일링이 없으면 큰 로짓 값이 소프트맥스를 기울기가 작은 영역으로 밀어낼 수 있다.[3]
입력 행렬 X가 있을 때 셀프 어텐션 층은 보통 학습된 투영으로 세 행렬을 만든다.[1]
Q=XW_Q,\qquad K=XW_K,\qquad V=XW_V트랜스포머 어텐션 덕분에 학습 중 모든 시퀀스 위치를 병렬로 계산할 수 있게 되었다. 또한 두 위치 사이의 최대 경로 길이가 상수 번의 어텐션 연산으로 줄었다. 다만 전체 어텐션 층은 모든 쌍을 비교하므로 점수 행렬의 크기가 시퀀스 길이의 제곱에 비례한다.[3][1]
4. 스케일드 점곱 어텐션, 단계별로
이 절은 2017년 트랜스포머 논문의 표기를 따라 어텐션 층 하나를 살펴보고, 두 토큰짜리 예시를 손으로 계산한다. 여기서 정하는 형태, 스케일 계수, 연산 순서는 이후 모든 변형이 물려받는 기준이다. 개별 변형은 관련 문서에서 자세히 다룬다.[1]
입력 행렬 X는 토큰마다 한 행이 있으며 형태는 n × d_model이다. 학습되는 세 행렬이 X를 질의, 키, 값으로 바꾼다.[1]
Q = XW^Q,\qquad K = XW^K,\qquad V = XW^VW^Q와 W^K는 d_model × d_k 형태이고, W^V는 d_model × d_v 형태다. 질의와 키는 점곱으로 비교되므로 차원 d_k를 공유해야 하지만, 값은 다른 너비 d_v를 가질 수 있으며 출력은 그 너비를 물려받는다. 원래 모델은 d_model = 512였고, 헤드가 h = 8개일 때 각 헤드는 d_k = d_v = d_model/h = 64를 썼다.[3] 셀프 어텐션에서는 같은 X가 세 투영 모두에 들어가고, 크로스 어텐션에서는 질의가 한 표현에서, 키와 값이 다른 표현에서 나온다(주요 형태 절 참고).[1]
4.1. 점수 계산과 스케일 계수
점수 행렬은 모든 질의를 모든 키와 비교하며, 다음과 같이 만든다.[1]
S = \frac{QK^\top}{\sqrt{d_k}}S의 형태는 n × n이고, 항목 S_ij는 토큰 i가 토큰 j에 얼마나 강하게 주의를 두는지 측정한다. 트랜스포머 논문의 저자들은 스케일링이 없으면 d_k가 클 때 가법 어텐션이 점곱 어텐션보다 나았다고 보고했다. 저자들은 그 이유를 점곱 값이 크게 자라 소프트맥스를 기울기가 극도로 작은 영역으로 밀어내기 때문이라고 추정했고, 그 해결책으로 √d_k로 나누는 방식을 택했다.[3]
각주에 실린 직관은 다음과 같다. q와 k의 성분이 평균 0, 분산 1인 독립 확률 변수라면 q·k는 평균 0, 분산 d_k를 가지므로, √d_k로 나누면 분산이 다시 1이 된다.[3]
나누는 값은 모델 너비가 아니라 헤드별 키 차원이다. 원래 설정에서 점수는 √512 ≈ 22.6이 아니라 √64 = 8로 나눈다. d_model을 잘못 쓰면 소프트맥스가 의도보다 훨씬 평평해진다.[1]
4.2. 소프트맥스와 마스킹
소프트맥스는 행마다 적용되므로, 각 질의가 키에 두는 가중치는 음이 아니고 합이 1이다. 마스크 M은 소프트맥스 이전에 점수에 더한다. 허용된 위치는 0을, 허용되지 않은 위치는 −∞(실제로는 큰 음수)를 받아 지수 함수 뒤에 정확히 0이 된다. 트랜스포머 논문은 인과 마스크를 이렇게 설명한다. 소프트맥스 입력에서 허용되지 않은 연결에 해당하는 값을 모두 −∞로 설정해 가리므로, 디코더에서 왼쪽 방향 정보가 흐르지 않는다.[3] 소프트맥스 뒤에 마스크를 적용하면 남은 가중치의 합이 1보다 작아지므로, 의도와 다른 연산이 된다.[1]
마지막 단계는 가중치에 값을 곱하는 것이다.[1]
P = \operatorname{softmax}(S + M),\qquad O = PVO의 형태는 n × d_v다. 다중 헤드 층에서는 이 전체 계산이 헤드마다 각자 투영된 Q, K, V로 한 번씩 수행되고, 헤드 출력을 이어 붙인 뒤 W^O로 투영한다.[3]
큰 점수에 대한 소프트맥스는 행의 최댓값을 먼저 빼고 계산한다. 수학적으로 결과는 같지만 지수 값이 범위를 벗어나지 않는다.[1]
\operatorname{softmax}(x)_i = \frac{e^{x_i - m(x)}}{\sum_j e^{x_j - m(x)}},\qquad m(x) = \max_i x_iFlashAttention은 정확히 이 형태를 쓰고, 최댓값과 정규화 상수를 키 블록에 걸쳐 점진적으로 유지할 수 있음을 보여 준다. 그래서 전체 점수 행렬을 메모리에 만들지 않아도 된다.[8] 점진적 형태는 Milakov와 Gimelshein의 온라인 정규화 상수 계산에서 가져왔다.[9][1]
4.3. 계산 예시와 인과 마스킹
d_model = d_k = d_v = 2인 토큰 두 개를 살펴본다. 모든 행렬이 2×2다. 아래 투영 가중치는 손으로 확인할 수 있도록 고른 값이며, 실제 학습된 층은 이 값을 학습으로 얻는다.[1]
X = \begin{pmatrix} 1 & 2 \\ 2 & 1 \end{pmatrix},\quad W^Q = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix},\quad W^K = \begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix},\quad W^V = \begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix}투영 결과 Q = X이고, K는 X의 열을 서로 바꾼 것이며, V는 둘째 열의 부호를 바꾼 것이다.[1]
Q = \begin{pmatrix} 1 & 2 \\ 2 & 1 \end{pmatrix},\quad K = \begin{pmatrix} 2 & 1 \\ 1 & 2 \end{pmatrix},\quad V = \begin{pmatrix} 1 & -2 \\ 2 & -1 \end{pmatrix}| 단계 | 토큰 1의 행 | 토큰 2의 행 | 비고 |
|---|---|---|---|
| 원점수 QK^T | (4, 5) | (5, 4) | q1·k1 = 1·2 + 2·1 = 4; q1·k2 = 1·1 + 2·2 = 5[1] |
| √d_k(≈1.4142)로 나눔 | (2.8284, 3.5355) | (3.5355, 2.8284) | 나누는 값은 √d_k[1] |
| 행 최댓값 빼기 | (-0.7071, 0) | (0, -0.7071) | 수치 안정화 단계[1] |
| 지수 함수 | (0.4931, 1) | (1, 0.4931) | 두 행의 합은 모두 1.4931[1] |
| 소프트맥스 가중치 | (0.3302, 0.6698) | (0.6698, 0.3302) | 각 행의 합은 1[1] |
| 출력 O = PV | (1.6698, -1.3302) | (1.3302, -1.6698) | 1행은 0.3302·v1 + 0.6698·v2[1] |
토큰 1은 q1·k2 = 5가 q1·k1 = 4보다 크기 때문에 토큰 2에 더 큰 가중치(0.6698)를 준다. 출력은 두 값 행의 혼합이며 v2 = (2, −1) 쪽으로 기운다. 스케일 계수를 생략했다면 토큰 1의 가중치는 (0.2689, 0.7311)이 되었을 것이다. 순서는 같지만 분포가 더 날카로워지며, 그 날카로움은 d_k가 커질수록 커진다.[1]
자기회귀 모델은 위치 i가 j ≤ i인 위치만 보도록 마스크를 더하며, 행렬로는 대각선과 그 아래가 0, 위쪽이 −∞인 형태다.[1]
M = \begin{pmatrix} 0 & -\infty \\ 0 & 0 \end{pmatrix}이 예시에 적용하면 토큰 1의 스케일된 점수는 (2.8284, −∞)가 되고, 가중치는 (1, 0), 출력은 정확히 v1 = (1, −2)가 된다. 토큰 2는 이미 두 토큰을 모두 보므로 행이 바뀌지 않는다. 가중치는 (0.6698, 0.3302), 출력은 (1.3302, −1.6698)이다.[1]
일반 규칙은 위치 i의 출력이 i까지의 토큰에만 의존한다는 것이다. 이로부터 두 가지 결과가 나온다. 학습 중에는 정답 시퀀스가 알려져 있고 각 행이 이 제약을 이미 지키므로, 모든 위치를 하나의 마스크된 점수 행렬로 병렬 계산할 수 있다.[10] 생성 중에는 새 토큰을 덧붙여도 앞 위치의 키와 값이 바뀌지 않으므로 저장해 두고 다시 계산하지 않아도 된다. 이것이 뒤에서 다루는 KV 캐시다.[1]
5. 주요 형태
5.1. 셀프 어텐션과 크로스 어텐션
셀프 어텐션에서는 질의, 키, 값이 모두 같은 시퀀스나 집합에서 만들어진다. 따라서 각 출력 위치가 같은 입력의 다른 위치 정보를 결합할 수 있다. 크로스 어텐션에서는 질의가 한 표현에서, 키와 값은 다른 표현에서 나온다. 인코더·디코더 번역에서는 디코더 상태가 질의가 되고 인코더 상태가 키와 값이 된다. 같은 구조로 텍스트에 따라 이미지 표현을 조건화하거나 다른 두 모달리티를 연결할 수 있다.[1]
이 용어들은 점수 함수가 아니라 Q, K, V가 어디에서 나오는지를 가리킨다. 셀프 어텐션이든 크로스 어텐션이든 단일 헤드 또는 다중 헤드, 밀집 또는 희소, 인과 또는 비인과일 수 있다.[1]
5.2. 인과, 양방향, 패딩 마스크
인과 마스크(causal mask)는 위치 i가 i 이전과 i 자신까지의 위치만 보도록 허용한다. 점수 행렬에서 허용되지 않는 항목은 소프트맥스 뒤에 0이 되는 값을 받으며, 보통 정규화 전에 −∞를 넣어 구현한다. 인과 셀프 어텐션은 자기회귀 언어 모델에 쓰인다.[1]
마스크가 없는 인코더는 양쪽 방향을 모두 볼 수 있다. 예를 들어 BERT는 양방향 트랜스포머 인코더와 마스크 언어 모델 목적 함수를 쓴다. 여기서 ‘양방향’은 허용되는 어텐션 패턴을 뜻하며, 별도의 점수 규칙을 뜻하지 않는다.[1]
패딩 마스크(padding mask)는 길이가 다른 예시를 배치로 묶을 때 생기는 자리표시자 위치를 제외한다. 그 밖의 마스크는 지역 창, 그래프 이웃, 블록 구조, 응용별 제약을 강제할 수 있다. 올바른 마스킹은 구현 세부가 아니라 층의 수학적 정의의 일부다.[1]
5.3. 멀티헤드 어텐션
멀티헤드 어텐션은 학습된 질의, 키, 값 투영을 여러 개 병렬로 적용한다.[1]
\operatorname{head}_r = \operatorname{Attention}(QW_r^Q, KW_r^K, VW_r^V)
\operatorname{MHA}(Q,K,V) = \operatorname{Concat}(\operatorname{head}_1,\ldots,\operatorname{head}_h)W^O원래 트랜스포머는 표현을 헤드 사이에 나눈 뒤 각 헤드 출력을 이어 붙이고 출력 투영을 적용했다.[3] 여러 헤드는 한 층 안에서 서로 다른 투영된 상호작용을 표현하게 한다. 다만 한 헤드가 안정적인 하나의 언어적 또는 의미적 개념에 대응한다고 가정해서는 안 된다. 헤드의 행동은 모델, 층, 입력, 학습 실행, 분석 방법에 따라 달라진다.[1]
5.4. 가법 점수와 승법 점수
두 가지 흔한 호환성 함수는 다음과 같이 정의된다.[1]
s_{\mathrm{add}}(q,k) = v_a^\top\tanh(W_q q + W_k k)
s_{\mathrm{dot}}(q,k) = q^\top k가법 어텐션은 학습된 순방향 정렬 모델을 쓴다. 승법(multiplicative) 어텐션은 점곱이나 q^T W k 같은 쌍선형 형태를 쓴다. 가법 어텐션과 점곱 어텐션은 서로 다른 함수를 표현할 수 있으며, 실제 비용은 텐서 형태와 하드웨어에 따라 달라진다. 스케일드 점곱 어텐션은 쌍별 점수 배치를 행렬 곱으로 계산할 수 있어 특히 편리하다.[3][1]
6. 다중 헤드 어텐션과 그 변형
멀티헤드 어텐션은 h개의 스케일드 점곱 어텐션을 병렬로 돌리고, 각각 자기 투영을 쓴 뒤 결과를 이어 붙인다.[3] 널리 쓰이는 변형들은 질의 헤드는 그대로 두고 키·값 헤드의 수를 바꾼다. 이는 생성된 토큰마다 디코더가 보관해야 하는 상태의 양을 정한다. DeepSeek-V2 논문은 변형별 토큰당 KV 캐시를 원소 수로 세어 표로 정리했고, 아래 공식은 그 표에서 옮긴 것이다.[11]
| 변형 | 논문 | 키·값 헤드 구성 | 토큰당 KV 캐시, 모든 층(원소 수) | 예시 크기(16비트 저장, 계산값) | 위키 문서 |
|---|---|---|---|---|---|
| 다중 헤드 어텐션(MHA) | Vaswani 등, 2017 | n_h개, 질의 헤드마다 하나 | 2 n_h d_h l | 262,144 원소, 512 KiB | 멀티헤드 셀프 어텐션[3] [11] |
| 다중 질의 어텐션(MQA) | Shazeer, 2019 | 1개, 모든 질의 헤드가 공유 | 2 d_h l | 8,192 원소, 16 KiB | MQA[10] [11] |
| 그룹 질의 어텐션(GQA) | Ainslie 등, 2023 | n_g개 그룹, 그룹마다 n_h / n_g개 질의 헤드가 공유 | 2 n_g d_h l | 65,536 원소, 128 KiB(n_g = 8) | 그룹 질의 어텐션[12] [11] |
| 다중 헤드 잠재 어텐션(MLA) | DeepSeek-AI, 2024 | 잠재 벡터(너비 d_c) 하나와 분리 RoPE 키(너비 d_h^R) 하나 | (d_c + d_h^R) l, DeepSeek-V2 비율에서 약 9/2 d_h l | 18,432 원소, 36 KiB | 다중 헤드 잠재 어텐션[11] |
예시 열은 n_h = 32, d_h = 128, l = 32로 계산했는데, 이는 Mistral 7B의 공개 차원이다. 이 모델은 키·값 헤드 8개의 GQA를 쓰므로 GQA 행이 실제 토큰당 캐시에 해당한다.[13] MLA 행은 DeepSeek-V2의 선택인 d_c = 4d_h, d_h^R = d_h/2를 가정하며, 논문은 이때 캐시가 2.25개 그룹의 GQA와 같다고 밝힌다.[11] 바이트 수는 원소 수에 16비트 저장을 위해 2를 곱한 값이다. vLLM 논문도 같은 계산을 OPT-13B에 적용해 토큰당 800 KB를 얻는다.[14]
MQA의 동기는 점진적 디코딩에 대한 성능 분석이었다. n단계 동안 연산량은 Θ(bnd^2)인데 메모리 접근량은 Θ(bn^2d + nd^2)다. 매 단계마다 앞선 모든 위치의 키와 값을 다시 읽어 오기 때문이다. 메모리 접근 대 연산 비율 Θ(n/d + 1/b)은 시퀀스 길이가 모델 너비에 견줄 만하거나 배치가 작으면 1에 가까워져, 메모리 대역폭이 병목이 된다. 모든 질의 헤드가 키와 값 헤드 하나를 공유하면 다시 읽어야 하는 텐서가 줄어든다.[10][1]
GQA는 질의 헤드를 G개 그룹으로 나누고, 각 그룹이 키 헤드와 값 헤드 하나씩을 공유한다. GQA-1은 MQA이고 헤드마다 한 그룹을 두는 GQA-H는 MHA이므로, 이 방법은 둘 사이를 보간한다. 논문의 또 다른 기여는 업트레이닝(uptraining)이다. 기존 다중 헤드 체크포인트에서 그룹별 키·값 헤드를 평균 풀링으로 합친 뒤, 원래 사전 학습 연산의 작은 비율(실험에서 5%)만 추가 학습한다.[12] 저자들은 GQA를 디코더 셀프 어텐션에만 적용했고 인코더 셀프 어텐션에는 적용하지 않았다고 밝힌다. 인코더에서는 표현이 병렬로 계산되어 메모리 대역폭이 주된 제약이 아니기 때문이다.[12][1]
MLA는 각 토큰의 키와 값을 저랭크 잠재(latent) 벡터로 압축하고, 상향 투영으로 복원한다. DeepSeek-V2에서는 키의 상향 투영을 추론 시 질의 투영에 흡수할 수 있어 잠재 벡터만 캐시하면 된다. 회전 위치 임베딩은 위치에 따라 키를 회전시키므로 압축 경로 안에는 적용할 수 없다. 그래서 논문은 이를 실어 나르는 토큰별 분리 키(decoupled key)를 따로 둔다. DeepSeek-V2는 n_h = 128, d_h = 128, d_c = 512, d_h^R = 64를 썼고, MLA가 벤치마크에서 MHA보다 나은 성능을 보이면서도 캐시는 훨씬 작았다고 보고했다.[11][1]
6.1. 위치 정보
어텐션만으로는 순열 등변(permutation-equivariant)이므로 위치를 어딘가에 넣어야 한다. 원래 트랜스포머는 위치 인코딩으로 사인파 또는 학습된 위치 벡터를 토큰 임베딩에 더했다.[3] 이후의 두 방법은 대신 위치 정보를 어텐션 점수에 넣으며, 각각 별도 문서로 다룬다.[1]
| 방법 | 논문 | 위치가 들어가는 곳 | 논문의 주장 | 위키 문서 |
|---|---|---|---|---|
| 회전 위치 임베딩(RoPE) | Su 등, 2021 | 질의와 키를, 절대 위치에 따라 커지는 각도만큼 회전시켜 점곱이 상대 거리에 의존하게 함 | 시퀀스 길이에 유연하고, 거리에 따라 감쇠하는 의존성을 가지며, 선형 셀프 어텐션과 호환 | 회전 위치 임베딩[15] |
| 선형 편향 어텐션(ALiBi) | Press, Smith, Lewis, 2021 | 위치 임베딩을 쓰지 않고, 질의-키 거리에 비례하는 벌점을 점수에 더함 | 길이 1024로 학습한 1.3B 모델이 2048로 외삽하며, 2048로 학습한 사인파 모델과 같은 퍼플렉시티를 보임. 학습은 11% 빠르고 메모리는 11% 적게 씀 | ALiBi[16] |
RoPE는 대부분의 공개 디코더 전용 모델에서 기본값이 되었다. 다만 앞선 캐시 축소 방법과 조합할 때 부작용 없이 쓸 수 있는 것은 아니다. DeepSeek-V2는 RoPE가 저랭크 압축과 맞지 않아 분리 키가 필요했다.[11] ALiBi의 저자들은 자신들의 방법을, 모델이 학습 때 본 길이보다 긴 시퀀스에 어떻게 외삽하는지에 대한 답으로 제시한다.[16][1]
6.2. 추론 시 KV 캐시
인과 마스크가 있으면 앞 토큰들의 키와 값 행은 바뀌지 않으므로, 디코더는 이를 저장하고 매 단계 새 토큰의 질의, 키, 값만 계산한다. 저장된 상태가 KV 캐시이고, 그 크기는 위 표의 토큰당 원소 수에 문맥 토큰 수를 곱한 값이다. vLLM 논문은 구체적 수치를 든다. 13B 파라미터 OPT 모델에서 토큰 하나의 캐시는 2(키와 값) × 5120(은닉 크기) × 40(층) × 2(FP16 값당 바이트)로 계산되어 800 KB다. 따라서 2048 토큰 요청은 최대 1.6 GB가 필요하고, 메모리가 수십 GB인 GPU에는 수십 개 요청만 들어간다.[14]
토큰당 디코딩 비용은 이 캐시를 읽는 데 지배된다. Shazeer의 분석에서 각 디코딩 단계는 전체 K와 V 텐서를 다시 읽으므로, 생성 전체에서 메모리 접근량은 시퀀스 길이의 제곱으로 늘지만 연산량은 선형으로 늘어난다.[10][1]
PyTorch 블로그의 Flash-Decoding 소개글은 하드웨어 측면을 더한다. 디코딩 때 질의 길이는 보통 1이고, FlashAttention은 배치와 질의 길이 방향으로만 병렬화하므로 배치 크기 1에서는 108개의 스트리밍 멀티프로세서를 가진 A100 GPU의 1% 미만만 쓴다. Flash-Decoding은 키와 값을 시퀀스 차원으로 나누고, 각 분할의 어텐션을 행마다 log-sum-exp 스칼라와 함께 계산한 뒤 분할 결과를 줄인다. 저자들은 긴 시퀀스 길이에서 어텐션이 FlashAttention보다 최대 50배, CodeLlama-34B의 종단 간 디코딩이 최대 8배 빠르다고 측정했다.[17]
이 캐시 문제를 다루는 기법은 다음과 같다.
| 문서 | 다루는 문제 | 출처 |
|---|---|---|
| KV 캐시 | 저장되는 키와 값 자체, 크기, 정밀도 | Shazeer, 2019; Kwon 등, 2023[10] [14] |
| PagedAttention | 캐시를 연속일 필요가 없는 고정 크기 블록에 저장하고, 가상 메모리 페이징처럼 요청마다 필요할 때 할당·공유함. vLLM의 기반 | Kwon 등, 2023[14] |
| Flash-Decoding | 긴 문맥에서 작은 배치 크기에도 GPU를 쓰도록 단일 질의의 어텐션을 키·값 길이에 걸쳐 병렬화 | Dao 등, 2023[17] |
| RadixAttention | 같은 프롬프트를 공유하는 호출 사이에서 캐시된 접두사를 재사용하는 기법(SGLang) | Zheng 등, 2023[1] |
| FlashInfer | 서빙 중 페이지 방식 캐시 위의 어텐션을 처리하는 커널 라이브러리 | 연결된 문서 참고[1] |
| H2O | 어텐션 질량을 많이 받는 「헤비 히터」 토큰을 남기고 다른 캐시 항목을 제거 | Zhang 등, 2023[18] |
| 어텐션 싱크(attention sink) | 앞쪽 몇 토큰의 키와 값을 최근 창과 함께 유지. 창만 쓰는 캐시는 텍스트가 캐시 크기를 넘으면 실패하기 때문 | Xiao 등, 2023[19] |
| 슬라이딩 윈도 어텐션 | 크기 W의 순환 버퍼 캐시에서 위치 i mod W를 덮어써 캐시가 커지지 않게 함 | Jiang 등, 2023[13] |
6.3. 효율적·희소 구현
「효율적 어텐션」에는 두 종류의 작업이 있다. 첫째는 밀집(dense) 어텐션과 정확히 같은 함수를 계산하되 메모리 접근을 더 잘 구성하는 것이다. 둘째는 계산하는 질의-키 쌍을 바꾸거나 소프트맥스를 더 싼 연산자로 바꿔 모델 자체를 바꾸는 것이다. 아래 표가 둘을 나눈다.[1]
| 방법 | 정확성 | 바꾸는 것 | 논문의 주장 | 출처 |
|---|---|---|---|---|
| FlashAttention | 정확 | Q, K, V를 SRAM에 맞는 블록으로 나누고, 블록 사이에서 소프트맥스 최댓값과 정규화 상수를 유지하며, 역전파에서 점수 행렬을 저장하지 않고 다시 계산 | 표준 구현은 N×N 점수와 확률 행렬을 HBM에 써서 O(N²) 메모리가 든다. 타일 알고리즘은 N에 선형인 추가 메모리만 쓴다 | Dao 등, 2022[8] |
| FlashAttention-2 | 정확 | 스레드 블록과 워프 사이의 작업 분할을 개선하고 행렬곱이 아닌 연산(FLOP)을 줄임 | FlashAttention보다 약 2배 빠르고, A100에서 최고 FLOPs/s의 50~73%에 도달 | Dao, 2023[20] |
| FlashAttention-3 | 정확 | Hopper의 비동기성(워프 특화, TMA)을 쓰고 행렬곱과 소프트맥스를 교차 배치하며, FP8과 블록 양자화·비일관 처리를 추가 | FP16은 H100에서 1.5~2.0배 빠르고 최대 740 TFLOPs/s(활용률 75%). FP8은 약 1.2 PFLOPs/s이며 기준 FP8 어텐션보다 수치 오차가 2.6배 낮음 | Shah 등, 2024[21] |
| Ring Attention | 정확 | 블록 단위 어텐션과 피드포워드 계산을 여러 장치에 나누고, 키·값 블록 전송을 계산과 겹침 | 근사 없이, 이전 메모리 효율 Transformer보다 장치 수 배만큼 긴 시퀀스를 처리 | Liu, Zaharia, Abbeel, 2023[22] |
| 고정 패턴 희소 어텐션 | 아님(패턴 제한) | Longformer는 슬라이딩 창과 선택된 전역 위치를 결합하고, BigBird는 무작위 연결을 더함 | 창과 전역 위치 수가 고정이면 비용이 시퀀스 길이에 선형(Longformer) | Longformer; BigBird[23] [24] |
| 슬라이딩 윈도 어텐션 | 아님(패턴 제한) | 각 층이 앞 W개 위치를 보며, k개 층을 쌓으면 도달 범위는 약 W×k | W=4096, 32개 층이면 Mistral 7B 저자들은 이론적 범위를 약 131K 토큰으로 설명 | Jiang 등, 2023[13] |
| Native Sparse Attention(NSA) | 아님(학습된 선택) | 거친 토큰 압축과 세밀한 토큰 선택을 하드웨어 산술 강도에 맞춘 계층으로 결합하고 종단 간 학습 | 저자들의 벤치마크에서 전체 어텐션과 같거나 넘고, 64k 길이에서 디코딩과 순·역방향 계산을 빠르게 함 | Yuan 등, 2025[25] |
| DeepSeek Sparse Attention(DSA) | 아님(학습된 선택) | 작은 「라이트닝 인덱서」가 질의마다 앞 토큰을 점수화하고 상위 k개 키·값만 어텐션에 넣음. MLA 위에 구현 | 기술 보고서에 따르면 DeepSeek-V3.2는 희소 학습 단계에서 질의마다 키·값 토큰 2048개를 선택 | DeepSeek-AI, 2025[26] |
| 블록 혼합 어텐션(MoBA) | 아님(학습된 선택) | 키·값 블록에 전문가 혼합식 라우팅을 적용해 각 질의가 블록 일부만 보게 함. 전체 모드와 희소 모드를 전환 | 논문에 따르면 MoBA가 Kimi의 긴 문맥 요청에 배포되었다 | Lu 등, 2025[27] |
| 선형 어텐션 | 아님(다른 연산자) | 소프트맥스 커널을 특징 맵으로 바꿔, 질의를 곱하기 전에 키-값 곱을 누적 | 저자들의 정식화에서 시퀀스 길이에 선형 확장. Performer는 랜덤 특징으로 소프트맥스를 근사 | 선형 어텐션 논문; Performer[28] [29] |
| 라이트닝 어텐션(Lightning Attention) | 아님(선형 어텐션 구현) | 블록 내 항과 블록 간 항을 나눠 타일로 구현해 인과 선형 어텐션이 이론 처리량에 도달 | 개발사에 따르면 MiniMax-01은 전문가 혼합과 결합해 100만 토큰 창으로 학습한 4,560억(456B) 파라미터 모델을 만듦 | Qin 등, 2024; MiniMax, 2025[1] |
| Infini-attention | 아님(압축 메모리 추가) | 마스크된 지역 어텐션과 장기 선형 어텐션 메모리를 한 블록에서 결합하고, 메모리 매개변수를 제한 | 1B와 8B 모델로 100만 토큰 패스키 검색과 50만 토큰 책 요약에서 평가 | Munkhdalai, Faruqui, Gopal, 2024[30] |
| 어텐션 싱크(StreamingLLM) | 아님(캐시 정책) | 처음 몇 토큰의 키·값과 슬라이딩 창을 유지. 학습된 모델은 내용과 무관하게 처음 토큰에 큰 어텐션 질량을 두기 때문 | 최대 400만 토큰까지 안정적인 언어 모델링, 슬라이딩 창 재계산 기준보다 최대 22.2배 빠름 | Xiao 등, 2023[19] |
「논문의 주장」 열의 값은 저자들이 자기 설정에서 얻은 결과이며 독립 측정이 아니다. 희소 방법이나 선형 방법이 품질을 유지하는지는 과제에 따라 다르다. FlashAttention 논문이 동기로 삼은 것도 근사 방법이 벽시계 시간 향상을 자주 주지 못한다는 점이었다.[8][1]
6.4. 교차 어텐션과 인코더·디코더 활용
크로스 어텐션은 질의가 한 시퀀스에서, 키와 값이 다른 시퀀스에서 나오는 배열이다. 트랜스포머보다 먼저 있었다. Bahdanau, Cho, Bengio의 번역 모델에서는 디코더의 이전 은닉 상태가 질의이고, 인코더 주석이 키와 값이며, 작은 순방향 정렬 모델이 점수를 만든다. 그래서 디코더는 출력 단계마다 입력 위치에 대한 소프트 탐색을 수행한다.[2]
트랜스포머는 이 아이디어를 「인코더·디코더 어텐션」 층에 유지한다. 이 층에서는 질의가 이전 디코더 층에서 오고, 키와 값은 인코더 출력에서 와서 모든 디코더 위치가 입력의 모든 위치를 볼 수 있다.[3] 이 논문의 전체 구조는 아래 관련 문서에서 다룬다.[1]
이 주제의 관련 문서는 다음과 같다.
| 문서 | 다루는 내용 |
|---|---|
| 크로스 어텐션 | 질의와 키·값의 출처를 나누는 일반 구성. 텍스트-이미지 조건화에 쓰이는 경우 포함[31] |
| 바다나우 어텐션 | 2014년 가법 정렬 모델과 그 학습[2] |
| Attention Is All You Need | 2017년 논문, 인코더·디코더 배치, 실험[3] |
디코더 전용 언어 모델에는 인코더가 없으므로 크로스 어텐션도 없다. 조건이 되는 텍스트는 출력과 같은 시퀀스에 넣고 인과 셀프 어텐션으로 처리한다.[1] T5 같은 인코더·디코더 모델은 두 종류의 층을 모두 유지한다. 인코더에는 메모리 대역폭이 주된 병목이 아니라는 GQA 논문의 관찰이 이 구조에도 적용된다.[12]
7. 구조적 성질
어텐션은 메시지 전달로 이해할 수 있다. 각 키-값 쌍이 메시지를 내고, 질의가 가중치를 정하며, 출력은 선택된 값들을 모은다. 이 관점은 시퀀스를 넘어 확장된다.[1]
그래프 어텐션 네트워크(Graph Attention Networks)는 노드의 어텐션을 그래프 이웃으로 제한하고, 이웃 메시지에 서로 다른 계수를 학습한다.[32] 비지역(non-local) 신경망 블록은 이미지나 영상의 특징 맵에서 위치들에 걸쳐 가중 합을 계산한다.[33] Set Transformer는 집합 입력을 다루는 순열 불변 모델을 만들면서 어텐션을 사용한다.[34]
순서 정보가 없는 셀프 어텐션은 순열 등변(permutation-equivariant)이다. 입력 행을 바꾸면 출력도 같은 방식으로 바뀐다. 집합에는 유용하지만 순서가 중요할 때는 부족하다. 그래서 트랜스포머 모델은 위치 인코딩을 더하거나 포함시킨다. 원래 트랜스포머는 사인파 또는 학습된 위치 표현을 입력 임베딩에 더했다.[3] 이후의 방법은 상대 위치 정보를 점수에 넣거나 질의와 키를 수정하지만, 이 선택은 기본 어텐션 연산과 별개다.[1]
밀집 셀프 어텐션 층은 허용된 모든 위치 쌍을 한 단계에서 연결할 수 있다. 고정 커널을 쓰는 합성곱과 달리 가중치가 현재 표현에 따라 달라진다. 다만 이것이 학습된 모델이 먼 정보를 잘 쓴다는 보장은 아니다. 계산 그래프가 연결을 허용할 뿐이며, 최적화, 학습 데이터, 위치 표현, 마스킹, 수치 정밀도가 실제로 쓰이는 정보를 함께 결정한다.[1]
8. 응용
어텐션은 재귀 번역 시스템에서 여러 모델 계열로 옮겨 갔다.[1]
- 언어와 음성: 인코더·디코더 어텐션은 입력과 목표 시퀀스의 정렬을 지원하고, 트랜스포머 셀프 어텐션은 문맥적 토큰 표현을 제공한다. 위치 인식 어텐션은 음성 인식을 위해 개발되었다.[7]
- 비전: 초기 시각 어텐션 모델은 캡션 생성 중 공간 특징에 가중치를 주었다.[6] 비지역 블록은 이후 이미지와 영상 특징에 비슷한 집계를 적용했다.[33] 비전 트랜스포머(Vision Transformer)는 이미지 패치를 시퀀스로 보고 트랜스포머 인코더로 처리한다.[35]
- 멀티모달 생성: 잠재 확산 모델은 크로스 어텐션으로 이미지 생성 특징을 텍스트나 공간 입력 같은 표현에 맞춰 조건화한다.[31] 이는 새로운 점수 함수가 아니라, 크로스 어텐션이 두 표현 흐름을 잇는 예다.
- 그래프와 집합: 마스크로 통신을 그래프 간선에 제한할 수 있고, 마스크 없는 집합 어텐션은 입력 순서를 부과하지 않고 쌍별 상호작용을 모델링한다.[32][34]
- 생물 분자 모델링: AlphaFold 2의 Evoformer는 다중 서열 정렬과 잔기 쌍 표현에 대해 어텐션 기반과 비어텐션 기반 갱신을 함께 포함하고, 구조 모듈은 불변 점 어텐션(invariant point attention)을 쓴다.[36]
이 예들은 같은 넓은 패턴을 쓰지만 토큰화, 마스크, 기하, 목적 함수, 주변 구조에서 크게 다르다. 한 영역의 결과가 특정 어텐션 설계가 다른 영역에서도 최선이라는 것을 그 자체로 보여 주지는 않는다.[1]
9. 효율성과 메모리
길이 n의 시퀀스에 대해 밀집 셀프 어텐션 점수 행렬은 n²개 항목을 가진다. 헤드 차원이 d이면 점수를 만들고 값에 적용하는 데 대략 n²d번의 산술 연산이 든다. 단순한 구현은 배치 원소와 헤드마다 n×n 중간 행렬도 실체화한다. 이 비용은 긴 시퀀스와 고해상도 공간 입력에서 중요해진다.[3][1]
자기회귀 디코딩 중에는 이전에 계산한 키와 값을 보통 KV 캐시에 보관한다. 캐싱은 앞 토큰의 투영을 다시 계산하지 않게 하지만, 저장된 상태는 시퀀스 길이와 키·값 헤드 수에 따라 커진다. 다중 질의 어텐션(MQA)은 키와 값 세트를 모든 질의 헤드가 공유해 점진적 디코딩 중 캐시와 읽는 데이터를 줄인다.[10] 그룹 질의 어텐션(GQA)은 중간 개수의 키·값 헤드를 쓰며, 표준 다중 헤드와 다중 질의 어텐션 사이의 절충으로 제안되었다.[12] 이 변형들은 키·값 메모리와 대역폭을 줄이지만, 밀집 어텐션의 쌍별 질의-키 연산은 없애지 않는다.[1]
희소 어텐션은 허용되는 쌍을 제한한다. Longformer는 슬라이딩 지역 창과 선택된 전역 위치를 결합해, 창 크기와 전역 위치 수가 고정되면 어텐션 비용이 시퀀스 길이에 선형으로 늘어난다.[23] BigBird는 지역, 전역, 무작위 연결을 결합하고 그 특정 희소 패턴에 대한 이론적 결과를 제시한다.[24] 희소 설계는 보편적인 직접 연결성을 정해진 통신 그래프와 바꾸므로, 정확도와 효율은 패턴이 과제에 맞는지에 달려 있다.[1]
선형 어텐션 방법은 어텐션을 다시 쓰거나 근사해, 키-값 집계를 각 질의와 결합하기 전에 먼저 수행할 수 있게 한다. Katharopoulos 등은 커널 특징 맵과 행렬 결합법칙을 써서 자신들의 정식화에서 시퀀스 길이에 대한 선형 확장을 얻었다.[28] Performer는 양의 직교 랜덤 특징을 써서 소프트맥스 어텐션을 근사했다.[29] 이런 방법은 연산자를 바꾸거나 근사하므로, 품질, 안정성, 실제 속도는 점근 표기만으로 정해지지 않는 경험적 문제다.[1]
FlashAttention은 IO를 고려한 타일 알고리즘으로 정확한 스케일드 점곱 어텐션을 계산한다. HBM에 전체 어텐션 행렬을 쓰지 않고, 더 빠른 온칩 메모리에서 블록을 처리하며 블록 사이의 소프트맥스 정규화를 유지한다.[8] 밀집 어텐션의 산술 연산은 여전히 시퀀스 길이에 대해 이차이지만, 보조 메모리 사용과 메모리 접근량은 단순한 구현보다 적다.[1]
이 방법들은 바꾸는 대상이 서로 다르다.
| 접근 방식 | 수학적 어텐션 패턴을 바꾸는가? | 주로 겨냥하는 자원 |
|---|---|---|
| 희소 어텐션 | 바뀜(쌍을 마스킹) | 쌍별 연산과 메모리[1] |
| 커널·특징 맵 어텐션 | 바뀌거나 근사 | 점근적 시퀀스 확장[1] |
| 다중 질의·그룹 질의 어텐션 | 키·값 공유 방식이 바뀜 | 디코딩 캐시 크기와 대역폭[1] |
| FlashAttention식 타일링 | 정확한 밀집 어텐션에서는 바뀌지 않음 | 메모리 접근량과 중간 결과[1] |
10. 해석과 한계
어텐션 행렬은 한 층, 한 헤드, 한 입력에서 쓰인 계수를 기록한다. 그 계산에서 어떤 값 벡터에 강한 가중치가 주어졌는지 보여 줄 수 있다. 그러나 원시 입력 특징이 최종 예측에 미치는 인과 효과를 자동으로 재지는 않는다.[1]
Jain과 Wallace는 자신들이 연구한 NLP 모델에서 어텐션 가중치가 경사 기반 중요도와 약하게 관련되는 경우가 많고, 상당히 다른 어텐션 분포가 비슷한 출력을 낼 수도 있음을 발견했다.[37] Wiegreffe와 Pinter는 어텐션이 설명으로 인정되는지가 정의, 모델, 검증 방식에 달려 있다고 논증하며, 보편적 기각 대신 대안적 진단을 제안했다.[38] Serrano와 Smith도 개입 아래에서 어텐션 크기가 중요도의 확실한 척도가 아님을 발견했다.[39]
깊은 트랜스포머에서는 잔차 연결과 반복된 혼합이 해석을 더 복잡하게 만든다. Abnar와 Zuidema는 층을 가로지르는 정보 전파를 설명하기 위해 어텐션 롤아웃(attention rollout)과 어텐션 흐름(attention flow)을 제안했고, 자신들의 실험에서 원시 어텐션보다 절제(ablation) 및 경사 측정과 더 높은 상관을 보였다.[40] 이 방법들은 여전히 진단 도구이며, 인과적 책임의 증명은 아니다.[1]
서로 다른 점수 벡터가 비슷한 가중 합을 낼 수 있다. 특히 값 벡터가 중복될 때 그렇다. 로짓의 크기가 크면 소프트맥스가 포화되어 분포가 매우 뾰족해지고 미분값은 작아진다. 따라서 스케일링, 정규화, 초기화, 정밀도, 마스킹이 학습 동작에 영향을 준다.[1]
밀집 어텐션은 허용된 모든 위치가 서로 상호작용하도록 하지만, 허용이 곧 성공적인 사용은 아니다. 긴 시퀀스는 여전히 검색, 최적화, 위치 처리에 어려움을 줄 수 있다. 반대로 희소하거나 근사적인 층도 관련 의존성이 그 통신 패턴을 따르면 충분할 수 있다. 장문맥 능력에 대한 주장은 컨텍스트 창 크기나 복잡도만으로 추론하지 말고, 목표 분포와 과제에서 평가해야 한다.[1]
트랜스포머의 동작은 어텐션만으로 생기지 않는다. 순방향 층, 잔차 경로, 정규화, 토큰화, 위치 표현, 목적 함수, 데이터, 디코딩이 모두 기여한다. 어텐션을 바꾸거나 시각화하는 것은 시스템의 한 부분만 다룬다.[1]
11. 흔한 오해와 함정
구현과 설명에서 반복되는 오류는 다음과 같다. 각 행은 이를 바로잡는 출처를 함께 보여 준다.
| 오해 또는 함정 | 출처가 말하는 내용 |
|---|---|
| 점수는 √d_model로 나눈다 | 트랜스포머 논문은 헤드별 키 차원인 √d_k로 나눈다. d_model = 512, 헤드 8개면 √64 = 8이다. 각주의 분산 논증은 두 d_k 차원 벡터의 점곱에 관한 것이다.[3] |
| 소프트맥스는 e^{x_i}/Σe^{x_j}로 바로 계산하면 된다 | 유한 정밀도에서 큰 점수의 지수는 오버플로한다. 행 최댓값을 먼저 빼도 결과는 같으며, 최댓값과 정규화 상수는 새 키 블록이 들어올 때마다 온라인으로 갱신할 수 있다.[8][9] |
| FlashAttention이 어텐션을 준이차로 만든다 | 정확한 어텐션이므로 연산량은 여전히 시퀀스 길이에 대해 이차다. 줄이는 것은 메모리다. 표준 구현은 N×N 점수와 확률 행렬을 HBM에 쓰지만, 타일 알고리즘은 이를 피하고 추가 메모리는 N에 선형이다.[8] |
| 마스크는 소프트맥스 뒤에 적용할 수 있다 | 트랜스포머 논문은 허용되지 않는 위치를 소프트맥스 입력에서 −∞로 설정하므로 그 위치가 0 가중치를 받고, 남은 가중치의 합은 1이 된다.[3] |
| MQA와 GQA는 학습을 빠르게 한다 | 목표는 점진적 디코딩이다. 매 단계 키와 값을 다시 읽는 과정에서 메모리 대역폭이 병목이 된다. GQA 논문은 병렬 계산되는 인코더 셀프 어텐션은 바꾸지 않는다.[10][12] |
| KV 캐시는 사소한 비용이다 | OPT-13B에서 토큰 하나의 캐시는 800 KB이고, 2048 토큰 요청은 최대 1.6 GB가 필요하다. vLLM 논문은 기존 시스템이 단편화와 과잉 예약으로 이 메모리의 많은 부분을 낭비한다고 밝혔다.[14] |
| 크기 W의 슬라이딩 창은 W개 토큰 밖의 정보를 쓸 수 없게 한다 | 층을 쌓으면 정보가 전파된다. k개 층 뒤 한 위치는 약 W×k 떨어진 토큰의 영향을 받을 수 있다. 그래서 Mistral 7B 저자들은 4096 토큰 창보다 훨씬 긴 이론적 범위를 설명한다.[13] |
| 최근 토큰만 캐시하면 메모리를 안전하게 제한할 수 있다 | Xiao 등은 창만 쓰는 캐시가 텍스트가 캐시 크기를 넘으면 실패함을 발견했다. 모델이 초기 토큰에 큰 어텐션 질량을 주기 때문이며, 이 토큰들을 유지하면 성능이 회복된다.[19] |
| 어텐션 가중치는 어떤 입력이 출력을 일으켰는지 보여 준다 | Jain과 Wallace는 자신들이 연구한 모델에서 어텐션 가중치가 경사 기반 중요도와 약하게 관련된다고 보았다. Wiegreffe와 Pinter는 답이 정의와 검증 방식에 달려 있다고 논증했다. 위의 해석 절을 보라.[37][38] |
| 회전 임베딩은 어떤 캐시 압축 방식에도 붙일 수 있다 | DeepSeek-V2 저자들은 RoPE가 저랭크 키 압축과 맞지 않음을 발견했다. 위치 의존 회전 때문에 키의 상향 투영을 질의 투영에 흡수할 수 없어, 별도의 분리 키를 두어 RoPE를 실었다.[11] |
12. 실무 점검 항목
구현하거나 평가할 때 다음 점검이 흔한 오류를 막는다.
- 패딩 마스크와 인과 마스크를 소프트맥스 이전에 적용하고, 마스크된 확률이 0인지 확인한다.
- 질의 길이, 키 길이, 헤드, 배치 차원의 의도된 축을 확인한다.
- 정규화와 누적에 수치적으로 안정적인 소프트맥스와 충분한 정밀도를 쓴다.
- 학습 시의 병렬성과 자기회귀 디코딩의 지연 시간을 구분한다.
- 점근적 비용과 목표 하드웨어에서 측정한 실제 벽시계 시간을 함께 보고한다.
- 어텐션 시각화는 독립된 설명이 아니라 추가 검증이 필요한 가설로 다룬다.
- 가능하면 변형들을 같은 매개변수 수, 학습 예산, 시퀀스 길이, 평가 설정에서 비교한다.[1]
각주·출처 40개
- ↩1 ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13 ↩14 ↩15 ↩16 ↩17 ↩18 ↩19 ↩20 ↩21 ↩22 ↩23 ↩24 ↩25 ↩26 ↩27 ↩28 ↩29 ↩30 ↩31 ↩32 ↩33 ↩34 ↩35 ↩36 ↩37 ↩38 ↩39 ↩40 ↩41 ↩42 ↩43 ↩44 ↩45 ↩46 ↩47 ↩48 ↩49 ↩50 ↩51 ↩52 ↩53 ↩54 ↩55 ↩56 ↩57 ↩58 ↩59 ↩60 ↩61 ↩62 ↩63 ↩64 ↩65 ↩66 ↩67 ↩68 ↩69 ↩70 ↩71 ↩72 ↩73 ↩74 ↩75 ↩76 ↩77 ↩78 ↩79 ↩80 ↩81 AI Wiki: Attention (2026-09-05 수정본) · CC BY 4.0 · 확인 2026-10-11
- ↩1 ↩2 ↩3 ↩4 ↩5 Neural Machine Translation by Jointly Learning to Align and Translate · 확인 2026-10-11
- ↩1 ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13 ↩14 ↩15 ↩16 ↩17 ↩18 ↩19 ↩20 ↩21 Attention Is All You Need · 확인 2026-10-11
- ↩1 Sequence to Sequence Learning with Neural Networks · 확인 2026-10-11
- ↩1 ↩2 Effective Approaches to Attention-based Neural Machine Translation · 확인 2026-10-11
- ↩1 ↩2 ↩3 Show, Attend and Tell: Neural Image Caption Generation with Visual Attention · 확인 2026-10-11
- ↩1 ↩2 ↩3 Attention-Based Models for Speech Recognition · 확인 2026-10-11
- ↩1 ↩2 ↩3 ↩4 ↩5 ↩6 FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness · 확인 2026-10-11
- ↩1 ↩2 Online normalizer calculation for softmax · 확인 2026-10-11
- ↩1 ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 Fast Transformer Decoding: One Write-Head is All You Need · 확인 2026-10-11
- ↩1 ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model · 확인 2026-10-11
- ↩1 ↩2 ↩3 ↩4 ↩5 ↩6 GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints · 확인 2026-10-11
- ↩1 ↩2 ↩3 ↩4 Mistral 7B · 확인 2026-10-11
- ↩1 ↩2 ↩3 ↩4 ↩5 Efficient Memory Management for Large Language Model Serving with PagedAttention · 확인 2026-10-11
- ↩1 RoFormer: Enhanced Transformer with Rotary Position Embedding · 확인 2026-10-11
- ↩1 ↩2 Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation · 확인 2026-10-11
- ↩1 ↩2 Flash-Decoding for long-context inference · 확인 2026-10-11
- ↩1 H2O: Heavy-Hitter Oracle for Efficient Generative Inference of Large Language Models · 확인 2026-10-11
- ↩1 ↩2 ↩3 Efficient Streaming Language Models with Attention Sinks · 확인 2026-10-11
- ↩1 FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning · 확인 2026-10-11
- ↩1 FlashAttention-3: Fast and Accurate Attention with Asynchrony and Low-precision · 확인 2026-10-11
- ↩1 Ring Attention with Blockwise Transformers for Near-Infinite Context · 확인 2026-10-11
- ↩1 ↩2 Longformer: The Long-Document Transformer · 확인 2026-10-11
- ↩1 ↩2 Big Bird: Transformers for Longer Sequences · 확인 2026-10-11
- ↩1 Native Sparse Attention: Hardware-Aligned and Natively Trainable Sparse Attention · 확인 2026-10-11
- ↩1 DeepSeek-V3.2: Pushing the Frontier of Open Large Language Models · 확인 2026-10-11
- ↩1 MoBA: Mixture of Block Attention for Long-Context LLMs · 확인 2026-10-11
- ↩1 ↩2 Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention · 확인 2026-10-11
- ↩1 ↩2 Rethinking Attention with Performers · 확인 2026-10-11
- ↩1 Leave No Context Behind: Efficient Infinite Context Transformers with Infini-attention · 확인 2026-10-11
- ↩1 ↩2 High-Resolution Image Synthesis With Latent Diffusion Models · 확인 2026-10-11
- ↩1 ↩2 Graph Attention Networks · 확인 2026-10-11
- ↩1 ↩2 Non-Local Neural Networks · 확인 2026-10-11
- ↩1 ↩2 Set Transformer: A Framework for Attention-based Permutation-Invariant Neural Networks · 확인 2026-10-11
- ↩1 An Image Is Worth 16x16 Words: Transformers for Image Recognition at Scale · 확인 2026-10-11
- ↩1 Highly accurate protein structure prediction with AlphaFold · 확인 2026-10-11
- ↩1 ↩2 Attention is not Explanation · 확인 2026-10-11
- ↩1 ↩2 Attention is not not Explanation · 확인 2026-10-11
- ↩1 Is Attention Interpretable? · 확인 2026-10-11
- ↩1 Quantifying Attention Flow in Transformers · 확인 2026-10-11