모두의연구소가 만든 ‘💪실무에 진짜 강한 개발자’ 부트캠프
#인공지능 

어텐션 (Attention)

어텐션 (attention)은 딥러닝 커뮤니티에서 가장 두드러진 아이디어 중 하나입니다. 이미지 캡션 생성과 같은 다양한 문제에 사용되고 있습니다. 하지만 원래는 Seq2Seq 모델을 사용한 신경망 기계 번역의 맥락에서 설계되었습니다.

2024-07-11 | 김성진

출처: Attn: Illustrated Attention. Attention illustrated in GIFs and how…

어텐션 (attention) – 배경

어텐션 (attention)은 딥러닝 커뮤니티에서 가장 두드러진 아이디어 중 하나입니다. 이제는 이 메커니즘이 이미지 캡션 생성과 같은 다양한 문제에 사용되고 있습니다. 하지만 원래는 Seq2Seq 모델을 사용한 신경망 기계 번역의 맥락에서 설계되었습니다.

Seq2Seq 모델

Seq2Seq 모델은 일반적으로 인코더-디코더 아키텍처로 구성되며, 인코더는 입력 시퀀스를 처리하고 정보를 고정 길이의 컨텍스트 벡터 (또는 “생각 벡터”)로 인코딩/압축합니다. 이 표현은 전체 입력 시퀀스의 좋은 요약본이 될 것으로 예상됩니다. 그런 다음 디코더는 이 컨텍스트 벡터로 초기화되며, 이를 사용하여 변환되거나 번역된 출력을 생성하기 시작합니다.

Seq2Seq 모델의 단점

고정 길이 컨텍스트 벡터 디자인의 중요한 단점은 시스템이 더 긴 시퀀스를 유지할 수 없다는 것입니다. 종종 전체 시퀀스를 처리한 후 입력 시퀀스의 초기 요소들을 잊어버리게 됩니다. 어텐션 메커니즘은 이러한 긴 종속성 문제를 해결하기 위해 만들어졌습니다.

출처: Encoder-Decoder Recurrent Neural Network Models for Neural Machine Translation

BLEU (Bilingual Evaluation Understudy) 는 텍스트의 후보 번역을 하나 이상의 참조 번역과 비교하는 점수입니다. 위 그래프는 인코더-디코더 유닛이 긴 문장을 기억하지 못한다는 것을 보여줍니다. 따라서 위 그래프에서 반영된 것은 인코더-디코더 유닛이 짧은 문장에 대해서는 잘 작동한다는 것입니다(높은 BLEU 점수).

어텐션 – 기본 아이디어

어텐션 메커니즘 (Attention)은 Dzmitry Bahdanau 외 다수가 2014년에 발표한 논문 “Neural Machine Translation by Jointly Learning to Align and Translate”에서 처음 소개되었습니다.

위 논문은 이전 인코더-디코더 모델에 대한 자연스러운 확장으로 읽힙니다. 이는 Vaswani 외 다수의 유명한 논문 “Attention is All You Need” 의 기초를 다졌습니다. 단어를 순차적으로 처리하는 대신 병렬 처리를 통해 딥러닝 분야에 혁신을 가져온 트랜스포머 (Transformer) 개념을 제시했습니다.

다시 돌아가서, 핵심 아이디어는 모델이 출력 단어를 예측할 때 전체 시퀀스 대신 가장 관련된 정보가 집중된 입력 부분만을 사용하는 것입니다. 더 간단히 말해, 모델은 일부 입력 단어에만 주의 (attention)를 기울입니다.

출처: Illustrated Guide to Transformers- Step by Step Explanation

어텐션 메커니즘은 인코더와 디코더를 연결하는 인터페이스로, 디코더에 모든 인코더의 은닉 상태로부터 정보를 제공합니다. 이 프레임워크를 통해 모델은 입력 시퀀스의 가치 있는 부분에 선택적으로 집중할 수 있으며, 따라서 이들 간의 연관성을 학습할 수 있습니다. 이를 통해 모델은 긴 입력 문장을 효율적으로 처리할 수 있게 됩니다.

출처: Illustrated Guide to Transformers- Step by Step Explanation

1409.0473 – Neural Machine Translation by Jointly Learning to Align and Translate 일명 ‘Bahdanau Attention‘ 논문 저자의 말을 인용해보겠습니다.

“직관적으로 이것은 디코더에서 어텐션 메커니즘을 구현하는 것입니다. 디코더는 소스 문장의 어느 부분에 주의 (attention)를 기울일지 결정합니다. 디코더가 어텐션 메커니즘을 갖게 함으로써, 인코더가 소스 문장의 모든 정보를 고정 길이 벡터에 인코딩해야 하는 부담을 덜어줍니다. 이 새로운 접근 방식으로 정보는 주석 (annotation) 시퀀스 전체에 분산될 수 있으며, 디코더가 이를 선택적으로 검색할 수 있습니다.”

어텐션 – 아키텍처

아래 그림은 어텐션 레이어를 포함한 인코더-디코더 아키텍처를 보여줍니다.

출처: Attn: Illustrated Attention. Attention illustrated in GIFs and how…

아이디어는 디코더를 그대로 유지하고 인코더에서 순차적인 RNN/LSTM을 양방향 RNN/LSTM으로 교체하는 것입니다.

