본문으로 건너뛰기

© 2026 Molayo

Lilian헤드라인2026. 05. 15. 12:33

Attention? Attention!

요약

Attention 메커니즘은 인간의 시각적 주의 집중 방식에서 영감을 받아 딥러닝에 도입되었으며, 이는 이미지나 문장 내 요소 간의 중요도 가중치를 계산하는 방식으로 작동합니다. 기존 Seq2Seq 모델이 전체 입력을 고정 길이 컨텍스트 벡터로 압축하면서 발생하는 장기 의존성(긴 문장을 기억하지 못하는 문제)을 해결하기 위해 등장했습니다. Attention은 인코더와 디코더가 소스 입력의 모든 부분에 직접 접근할 수 있도록 '지름길' 연결을 만들어, 번역과 같은 작업에서 정보 손실 없이 효율적인 컨텍스트를 제공합니다.

핵심 포인트

  • Attention 메커니즘은 시각적 주의 집중 원리(low/high resolution)와 유사하게 작동하며, 요소 간의 중요도 가중치 벡터로 해석될 수 있습니다.
  • 기존 Seq2Seq 모델은 입력 전체를 고정 길이 컨텍스트 벡터로 압축하여 긴 문장의 정보를 잃는 한계가 있었습니다.
  • Attention 메커니즘은 이 문제를 해결하기 위해 인코더와 디코더 사이에 '지름길' 연결을 만들어 소스 입력의 모든 부분에 접근할 수 있게 합니다.
  • 이 과정에서 컨텍스트 벡터는 인코더 은닉 상태, 디코더 은닉 상태, 그리고 소스와 타겟 간의 정렬 정보를 활용합니다.

[2018-10-28 업데이트: Pointer Network 추가 및 Transformer 구현 링크 추가.]

[2018-11-06 업데이트: Transformer 모델 구현 링크 추가.]

[2018-11-18 업데이트: Neural Turing Machines 추가.]

[2019-07-18 업데이트: show-attention-tell 논문을 소개할 때 “self-attention”이라는 용어를 사용한 오류를 수정하였으며, 이를 Self-Attention 섹션으로 이동했습니다.]

[2020-04-07 업데이트: 개선된 Transformer 모델에 대한 후속 포스트는 여기에 있습니다.]

Attention (주의 집중)은 어느 정도, 우리가 이미지의 서로 다른 영역에 시각적 주의를 기울이거나 한 문장 내의 단어들을 연관시키는 방식에 의해 동기 부여되었습니다. 그림 1의 Shiba Inu 사진을 예로 들어보겠습니다.

인간의 시각적 주의 (visual attention)는 우리가 주변 이미지를 “저해상도 (low resolution)”로 인지하는 동시에 (예: 눈 내리는 배경과 의상은 어떤가요?), 특정 영역을 “고해상도 (high resolution)”로 집중할 수 있게 해줍니다 (예: 노란색 상자 안의 뾰족한 귀를 보는 것). 그리고 그에 따라 초점을 조정하거나 추론 (inference)을 수행합니다. 이미지의 작은 패치 (patch)가 주어졌을 때, 나머지 부분의 픽셀들은 그곳에 무엇이 표시되어야 하는지에 대한 단서를 제공합니다. 우리는 개의 코, 오른쪽의 또 다른 뾰족한 귀, 그리고 Shiba의 신비로운 눈(빨간색 상자 안의 것들)을 보았기 때문에 노란색 상자 안에 뾰족한 귀가 있을 것이라고 기대합니다. 하지만 하단의 스웨터와 담요는 이러한 강아지의 특징들만큼 도움이 되지 않을 것입니다.

이와 유사하게, 우리는 한 문장 내의 단어들이나 가까운 문맥 (context) 사이의 관계를 설명할 수 있습니다. 우리가 “eating (먹는 중)”이라는 단어를 볼 때, 우리는 곧 음식 관련 단어를 마주할 것이라고 기대합니다. 색상 용어는 음식을 설명하지만, 아마도 “eating”과 직접적으로는 별로 관련이 없을 것입니다.

