개요
Attention은 입력의 모든 정보를 하나의 고정 길이 표현으로 압축하는 대신, 현재 출력을 만들 때 입력의 어느 부분이 더 관련 있는지 가중치를 계산해 정보를 결합하는 메커니즘이다. 신경망 기계번역 연구에서는 디코더가 다음 단어를 예측할 때 원문 문장의 관련 위치를 부드럽게 선택하는 방식이 제안됐다.[1]
Transformer에서의 역할
Transformer는 순환 신경망에 의존하지 않고 self-attention을 중심으로 시퀀스 내부의 관계를 계산한다.[2] 이 구조는 현대 LLM의 핵심 기반 중 하나가 됐다.
주의점
Attention은 하나의 단일 알고리즘 이름이라기보다 점수 계산, 정규화, 여러 head 구성 등 다양한 변형을 포함하는 넓은 개념이다.
계산 예제: 점수에서 가중치와 출력 만들기
Transformer 원 논문 ↗의 scaled dot-product attention은 Q와 K의 내적을 키 차원의 제곱근으로 나누고 softmax를 적용한 뒤 V를 가중해 합친다.[2] Q는 현재 위치가 찾는 정보, K는 비교에 쓰는 표현, V는 실제로 결합할 표현을 설명하는 역할 구분이다. 이 표현들은 학습된 투영으로 만들어지며 원문 문자열이나 검색 데이터베이스의 키와 동일하지 않다.
다음은 실제 모델을 측정한 결과가 아닌 가상 한 행이다. 차원 보정까지 끝난 두 점수를 ln(2)와 0이라고 하면 지수값은 2와 1, softmax 가중치는 2/3와 1/3이다. V가 각각 (3, 0), (0, 6)이면 출력은 (2/3)×(3, 0) + (1/3)×(0, 6) = (2, 2)다. 이 가중치는 해당 행의 후보 표현을 결합하는 비중이며 두 문장이 사실일 확률을 뜻하지 않는다.
마스크를 적용하면 후보와 분모가 바뀐다
가상 점수 ln(2), 0, ln(4)를 가진 세 위치에서 마스크가 없으면 가중치는 2/7, 1/7, 4/7이다. 세 번째가 보아서는 안 되는 미래 위치라면 causal mask로 그 점수를 음의 무한대로 처리해 가중치를 0으로 만들고, 남은 두 가중치를 2/3와 1/3로 다시 정규화한다. 기존 두 값에 미래 위치의 0만 덧붙이는 계산이 아니다.
순차 생성에서는 허용된 이전 문맥을, 양방향 입력 표현에서는 해당 과제의 입력 범위를 확인한다. Padding mask와 causal mask는 목적이 다르며 입력·출력 이동 규칙도 함께 봐야 한다. 학습 때 다음 정답을 입력에서 엿보는 오류는 좋은 점수처럼 보일 수 있으므로 마스크와 정답 정렬을 작은 예제로 점검한다.
Self-attention과 cross-attention을 구별하는 질문
Q·K·V가 같은 시퀀스에서 만들어지면 self-attention이고, 출력 쪽의 Q가 입력 쪽 K·V를 읽는 인코더-디코더 연결은 cross-attention의 사례다. Transformer 원 구조에서 이 둘은 쓰이는 위치가 다르다. 여러 head는 서로 다른 투영을 학습하고 결과를 결합한다. head 하나가 언제나 특정 문법이나 의미 하나를 담당한다고 미리 정해진 것은 아니다.
입력 임베딩과 attention 이후의 문맥 표현도 구분한다. 같은 단어가 서로 다른 문장에서 다른 출력을 만드는 과정과, 문서 벡터를 저장해 검색하는 과정은 같은 작업이 아니다. 구조를 읽을 때는 Q·K·V의 출처, 차원, 허용 위치와 head 결합 방식을 순서대로 확인한다.
높은 가중치가 설명이나 근거를 보장하지는 않는다
Attention is not Explanation 연구 ↗는 여러 NLP 과제에서 attention 가중치와 다른 중요도 측정이 다르거나, 다른 가중치로도 비슷한 예측이 나오는 사례를 조사했다.[3] 이를 모든 모델의 모든 해석을 부정하는 결론으로 넓히지 않되, 색이 진한 heatmap만으로 특정 토큰이 답의 원인이라고 확정하지 않는다.