본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
어텐션 예시

어텐션 메커니즘(Attention mechanism)은 인공신경망에서 입력 시퀀스의 각 요소가 출력에 기여하는 중요도를 동적으로 계산하여 반영하는 기법이다. 원래는 신경망 기계번역(NMT)에서 제안되었으며, 이후 다양한 자연어 처리와 컴퓨터 비전 분야에서 널리 활용되고 있다.

전통적인 시퀀스-투-시퀀스(seq2seq) 구조에서는 인코더가 입력 시퀀스 전체를 고정된 길이의 벡터로 요약하고, 디코더가 그 벡터를 바탕으로 출력을 생성하였다. 그러나 긴 문장의 경우 정보 손실이 발생하여 성능이 제한적이었다. 어텐션 메커니즘은 출력의 각 단계마다 입력 시퀀스 전체를 다시 참조하여, 관련성이 높은 부분에 더 높은 가중치를 주고 낮은 부분에는 낮은 가중치를 주는 방식으로 문제를 해결한다.[1]

어텐션은 일반적으로 쿼리(Query), 키(Key), 값(Value)의 세 가지 요소를 사용한다.

  • 쿼리(Query): 현재 디코더 상태와 같은 "집중해야 할 대상"
  • 키(Key): 입력 시퀀스 각 요소의 표현
  • 값(Value): 실제 참조할 입력의 정보

쿼리와 키를 비교하여 유사도를 계산한 후, 이를 확률적 가중치로 변환한다. 그 가중치를 값 벡터와 결합하여 최종적으로 어텐션 출력을 생성한다.

인코더-디코더 어텐션

  • 출력(타겟) 시퀀스의 각 단어를 생성할 때, 입력(소스) 시퀀스의 모든 단어와의 관계를 계산한다. 기계 번역 모델에서 주로 사용된다.

셀프 어텐션(Self-Attention)

  • 쿼리, 키, 값이 모두 동일한 입력 시퀀스에서 생성된다. 시퀀스 내부의 토큰 간 관계를 학습할 수 있어 트랜스포머 아키텍처의 핵심 구성 요소가 되었다.

멀티헤드 어텐션(Multi-Head Attention)

  • 셀프 어텐션을 병렬로 여러 번 수행하여 다양한 표현 공간에서 관계를 학습한다. 최종적으로 여러 헤드의 출력을 결합해 더 풍부한 표현을 얻는다.

어텐션 메커니즘은 처음에는 기계 번역에서 제안되었으나, 이후 다양한 분야에서 사용되고 있다.

  • 기계 번역, 텍스트 요약, 질의응답 등 자연어 처리 전반
  • 이미지 분류, 객체 탐지, 이미지 캡셔닝 등 컴퓨터 비전
  • 음성 인식 및 합성

계산 비용 및 효율화 기법

편집 원본 편집

어텐션 메커니즘은 입력 시퀀스 길이를 n, 은닉 차원을 d라고 할 때, Q와 K의 내적 연산에서 n×n 크기의 어텐션 행렬을 계산해야 한다. 이 때문에 계산량은 n의 제곱에 비례하며, 긴 시퀀스를 처리할 때 연산 비용과 메모리 사용량이 크게 증가한다. 특히 셀프 어텐션(Self-Attention)은 쿼리와 키가 동일한 시퀀스에서 생성되므로 이러한 비용 문제가 두드러진다.