요약하자면, 딥러닝 (Deep Learning)에서의 어텐션 (Attention)은 중요도 가중치 (importance weights)의 벡터로 광범위하게 해석될 수 있습니다. 이미지의 픽셀이나 문장의 단어와 같은 하나의 요소를 예측하거나 추론하기 위해, 우리는 어텐션 벡터를 사용하여 해당 요소가 다른 요소들과 얼마나 강하게 상관되어 있는지(또는 많은 논문에서 읽으셨겠지만, 다른 요소에 대해 "어텐드(attends to)" 하는지)를 추정하며, 어텐션 벡터에 의해 가중치가 부여된 값들의 합을 대상의 근사치로 취합니다.

Seq2Seq 모델의 문제점은 무엇인가?

seq2seq 모델은 언어 모델링 (Language Modeling) 분야에서 탄생했습니다 (Sutskever, et al. 2014). 광범위하게 말하면, 이 모델은 입력 시퀀스 (source)를 새로운 시퀀스 (target)로 변환하는 것을 목표로 하며, 두 시퀀스 모두 임의의 길이를 가질 수 있습니다. 변환 작업의 예로는 텍스트 또는 오디오 형태의 다국어 간 기계 번역 (Machine Translation), 질의응답 (Question-Answer) 대화 생성, 또는 문장을 문법 트리 (Grammar Trees)로 파싱 (Parsing)하는 것 등이 있습니다.

seq2seq 모델은 통상적으로 다음과 같이 구성된 인코더-디코더 (Encoder-Decoder) 구조를 가집니다:

  • **인코더 (Encoder)**는 입력 시퀀스를 처리하고 정보를 *고정된 길이 (fixed length)*의 컨텍스트 벡터 (Context Vector, 문장 임베딩 (Sentence Embedding) 또는 "thought" 벡터로도 알려짐)로 압축합니다. 이 표현은 전체 소스 시퀀스의 의미를 잘 요약한 것이어야 합니다.
  • **디코더 (Decoder)**는 컨텍스트 벡터로 초기화되어 변환된 출력을 생성합니다. 초기 연구에서는 인코더 네트워크의 마지막 상태 (Last State)만을 디코더의 초기 상태로 사용했습니다.

인코더와 디코더는 모두 순환 신경망 (Recurrent Neural Networks, RNN), 즉 LSTM 또는 GRU 유닛을 사용합니다.

이러한 고정 길이 컨텍스트 벡터 설계의 결정적이고 명백한 단점은 긴 문장을 기억하지 못한다는 것입니다. 전체 입력을 처리 완료하면 종종 앞부분을 잊어버리곤 합니다. 어텐션 메커니즘 (Attention Mechanism)은 이 문제를 해결하기 위해 탄생했습니다 (Bahdanau et al., 2015).

번역을 위해 태어나다

Attention mechanism은 신경망 기계 번역 (NMT)에서 긴 소스 문장 (source sentences)을 기억하는 것을 돕기 위해 탄생했습니다. 인코더 (encoder)의 마지막 은닉 상태 (hidden state)로부터 단일 문맥 벡터 (context vector)를 구축하는 대신, Attention이 발명한 비법은 문맥 벡터와 전체 소스 입력 (source input) 사이에 지름길 (shortcuts)을 만드는 것입니다. 이러한 지름길 연결의 가중치 (weights)는 각 출력 요소 (output element)에 맞게 맞춤 설정할 수 있습니다.

문맥 벡터가 전체 입력 시퀀스 (input sequence)에 접근할 수 있는 동안, 우리는 망각에 대해 걱정할 필요가 없습니다. 소스 (source)와 타겟 (target) 사이의 정렬 (alignment)은 문맥 벡터에 의해 학습되고 제어됩니다. 본질적으로 문맥 벡터는 세 가지 정보를 소비합니다:

  • 인코더 은닉 상태 (encoder hidden states);
  • 디코더 은닉 상태 (decoder hidden states);
  • 소스와 타겟 사이의 정렬 (alignment between source and target).

정의 (Definition)