여기서, 창 크기 $T_x$ (예: 네 단어 $x_{1}, x_{2}, x_{3}, x_{4}$) 를 고려하여 일부 단어에 주의를 기울입니다. 이 네 단어를 사용하여 디코더에 입력으로 제공되는 컨텍스트 벡터 $c_1$을 생성합니다. 유사하게, 이 네 단어를 사용하여 컨텍스트 벡터 $c_2$를 생성합니다. 또한, $α_1, α_2, α_3$ 을 가중치로 사용하며, 하나의 창 내 모든 가중치의 합은 1입니다.

마찬가지로, 다른 $α$ 값을 사용하여 다른 단어 집합에서 컨텍스트 벡터를 생성합니다.

어텐션 모델은 대응하는 출력을 생성할 때 모든 입력이 사용되지 않기 때문에 $α(t,1), α(t,2),\ldots,α(t,t)$ 로 표시된 일련의 어텐션 가중치를 계산합니다. 출력 단어 $y_i$ 에 대한 컨텍스트 벡터 $c_i$는 주석 (annotation)의 가중합을 사용하여 생성됩니다.

    $$ c_i = \sum_{j=1}^{T_x} \alpha_{ij} h_j $$

어텐션 가중치는 입력 $j$ 와 출력 $i$ 사이의 정렬을 포착하는 함수로 설명된 전방 신경망의 출력 점수를 정규화하여 계산됩니다.

    $$ \alpha_{ij} = \frac{\exp(e_{ij})}{\sum_{k=1}^{T_x} \exp(e_{ik})} $$

    $$ e_{ij} = a(s_{i-1}, h_j) $$

어텐션 – 구현

입력 언어 (번역할 대상) 문장을 읽으면서 처음부터 끝까지 키워드를 작성한 후, 출력 언어로 번역하는 예로 들어보겠습니다. 각 영어 단어를 번역할 때 이해한 키워드를 사용합니다.

어텐션은 각 단어에 점수를 할당하여 서로 다른 단어에 다른 집중을 둡니다. 그런 다음 소프트맥스 점수를 사용하여 인코더 히든 상태의 가중 합계를 통해 인코더 히든 상태를 집계하여 컨텍스트 벡터를 얻습니다.

출처: 1409.0473 – Neural Machine Translation by Jointly Learning to Align and Translate

어텐션 레이어 구현은 4단계로 나눌 수 있습니다.

  • 단계 0: 히든 상태 준비.

먼저, 사용 가능한 모든 인코더 히든 상태 (위 그림에서 녹색) 와 첫 번째 디코더 히든 상태 (위 그림에서 빨간색) 를 준비합니다. 예를 들어, 4개의 인코더 히든 상태와 현재 디코더 히든 상태를 가지고 있습니다. (참고: 마지막으로 통합된 인코더 히든 상태는 디코더의 첫 번째 시간 단계의 입력으로 제공됩니다. 디코더의 이 첫 번째 시간 단계의 출력은 첫 번째 디코더 히든 상태라고 합니다.)

  • 단계 1: 각 인코더 히든 상태에 대한 점수 얻기.

점수(스칼라)는 점수 함수(정렬 점수 함수 또는 정렬 모델이라고도 함)에 의해 얻어집니다. 이 예에서는 디코더와 인코더 히든 상태 간의 내적이 점수 함수입니다.

  • 단계 2: 모든 점수를 소프트맥스 레이어에 통과시키기.

점수를 소프트맥스 레이어에 넣어 소프트맥스 점수(스칼라)의 합이 1이 되도록 합니다. 이 소프트맥스 점수는 어텐션 분포를 나타냅니다.

  • 단계 3: 각 인코더 히든 상태에 해당 소프트맥스 점수를 곱하기.

각 인코더 히든 상태에 해당 소프트맥스 점수(스칼라)를 곱함으로써 정렬 벡터 또는 주석 벡터를 얻습니다. 이것이 바로 정렬이 이루어지는 메커니즘입니다.

  • 단계 4: 정렬 벡터 합산하기.

정렬 벡터를 합산하여 컨텍스트 벡터를 생성합니다. 컨텍스트 벡터는 이전 단계에서 얻은 정렬 벡터의 집계된 정보입니다.

  • 단계 5: 컨텍스트 벡터를 디코더에 입력하기.

어텐션 – 종류

어텐션 벡터 ($a$)를 도출할 때 몇 개의 소스 상태가 기여하는지에 따라 다음과 같은 세 가지 종류의 어텐션 메커니즘이 있습니다:

1. 전역 어텐션 (Global Attention): 모든 소스 상태에 어텐션이 배치되는 경우입니다. 전역 어텐션에서는 소스 문장의 길이만큼의 가중치가 필요합니다.
2. 지역 어텐션 (Local Attention): 일부 소스 상태에만 어텐션이 배치되는 경우입니다.
3. 강한 어텐션 (Hard Attention): 단 하나의 소스 상태에만 어텐션이 배치되는 경우입니다.

지금까지 어텐션 전체 입력 시퀀스에 걸쳐 계산된다고 가정했습니다 (전역 어텐션). 이 방법은 단순하지만 계산 비용이 많이 들고 때로는 불필요할 수 있습니다. 그 결과, 지역 어텐션을 해결책으로 제안하는 논문들이 있습니다.

지역 어텐션에서는 입력 단위/토큰의 일부만 고려합니다. 이것은 때때로 매우 긴 시퀀스에 더 적합할 수 있습니다. 지역 어텐션은 일부 입력 단위를 제외하기 위해 먼저 결정을 내려야 하기 때문에 강한 어텐션으로도 볼 수 있습니다.

출처: How Attention works in Deep Learning: understanding the attention mechanism in sequence models

참고