이 한계를 완화하기 위해 다양한 효율화 기법들이 제안되었다.

  • 로컬 어텐션(Local Attention): 전체 시퀀스가 아니라 일정 범위(윈도우) 안의 토큰들만 참조하여 계산량을 줄인다. (예: Transformer-XL, Longformer)
  • 희소 어텐션(Sparse Attention): 어텐션 행렬의 연결 구조를 처음부터 제한해 일부 중요한 연결만 유지한다. 이 방식은 모든 토큰 쌍을 계산하지 않기 때문에 연산량 자체를 줄일 수 있다. (예: BigBird)
  • 저랭크 근사(Low-rank Approximation): 큰 어텐션 행렬을 저차원으로 근사하여 효율적으로 계산한다. (예: Linformer)
  • 커널 기반 어텐션(Kernelized Attention): softmax 어텐션을 커널 함수로 근사해 계산 복잡도를 n에 비례하거나 n log n 수준으로 줄인다. (예: Performer)
  • 토큰 프루닝(Token Pruning): 중요도가 낮은 토큰을 완전히 제거하거나 무시해 시퀀스 길이를 줄인다. 정보 손실이 발생할 수 있으나 효율성은 높아진다.
  • 토큰 머징(Token Merging): 중요도가 낮은 토큰을 단순히 제거하지 않고, 인접하거나 유사한 토큰들을 합쳐 새로운 토큰으로 만든다. 이 방식은 시퀀스 길이를 줄이면서도 정보를 압축해 보존한다. (예: 최근 비전 트랜스포머에서의 패치 병합 기법)

이러한 기법들은 기존 어텐션의 제곱형 복잡도를 완화하여, 긴 문서 처리나 대규모 모델 학습에 널리 활용되고 있다.

  • 2014년: Bahdanau 등이 신경망 기계 번역에서 처음 제안
  • 2015년: Luong 등이 확장된 어텐션 방식을 제시
  • 2017년: Vaswani 등이 트랜스포머 논문에서 셀프 어텐션과 멀티헤드 어텐션을 도입
  • 이후 LLM(대규모 언어 모델)과 비전 트랜스포머 등 최신 모델의 핵심 기술로 발전

seq2seq와 컨텍스트 벡터

편집 원본 편집

시퀀스투시퀀스(sequence-to-sequence, seq2seq)는 입력 시퀀스를 받아 다른 시퀀스를 출력하는 인코더-디코더 구조이다. 기계 번역처럼 입력과 출력의 길이가 다른 문제에 쓴다.

  • 인코더는 RNN이나 LSTM으로 입력 단어를 차례로 읽고, 마지막 은닉 상태에 입력 전체의 정보를 압축한다. 이 고정 길이 벡터를 컨텍스트 벡터(context vector)라 한다.
  • 디코더는 컨텍스트 벡터를 받아(첫 은닉 상태로 삼아) 출력 단어를 하나씩 생성해 출력 시퀀스를 만든다.
  • 입력이 길어도 컨텍스트 벡터의 크기는 고정되어 있어 앞부분 정보가 손실되는 병목이 생긴다. 어텐션은 디코더가 단어를 만들 때마다 인코더의 모든 은닉 상태에 가중치를 주어 합한 컨텍스트 벡터를 매 단계 새로 만들어 이 문제를 줄인다.
용어 뜻
컨텍스트 벡터 seq2seq 에서 인코더가 입력 시퀀스를 요약해 디코더에 넘기는 벡터
고유벡터 선형대수에서 행렬 A 에 대해 Av = λv 를 만족해 방향이 바뀌지 않는 벡터. 주성분 분석 등에 쓴다
기저벡터 벡터 공간의 모든 벡터를 일차결합으로 나타낼 수 있게 하는 일차독립인 벡터들
영벡터(공벡터) 모든 성분이 0 인 벡터
  • 고유벡터·기저벡터·영벡터는 선형대수 용어이고, 인코더가 만들어 디코더가 받는 벡터는 컨텍스트 벡터이다.
  • Bahdanau, D., Cho, K., Bengio, Y. (2014). Neural Machine Translation by Jointly Learning to Align and Translate. ICLR.
  • Luong, M., Pham, H., Manning, C. D. (2015). Effective Approaches to Attention-based Neural Machine Translation. EMNLP.
  • Vaswani, A. et al. (2017). Attention Is All You Need. NIPS.
  1. ↑ Bahdanau, D., Cho, K., Bengio, Y., "Neural Machine Translation by Jointly Learning to Align and Translate", 2014