이제 NMT에서 도입된 Attention mechanism을 과학적인 방식으로 정의해 보겠습니다. 길이가 $n$인 소스 시퀀스 $\mathbf{x}$가 있고, 길이가 $m$인 타겟 시퀀스 $\mathbf{y}$를 출력하려고 한다고 가정합니다:

(굵은 글씨로 표시된 변수는 벡터임을 나타냅니다. 이 포스트의 다른 모든 요소도 마찬가지입니다.)

인코더는 순방향 은닉 상태 $\overrightarrow{\boldsymbol{h}}_i$와 역방향 은닉 상태 $\overleftarrow{\boldsymbol{h}}_i$를 가진 양방향 RNN (bidirectional RNN, 또는 선택한 다른 순환 신경망 설정)입니다. 이 두 상태를 단순히 결합 (concatenation)한 것이 인코더 상태를 나타냅니다. 그 동기는 한 단어의 주석 (annotation)에 앞뒤 단어를 모두 포함하는 것입니다.

디코더 네트워크는 위치 $t$ ($t=1,\dots,m$)에서의 출력 단어에 대해 은닉 상태 $\boldsymbol{s}t=f(\boldsymbol{s}{t-1}, y_{t-1}, \mathbf{c}_t)$를 가집니다. 여기서 문맥 벡터 $\mathbf{c}_t$는 정렬 점수 (alignment scores)에 의해 가중치가 부여된 입력 시퀀스의 은닉 상태들의 합입니다:

정렬 모델 (alignment model)은 입력 위치 $i$의 입력과 출력 위치 $t$의 출력 쌍 $(y_t, x_i)$이 얼마나 잘 일치하는지에 따라 점수 $\alpha_{t,i}$를 할당합니다. ${\alpha_{t, i}}$ 집합은 각 출력에 대해 각 소스 은닉 상태 (source hidden state)를 얼마나 고려해야 하는지를 정의하는 가중치입니다. Bahdanau의 논문에서, 정렬 점수 $\alpha$는 단일 은닉층을 가진 **피드포워드 네트워크 (feed-forward network)**에 의해 매개변수화되며, 이 네트워크는 모델의 다른 부분들과 함께 공동으로 학습됩니다. 따라서 $\tanh$가 비선형 활성화 함수 (non-linear activation function)로 사용된다는 가정하에, 점수 함수는 다음과 같은 형태를 가집니다:

$$\alpha_{t,i} = a(y_{t-1}, s_t, h_i) = \mathbf{v}_a^\top \tanh(\mathbf{W}a [y{t-1}; s_t; h_i])$$

여기서 $\mathbf{v}_a$와 $\mathbf{W}_a$는 모두 정렬 모델에서 학습되어야 하는 가중치 행렬 (weight matrices)입니다.

정렬 점수 행렬은 소스 단어와 타겟 단어 사이의 상관관계를 명시적으로 보여주는 훌륭한 부산물입니다.

더 자세한 구현 지침은 Tensorflow 팀의 이 멋진 튜토리얼을 확인해 보세요.

어텐션 메커니즘의 가족 (A Family of Attention Mechanisms)

어텐션의 도움으로 소스 시퀀스와 타겟 시퀀스 사이의 의존성 (dependencies)은 더 이상 중간 거리 (in-between distance)에 의해 제한되지 않습니다! 기계 번역 (machine translation)에서 어텐션이 가져온 큰 개선에 힘입어, 이는 곧 컴퓨터 비전 (computer vision) 분야로 확장되었으며 (Xu et al. 2015), 사람들은 다양한 다른 형태의 어텐션 메커니즘 (attention mechanisms)을 탐구하기 시작했습니다 (Luong, et al., 2015; Britz et al., 2017; Vaswani, et al., 2017).

요약 (Summary)

아래는 몇 가지 대중적인 어텐션 메커니즘과 그에 상응하는 정렬 점수 함수를 정리한 요약 표입니다:

이름정렬 점수 함수 (Alignment score function)인용 (Citation)
Content-based attention$\text{score}(\boldsymbol{s}_t, \boldsymbol{h}_i) = \text{cosine}[\boldsymbol{s}_t, \boldsymbol{h}_i]$Graves2014
...Luong2015
General$\text{score}(\boldsymbol{s}_t, \boldsymbol{h}_i) = \boldsymbol{s}_t^\top\mathbf{W}_a\boldsymbol{h}_i$ (여기서 $\mathbf{W}_a$는 어텐션 레이어의 학습 가능한 가중치 행렬입니다.)Luong2015
Dot-Product$\text{score}(\boldsymbol{s}_t, \boldsymbol{h}_i) = \boldsymbol{s}_t^\top\boldsymbol{h}_i$Luong2015
Scaled Dot-Product(*)$\text{score}(\boldsymbol{s}_t, \boldsymbol{h}_i) = \frac{\boldsymbol{s}_t^\top\boldsymbol{h}_i}{\sqrt{n}}$ 참고: 스케일링 인자(scaling factor)를 제외하면 dot-product attention과 매우 유사합니다. 여기서 $n$은 소스 은닉 상태(source hidden state)의 차원입니다.Vaswani2017

(*) Luong et al., 2015에서는 “concat”으로, Vaswani et al., 2017에서는 “additive attention”으로 언급되었습니다.

(*) 입력값이 클 때 softmax 함수가 매우 작은 그래디언트(gradient)를 가질 수 있어 효율적인 학습이 어려워질 수 있다는 우려에 따라, 스케일링 인자 $1/\sqrt{n}$을 추가한 것입니다.

다음은 어텐션 메커니즘의 더 넓은 범주에 대한 요약입니다:

이름정의인용 (Citation)
Self-Attention(**)동일한 입력 시퀀스의 서로 다른 위치를 연관시킵니다. 이론적으로 self-attention은 위의 모든 점수 함수를 채택할 수 있지만, 타겟 시퀀스를 동일한 입력 시퀀스로 교체하기만 하면 됩니다.Cheng2016
...

(**) 또한, Cheng et al., 2016 및 일부 다른 논문에서는 “intra-attention”으로 언급되었습니다.

Self-Attention

Self-attentionintra-attention으로도 알려져 있으며, 동일한 시퀀스의 표현(representation)을 계산하기 위해 단일 시퀀스의 서로 다른 위치를 연관시키는 어텐션 메커니즘입니다. 이는 기계 독해(machine reading), 요약(abstractive summarization), 또는 이미지 설명 생성(image description generation)에서 매우 유용함이 입증되었습니다.

Long Short-Term Memory (LSTM) 네트워크 논문에서는 기계 독해 (machine reading)를 수행하기 위해 self-attention을 사용했습니다. 아래의 예시에서, self-attention 메커니즘은 현재 단어와 문장의 이전 부분 사이의 상관관계 (correlation)를 학습할 수 있게 해줍니다.

Soft vs Hard Attention

'Show, Attend and Tell' 논문에서는 캡션 생성 (caption generation)을 위해 이미지에 attention 메커니즘을 적용합니다. 이미지는 먼저 CNN에 의해 특징 (features)을 추출하기 위해 인코딩 (encoded)됩니다. 그 다음 LSTM 디코더 (decoder)가 합성곱 특징 (convolution features)을 소비하여 설명하는 단어들을 하나씩 생성하며, 이때 가중치 (weights)는 attention을 통해 학습됩니다. attention 가중치의 시각화는 모델이 특정 단어를 출력하기 위해 이미지의 어느 영역에 집중하고 있는지를 명확하게 보여줍니다.

이 논문은 attention이 이미지 전체에 접근할 수 있는지 아니면 특정 패치 (patch)에만 접근할 수 있는지에 따라 “soft” attention과 “hard” attention의 구분을 처음으로 제안했습니다.

Soft Attention: 정렬 가중치 (alignment weights)가 학습되어 소스 이미지의 모든 패치 위에 “부드럽게 (softly)” 배치됩니다. 본질적으로 Bahdanau et al., 2015에서 사용된 것과 동일한 유형의 attention입니다. 장점 (Pro): 모델이 매끄럽고 미분 가능 (differentiable)합니다. 단점 (Con): 소스 입력이 클 경우 비용이 많이 듭니다.

Hard Attention: 한 번에 이미지의 단 하나의 패치만을 선택하여 집중합니다. 장점 (Pro): 추론 (inference) 시 계산량이 적습니다. 단점 (Con): 모델이 미분 불가능 (non-differentiable)하며, 학습을 위해 분산 감소 (variance reduction) 또는 강화학습 (reinforcement learning)과 같은 더 복잡한 기술이 필요합니다. (Luong, et al., 2015)

Global vs Local Attention

Luong, et al., 2015는 “global” attention과 “local” attention을 제안했습니다. global attention은 soft attention과 유사하며, local attention은 hard와 soft의 흥미로운 혼합형으로, hard attention을 개선하여 미분 가능하게 만든 것입니다. 모델은 먼저 현재 타겟 단어에 대해 정렬된 단일 위치를 예측하고, 그 후 소스 위치를 중심으로 한 윈도우 (window)를 사용하여 컨텍스트 벡터 (context vector)를 계산합니다.

Neural Turing Machines

1936년 Alan Turing은 최소한의 계산 모델을 제안했습니다. 이는 무한히 긴 테이프 (tape)와 테이프와 상호작용하는 헤드 (head)로 구성됩니다. 테이프에는 0, 1 또는 공백 (" ")과 같은 기호로 채워진 수많은 셀 (cell)이 있습니다. 연산 헤드는 기호를 읽고, 수정하고, 테이프 위에서 왼쪽/오른쪽으로 이동할 수 있습니다. 이론적으로 Turing machine은 절차가 얼마나 복잡하거나 비용이 많이 들더라도 어떤 컴퓨터 알고리즘이든 시뮬레이션할 수 있습니다. 무한한 메모리는 Turing machine에 수학적으로 무한한 우위를 제공합니다. 그러나 무한한 메모리는 실제 현대 컴퓨터에서는 실현 불가능하며, 따라서 우리는 Turing machine을 계산의 수학적 모델로만 간주합니다.

Neural Turing Machine (NTM, Graves, Wayne & Danihelka, 2014)은 신경망 (neural network)을 외부 메모리 저장소와 결합하기 위한 모델 아키텍처 (model architecture)입니다. 메모리는 Turing machine의 테이프를 모방하며, 신경망은 테이프에서 읽거나 쓰기 위해 연산 헤드를 제어합니다. 하지만 NTM의 메모리는 유한하며, 따라서 아마도 "Neural von Neumann Machine"에 더 가까워 보일 것입니다.

NTM은 두 가지 주요 구성 요소인 컨트롤러 (controller) 신경망과 메모리 (memory) 뱅크를 포함합니다.
컨트롤러 (Controller): 메모리에 대한 연산을 실행하는 역할을 담당합니다. 이는 피드포워드 (feed-forward) 또는 순환 (recurrent) 신경망 등 어떤 유형의 신경망이든 될 수 있습니다.
메모리 (Memory): 처리된 정보를 저장합니다. 이는 $N$개의 벡터 행을 포함하고 각 행이 $M$차원을 갖는 $N imes M$ 크기의 행렬 (matrix)입니다.

한 번의 업데이트 반복 (update iteration)에서, 컨트롤러는 입력을 처리하고 그에 따라 메모리 뱅크와 상호작용하여 출력을 생성합니다. 상호작용은 일련의 병렬 읽기 (read)쓰기 (write) 헤드에 의해 처리됩니다. 읽기 및 쓰기 연산은 모두 모든 메모리 주소에 부드럽게 주의를 기울이는 (softly attending) "흐릿한 (blurry)" 방식입니다.

읽기 및 쓰기 (Reading and Writing)

시간 $t$에 메모리로부터 읽을 때, 크기가 $N$인 어텐션 벡터 (attention vector) $\mathbf{w}_t$가 서로 다른 메모리 위치 (행렬의 행)에 얼마나 많은 주의를 할당할지를 제어합니다. 읽기 벡터 (read vector) $\mathbf{r}_t$는 어텐션 강도에 의해 가중치가 부여된 합입니다:

AI 자동 생성 콘텐츠

본 콘텐츠는 Lilian Weng Blog의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0