AI 개발 공부 공간

AI, 머신러닝, 딥러닝, Python & PyTorch, 실전 프로젝트

딥러닝/딥러닝: 자연어

어텐션 메커니즘의 개념 및 작동 원리

qordnswnd123 2025. 5. 26. 20:51

1. 어텐션 메커니즘의 등장 배경과 중요성

어텐션 메커니즘의 등장은 자연어 처리 분야에 혁신적인 변화를 가져왔습니다. 이번에는 먼저 전통적인 Seq2Seq 모델의 구조와 작동 원리를 살펴보고, 이 모델이 가진 정보 병목 현상, 외부 정보 손실, 긴 문장 처리의 한계를 분석합니다. 이어서 이와 같은 한계를 극복하기 위해 등장한 어텐션 메커니즘의 발전 과정을 알아보고, 이것이 현대 딥러닝과 자연어 처리 학습에서 갖는 중요성을 알아봅니다.

 

1.1 Seq2Seq 모델 리뷰

Seq2Seq 모델은 하나의 시퀀스를 다른 시퀀스로 변환하는 능력을 가진 모델로, 대표적으로 기계 번역과 같은 작업에 사용됩니다. 예를 들어, 영어 문장 "She is reading a book"을 한국어 문장 "그녀는 책을 읽고 있다"로 번역하는 작업에서 Seq2Seq 모델이 사용될 수 있습니다.

 

 

이 이미지에서 볼 수 있듯이, Seq2Seq 모델은 인코더(Encoder)와 디코더(Decoder) 두 부분으로 구성됩니다. 두 부분 모두 시퀀스 데이터를 처리할 수 있는 RNN(순환 신경망) 구조로 되어 있으며, RNN의 여러 변형(LSTM, GRU 등) 중에서 긴 시퀀스 처리에 더 효과적인 LSTM을 중심으로 알아보겠습니다. 위 이미지에서 보듯이 각각의 LSTM 셀들은 순차적으로 입력을 처리하면서 시퀀스 정보를 효과적으로 인코딩하고 디코딩합니다.

 

※ 인코더 (Encoder)

인코더는 연속된 단어로 이루어진 입력 문장(입력 시퀀스 데이터)을 처리하는 역할을 담당합니다. 그림에서 보듯이, 입력 문장 "She is reading a book"의 각 단어는 먼저 임베딩 층을 통해 벡터로 변환되고, LSTM 층을 통과하며 문장의 의미가 압축된 형태로 표현됩니다. 이러한 과정의 결과 최종적으로 컨텍스트 벡터(context vector) 가 생성되며, 이 벡터는 입력 시퀀스 전체의 의미를 요약한 형태로 디코더에 전달됩니다.

 

※ 디코더 (Decoder)

디코더는 인코더에서 생성된 컨텍스트 벡터를 입력으로 받아 결과 문장(출력 시퀀스 데이터)을 순차적으로 생성합니다. 그림처럼 첫 번째 단계에서 디코더는 문장의 시작을 알리는 <sos> (Start of Sentence) 토큰과 컨텍스트 벡터를 입력으로 사용하여 첫 번째 단어 "그녀는"을 생성합니다. 이후에는 디코더에서 생성된 단어와 디코더의 이전 은닉 상태(hidden state)를 함께 사용하여 다음 단어를 생성합니다. 이 과정을 문장의 끝을 나타내는 <eos> (End of Sentence) 토큰이 생성될 때까지 반복됩니다. 학습 시에는 'teacher forcing' 기법을 사용하여 실제 정답 단어를 다음 예측에 활용하고, 추론 시에는 자신이 생성한 이전 단어를 기반으로 다음 단어를 예측합니다.

 

1.2 Seq2Seq 모델의 한계

Seq2Seq 모델은 입력 시퀀스를 다른 시퀀스로 변환하는 강력한 능력을 가지고 있지만, 몇 가지 중요한 한계가 있습니다.

 

※ 정보 병목 현상 (Bottleneck Effect):

위 이미지를 보면, Seq2Seq 모델에서는 인코더의 마지막 은닉 상태 하나만이 고정된 크기의 컨텍스트 벡터로 사용되어 번역의 역할을 담당하는 디코더에 전달 됩니다.

이 컨텍스트 벡터는 입력 문장의 길이(입력 시퀀스 길이)와 상관없이 모든 정보를 하나의 고정된 크기의 벡터로 압축해야 하므로 문장의 중요한 정보가 손실될 가능성이 큽니다.

예를 들어, "저는 어제 친구와 함께 영화관에서 재미있는 영화를 봤습니다"와 같은 긴 문장을 하나의 벡터로 요약하면, “어제”, “친구”, “재미있는” 등 중요한 단어들의 정보가 충분히 반영되지 못할 수 있습니다. 이로 인해 번역의 품질이 떨어지거나, 중요한 정보가 누락될 수 있습니다.

 

※ 위치 정보 손실:

컨텍스트 벡터가 입력 시퀀스를 요약하는 과정에서, 각 단어의 순서 정보가 명확하게 보존되지 않을 수 있습니다.

예를 들어, "The cat chases the mouse"와 "The mouse chases the cat"과 같이 단어의 순서가 중요한 문장을 구분하지 못할 가능성이 있습니다. 이는 컨텍스트 벡터가 문장의 모든 의미를 압축하는 과정에서 어휘 간의 관계와 순서를 명확히 보존하지 못하기 때문입니다.

 

※ 긴 문장 처리의 어려움:

Seq2Seq 모델의 기반이 되는 LSTM은 셀 상태나 게이트 메커니즘을 통해 기울기 소실 문제(gradient vanishing problem) 를 어느 정도 해결하려고 했지만, 입력 시퀀스가 매우 긴 경우 여전히 문제가 발생할 수 있습니다.

이는 긴 문장의 앞부분에서 나온 중요한 정보가 뒤쪽으로 충분히 전달되지 못해, 디코더가 정확한 번역을 생성하기 어렵게 만듭니다. 예를 들어, 긴 문장의 맨 앞에서 언급된 중요한 정보가 시간이 지나면서 희석되어, 디코더가 이를 적절히 반영하지 못할 수 있습니다.

 

1.3 어텐션 메커니즘의 등장

2014년 Bahdanau, Cho, Bengio 은 "Neural Machine Translation by Jointly Learning to Align and Translate" 라는 논문에서 어텐션 메커니즘(Attention Mechanism) 을 제안했습니다. 이 논문은 Seq2Seq 모델의 정보 병목 문제를 해결하고, 긴 문장의 번역 품질을 향상시키기 위한 새로운 접근 방식을 제시하였습니다.

어텐션 메커니즘은 디코더가 출력 단어를 생성할 때, 인코더의 모든 출력(hidden states)을 동적으로 활용하여 각 단계마다 적절한 컨텍스트 벡터를 생성하는 방법입니다. 이를 통해 디코더는 특정 단어를 생성할 때 입력 문장의 중요한 부분에 집중할 수 있게 되어, 번역의 정확성과 자연스러움을 크게 개선할 수 있었습니다.

이후, 2017년 그 유명한 "Attention is All You Need" 라는 논문에서 어텐션 메커니즘을 기반으로 한 트랜스포머(Transformer) 모델이 제안되었습니다. 이 논문은 어텐션 메커니즘을 모델의 중심에 두어, RNN이나 LSTM 같은 복잡한 구조 없이도 시퀀스 데이터를 효과적으로 처리할 수 있는 설계를 제안하였습니다. 트랜스포머 모델은 현대 대형 언어 모델(LLM)의 기초가 되었으며, 현재 널리 사용되는 ChatGPT와 같은 모델들의 기반이 되었습니다.

 

1.4 어텐션 메커니즘을 배워야 하는 이유

※ 트랜스포머와 LLM의 근간

현재 AI 분야에서 가장 주목받는 기술인 트랜스포머(Transformer)와 대규모 언어 모델(LLM)은 모두 어텐션 메커니즘을 기반으로 합니다. BERT, GPT 계열 모델, ChatGPT 등은 이 어텐션 메커니즘의 뛰어난 성능을 입증하는 대표적인 사례입니다.
딥러닝 분야에서 자연어 처리, 대규모 언어 모델(LLM) 기술을 깊이 있게 이해하고자 하는 학습자라면, 이러한 최신 모델들의 근간이 되는 어텐션 메커니즘의 작동 원리를 반드시 이해해야 합니다. 이는 단순히 현재 기술을 이해하는 것을 넘어, 앞으로 등장할 새로운 AI 기술을 학습하고 활용하는 데도 필수적인 기초가 될 것입니다.

 

※ 시퀀스 데이터를 다루는 딥러닝의 핵심 요소

어텐션 메커니즘의 영향력은 자연어 처리의 경계를 넘어 시퀀스 데이터를 활용하는 다양한 딥러닝 응용 분야로 폭넓게 확장되고 있습니다.
시계열 예측 모델에서는 데이터 흐름 중 중요한 시점을 효과적으로 식별하며, 음성 인식에서는 오디오 신호 내 핵심 특징을 강조해 성능을 향상시키고, 생물정보학에서는 단백질 구조와 같은 복잡한 생물학적 데이터의 정교한 분석에 기여하고 있습니다.

이처럼 시간적 흐름이나 순차적 관계를 가진 데이터를 다루는 최신 딥러닝 모델들은 어텐션 메커니즘을 핵심 구성 요소로 채택하고 있습니다.
따라서 어텐션 메커니즘의 이해는 현대 딥러닝의 다양한 응용 분야를 학습하고 발전시키는 데 필수적인 기반 지식이 될 것입니다.

 

2. 어텐션 메커니즘의 핵심 개념과 동작 원리

2.1 어텐션 메커니즘의 기본 개념

어텐션 메커니즘은 마치 우리가 글을 읽거나 번역할 때 문장의 특정 부분에 '주의를 기울이는' 인지 과정을 모방한 것입니다.
영어 문장을 한국어로 번역할 때, 우리는 전체 문장을 한 번에 기억하려 하지 않고, 각 단어를 번역할 때마다 원문의 필요한 부분에 집중합니다.

 

위의 그림에서 볼 수 있듯이, "그녀는 책을 읽고 있다"라는 번역문에 '책을'이라는 단어를 생성할 때, 모델은 입력 문장 "She is reading a book" 중에서 'book'이라는 단어에 가장 높은 가중치를 부여합니다. 반면 'She'나 'is'와 같은 단어들은 현재 생성하려는 '책을'이라는 단어와의 연관성이 낮기 때문에 상대적으로 낮은 가중치를 받게 됩니다.

이러한 선택적 집중은 아래 이미지에서 볼 수 있듯이 어텐션이 적용된 시퀀스-투-시퀀스(Seq2Seq) 모델의 각 어텐션 (Attention) 레이어를 통해 구현됩니다. (Alignment Layer라고도 부릅니다)

디코더는 출력 단어를 생성할 때마다 인코더의 모든 은닉 상태(hidden state)를 참조하며, 현재 생성하려는 단어와 가장 연관성이 높은 입력 정보를 선택적으로 활용합니다.


아래 이미지에서 볼 수 있듯이, 디코더는 특정 시점에서 "책을"이라는 단어를 예측할 때, "She is reading a book"이라는 입력 문장 중 'book'에 가장 높은 주의를 기울이고 있습니다. 이러한 과정은 어텐션 메커니즘을 통해 이루어지며, 인코더의 은닉 상태들을 기반으로 각 단어가 동적으로 계산되어 컨텍스트(context) 벡터로 결합됩니다.

 

어텐션 메커니즘의 가장 큰 특징은 입력에 대한 ‘선택적 집중’이 고정적이지 않고, 디코더의 각 출력 단계에서 동적으로 변화한다는 점입니다.
이미지에서 확인할 수 있듯이, 디코더는 "책을"이라는 단어를 생성할 때 입력 문장의 "book"에 가장 높은 주의를 할당하며, "읽고"라는 단어를 생성할 때는 "reading"에 더 큰 가중치를 부여합니다.

이러한 동적인 가중치 계산은 입력 문장의 각 부분에 대한 적절한 집중을 가능하게 하며, 모델이 특정 출력 단어를 생성할 때 입력 문장에서 가장 관련성 높은 정보를 활용하도록 돕습니다.
이처럼 어텐션 메커니즘은 입력 문장의 정보를 단순히 한 번에 요약하는 대신, 출력 단계마다 문맥에 적절히 선택하여 사용함으로써 번역, 요약 등 다양한 작업에서 더 정확하고 자연스러운 결과를 도출할 수 있게 됩니다.

 

2.2 어텐션 메커니즘의 구조

 

어텐션 메커니즘이 적용된 Seq2Seq 모델의 구조는 기존 Seq2Seq 모델인 인코더-디코더 구조를 기반으로 하되, 그 사이에 어텐션 레이어가 추가된 형태를 가집니다.
위 그림에서 볼 수 있듯이 모델은 크게 파란색 박스로 표시된 인코더 부분, 그 상태에 위치한 연한 녹색 배경의 어텐션 레이어, 그리고 왼쪽 연보라색 박스로 표시된 디코더 세 부분으로 구성됩니다.

인코더는 입력 문장의 각 단어를 순차적으로 처리하면서 각각의 LSTM 셀에서 은닉 상태(hidden state)를 생성합니다. 이때 각 은닉 상태는 해당 단어와 그 문맥 정보를 포함하고 있으며, 이 모든 은닉 상태들은 어텐션 레이어로 전달됩니다.

어텐션 레이어는 인코더의 모든 은닉 상태들과 디코더의 현재 은닉 상태 사이의 연관성을 계산합니다.
이 레이어는 디코더가 각 단계에서 출력 단어를 생성할 때, 입력 문장의 어떤 부분에 집중해야 할지를 결정하는 핵심 역할을 합니다.

디코더는 매 시점 세 가지 정보를 활용하여 다음 단어를 예측합니다:

  • 이전 시점에서 생성한 단어
  • 디코더의 현재 은닉 상태
  • 어텐션 레이어를 통해 생성된 컨텍스트 벡터

특히, 컨텍스트 벡터는 고정된 것이 아니라 디코더의 각 단계마다 새롭게 계산됩니다.

 

 

위 그림에서 볼 수 있듯이, 디코더는 각기 다른 시점(t=1, t=2)에서 서로 다른 컨텍스트 벡터를 생성합니다.
t=1 시점에서 ‘책을’ 단어를 예측할 때와 t=2 시점에서 ‘읽고’라는 단어를 예측할 때, 어텐션 레이어는 인코더의 은닉 상태들에 대해 각각 다른 가중치를 계산하여 해당 시점에 가장 적절한 컨텍스트 벡터를 만들어냅니다.

이러한 구조를 통해 어텐션 메커니즘은 디코더가 출력 단어를 생성할 때마다 입력 문장의 모든 부분을 참조할 수 있게 하며, 각 시점에서 가장 연관성이 높은 부분에 집중할 수 있도록 합니다.

 

※ 어텐션 메커니즘의 단계별 동작 개요

어텐션 메커니즘은 아래 그림과 같이 네 단계의 순차적인 과정을 통해 작동합니다.

 

먼저 어텐션 스코어(Attention Score) 를 계산하여 입력 단어들과의 연관성을 수치화하고, 이를 바탕으로 어텐션 가중치(Attention Weight) 를 생성합니다.
이 가중치를 사용하여 컨텍스트 벡터(Context Vector) 를 만들고, 최종적으로 이를 활용하여 출력 단어를 예측합니다.
각 단계의 구체적인 계산 방법과 수식은 다음 스텝에서 자세히 살펴보도록 하겠습니다.

 

3. 어텐션 스코어 (Attention Score)

3.1 어텐션 스코어의 개념과 종류

어텐션 스코어는 디코더가 특정 단어를 예측할 때 입력 문장의 각 단어가 얼마나 중요한지를 나타내는 값입니다.
아래 그림에서 확인할 수 있듯이, 이는 디코더의 예측하고자 하는 단계(𝑠ᵢ), 즉 '읽고'에 해당되는 단계의 이전 단계 은닉 상태(𝑠ᵢ₋₁) 와 인코더의 각 은닉 상태(ℎⱼ) 사이의 연관성을 수치화한 것입니다.

 

그림의 상단 부분을 보면, 각각의 인코더 은닉 상태 hj(파란색 화살표)는 디코더의 이전 단계의 은닉상태 si−1(초록색 화살표)와 함께 어텐션 함수(연두색 ‘a’ 박스)에 입력되어 개별적인 어텐션 스코어(보라색 박스)를 생성합니다. 이러한 어텐션 스코어의 계산은 다음과 같은 수식으로 표현됩니다:

여기서 si−1는 디코더의 이전 단계의 은닉 상태, hj는 인코더의 j번째 은닉 상태, a는 어텐션 함수를 나타냅니다. 이 어텐션 함수는 다양한 방식으로 구현될 수 있습니다.

현재는 각 방식의 주요 특징과 핵심 아이디어를 개념적으로 이해하는 것이 중요합니다.

현재 단계에서는 각 어텐션 방식의 세부 수식이 복잡한 구현 방식보다는, 주요 특징과 차이점을 개념적으로 이해하는 데에 집중하는 것이 중요합니다. 이 과정을 통해 이해한 이후 실습 과정에서 실제 구현을 경험하며 어텐션 방식의 원리를 체득합니다.

 

※ Dot Product Attention

Dot Product Attention은 가장 단순하면서도 효과적인 어텐션 스코어 계산 방식입니다. 디코더의 이전 단계 은닉 상태(𝑠ᵢ₋₁)와 인코더의 각 은닉 상태(ℎⱼ) 간의 내적(dot product)을 통해 어텐션 스코어를 계산하며, 다음과 같이 표현됩니다:

여기서 a는 위 그림에서 ‘a’로 표기된 연보라색 박스가 표현하는 어텐션 함수 (Attention Function) 혹은 Alignment Function을 나타냅니다.

내적은 두 벡터가 얼마나 "유사한 방향을 가리키는지"를 측정하는 방법입니다. 두 벡터 간 내적 값이 크다는 것은 두 벡터가 비슷한 방향을 가리키고 있다는 것, 즉 높은 연관성을 가지고 있음을 의미합니다. 반대로, 내적 값이 작거나 0에 가까우면 두 벡터가 서로 직교(orthogonal)하거나 관련성이 낮다는 것을 나타냅니다.

이러한 특성은 어텐션 메커니즘에서 매우 유용하게 활용됩니다. 디코더의 현재 상태(현재 생성하려는 단어의 문맥)와 인코더의 각 은닉 상태(입력 문장의 문맥) 간의 내적을 통해, 디코더는 현재 시점에서 어떤 입력 단어에 더 주의를 기울여야 할지 자연스럽게 결정할 수 있습니다.

 

※ Scaled Dot Product Attention

Scaled Dot Product Attention은 기본적인 Dot Product Attention의 한계를 보완한 방식입니다.
벡터의 차원(𝑑ₖ)이 커질수록 내적(Dot Product)의 값이 커지는 경향이 있어 학습이 불안정해질 수 있다는 문제를 해결하기 위해, 스케일링 팩터를 도입했습니다.

여기서 𝑑ₖ는 키(key) 벡터의 차원을 의미하며, √𝑑ₖ로 나누어줌으로써 내적 값의 분산을 1로 조정합니다.
이를 통해 특히 딥러닝 모델에서 자주 발생하는 그래디언트 소실이나 폭발 문제를 완화할 수 있습니다.

 

※ Luong Attention

Luong Attention은 Dot Product Attention의 확장된 방식으로, 디코더의 은닉 상태를 선형 변환하여 입력과의 연관성을 더 효과적으로 계산합니다.
구체적으로는, 디코더의 이전 단계 은닉 상태(𝑠ᵢ₋₁)에 학습 가능한 가중치 행렬(𝑊ₐ)을 곱해 새로운 표현 공간으로 변환한 후, 인코더의 은닉 상태(ℎⱼ)와 내적을 수행합니다.

이 식에서 핵심은 디코더의 은닉 상태(𝑠ᵢ₋₁)를 단순히 사용하는 대신, 𝑊ₐ를 통해 입력 데이터에 더 적절한 표현으로 조정한다는 점입니다.
이를 통해 디코더의 은닉 상태와 인코더의 은닉 상태가 더 잘 매칭될 수 있습니다.

쉽게 말하면, 두 벡터의 관련성을 비교하기 전에 하나의 벡터를 "더 잘 보이도록" 변화하는 과정으로 이해할 수 있습니다.
이 변환은 모델이 입력과 출력 간의 복잡한 관계를 더 잘 학습할 수 있도록 돕습니다.

 

※ Bahdanau Attention (Additive Attention)

Bahdanau Attention은 어텐션 점수를 계산할 때, 단순히 두 은닉 상태의 내적을 사용하는 대신, 신경망을 통해 비선형적으로 결합하는 방식을 도입했습니다.
이 방식은 디코더와 인코더의 은닉 상태 간의 복잡한 상호작용을 포착할 수 있도록 설계되었습니다.
어텐션 계산은 다음 수식으로 표현됩니다:

여기서:

  • [si−1;hj] 는 디코더의 이전 은닉 상태와 인코더의 은닉 상태를 연결(concatenation)한 것
  • Wa 는 연결된 벡터를 변환하는 학습 가능한 가중치 행렬
  • va 는 최종 스코어를 계산하는 학습 가능한 벡터
  • tanh 는 비선형 활성화 함수

이 방식은 단순 내적 방식과 달리, 두 은닉 상태 간의 선형적 결합을 넘어
복잡한 상호작용을 포착할 수 있고, 디코더와 인코더의 은닉 상태가 서로 다른 차원을 가질 경우에도,
가중치 행렬 Wa를 통해 쉽게 조정할 수 있는 장점이 있습니다.

 

※ Self-Attention

Self-Attention은 입력 시퀀스 내의 각 요소들이 서로 어떻게 관련되어 있는지를 파악하는 메커니즘입니다. 기존의 어텐션이 인코더와 디코더 사이의 관계를 모델링했다면, Self-Attention은 시퀀스 내부에서 각 단어(또는 토큰)가 다른 단어들과 어떤 연관성을 가지는지를 학습합니다.

예를 들어, 문장 "The cat sat on the mat"에서 Self-Attention은 "cat"과 "sat" 사이의 강한 연관성을 학습할 수 있습니다(고양이가 앉았다는 의미 연결). 동시에, "cat"과 "mat" 사이에도 약한 연관성을 학습할 수 있습니다(고양이가 매트 위에 있다는 의미 연결). 이렇게 각 단어가 다른 단어와 맺는 관계를 학습함으로써, 문맥을 더 잘 이해할 수 있게 됩니다.

이 메커니즘은 입력 시퀀스의 모든 단어(또는 토큰)가 서로를 참조할 수 있도록 하며, 이를 통해 문장의 구조적 맥락을 효과적으로 모델링합니다. 예컨대, 긴 문장에서도 중요한 단어 간의 관계를 유지하거나, 대명사("it", "they")가 어떤 명사를 지칭하는지를 이해하는 데에 유리합니다.

셀프 어텐션 계산은 다음 수식으로 표현됩니다:

여기서: WQ는 쿼리(Query) 변환을 위한 가중치 행렬, WK는 키(Key) 변환을 위한 가중치 행렬, dk는 key 벡터의 차원

  • 글로벌 정보 활용:Self-Attention은 입력 시퀀스 내 모든 요소를 동시에 참조하므로, 단순히 인접한 단어뿐만 아니라 문장의 어느 위치에 있는 단어와도 연관성을 학습할 수 있습니다.
  • 병렬 처리 가능:Self-Attention은 입력 시퀀스를 전체를 한 번에 처리하기 때문에, 순차적으로 처리해야 하는 RNN과 달리 병렬 계산이 가능하여 속도가 빠릅니다.
  • 문맥의 유연한 이해: 단순한 인접 관계를 넘어서, 시퀀스 전체의 맥락을 학습하여 문장 구조와 의미를 더욱 정확히 파악할 수 있습니다.

3.2 Bahdanau Attention 계산

Bahdanau Attention은 디코더가 ‘어떤 단어를 예측해야 할까?’ 결정할 때, 입력 문장의 모든 단어들과의 관계를 더 섬세하게 고려하는 방식입니다.

 

※ 디코더 상태의 복제와 결합

아래 이미지는 디코더의 이전 단계 은닉 상태(“책”을 예측을 위한 상태)를 입력 문장의 모든 단어와 비교하기 위한 준비 과정을 보여줍니다.

 

빨간색 블록으로 표시된 디코더의 현재 상태는 repeat 연산을 통해

인코더의 각 단어(She, is, reading, a, book)에 대응되도록 복제됩니다.

그리고 파란색 블록으로 표시된 인코더의 각 은닉 상태와 concat 연산을 통해 결합됩니다.
이는 마치 번역가가 “책을”이라는 단어를 번역하기 위해 원문의 모든 단어를 동시에 참조하는 과정을 모방한 것입니다.

이런 구조 덕분에:

  • 디코더는 “책을” 예측할 때 입력 문장의 모든 단어와의 관계를 동시에 고려할 수 있습니다.
  • 각 단어쌍(예: “책을”-“book”, “책을”-“is” 등) 사이의 연관성을 개별적으로 계산할 수 있습니다.
  • 결합된 정보는 신경망을 통해 처리되며 각 입력 단어와의 관련성 점수를 반환합니다.

※ 어텐션 스코어 계산 과정

 

위 그림에서 볼 수 있듯이, Bahdanau Attention은 수식

를 통해 어텐션 스코어를 계산합니다.

먼저, 인코더의 각 은닉 상태(파란색 블록)와 디코더의 이전 상태(빨간색 블록)가 결합(concatenation) 됩니다.
이는 수식에서 [si−1;hj] 부분에 해당하며, 두 정보를 하나의 벡터로 통합하는 과정입니다.

결합된 벡터는 가중치 행렬 W를 통해 변환되고, 여기에 tanh 함수가 적용됩니다.
tanh⁡ 함수는 결합된 정보를 -1과 1 사이의 값으로 압축하면서 비선형성을 추가합니다.
이는 디코더 상태와 인코더 상태 사이의 복잡한 관계를 더 잘 포착할 수 있도록 도와줍니다.

마지막으로, 학습 가능한 가중치 벡터 vaT를 통한 선형 변환으로 최종 어텐션 스코어 eij가 계산됩니다.

이 선형 변환은 이전 단계의 벡터를 단일 스칼라 값으로 변환하여,
현재 디코더 상태가 각 인코더 출력과 얼마나 관련이 있는지를 나타내는 어텐션 스코어를 생성합니다.

이 스코어는 현재 디코더 상태가 각 인코더 출력과 얼마나 관련이 있는지를 나타내는 값이 됩니다.

 

4. 어텐션 가중치 (Attention Weight)

앞서 계산한 어텐션 스코어는 각 입력 단어와의 관련성을 나타내는 원시(raw) 값입니다.
이 값들을 실제로 활용하기 위해서는 정규화된 가중치로 변환해야 합니다.

 

어텐션 가중치(αij)는 입력 단어와 디코더 은닉 상태 간의 관련성을 나타내는 어텐션 스코어(eij)를 소프트맥스(Softmax) 함수를 통해 정규화하여 계산됩니다. 그림에서 보는 바와 같이, 각 입력 단어에 대한 어텐션 스코어(eij)는 지수 함수(exp)를 적용한 후, 입력 문장 전체 스코어의 합으로 나누어 정규화됩니다.

정규화 과정의 결과는 그림 상단의 막대 그래프로 표현됩니다. 여기서:

  • 높고 진한 색의 막대는 해당 입력 단어가 디코더의 현재 시점에서 가장 큰 주의를 받고 있음을 나타냅니다.
  • 낮고 연한 색의 막대는 해당 입력 단어가 상대적으로 덜 주목받고 있음을 보여줍니다.

이 과정은 다음 수식으로 표현됩니다:

 

어텐션 가중치(αij)는 다음 수식을 통해 계산됩니다:

이 과정을 단계별로 살펴보면:

지수 변환 (Exponential):
각 어텐션 스코어에 지수 함수(exp)를 적용합니다. 이는 모든 값을 양수로 만들며, 차이를 더 극적으로 만듭니다.

 

총합으로 나누기 (Normalization):
모든 지수 변환된 값의 합으로 나누어줍니다. 이를 통해 모든 가중치의 합이 1이 되도록 만듭니다.

 

이러한 변환은 softmax 함수라고 하며, 그림에서 빨간색 박스로 표시된 부분입니다.

 

가중치의 의미와 특징 변환된 어텐션 가중치는 다음과 같은 특징을 가집니다.

확률 분포: 모든 가중치는 0과 1 사이의 값을 가집니다. 모든 가중치의 합은 1입니다. 그림에서 빨간색 막대의 높이로 표현됩니다
상대적 중요도: 높은 가중치(긴 빨간색 막대)는 해당 단어가 현재 예측에 매우 중요함을 의미합니다. 낮은 가중치(짧은 빨간색 막대)는 해당 단어가 현재 예측과 관련성이 적음을 의미합니다.


예를 들어, 그림에서 볼 수 있듯이
"book" 단어가 가장 높은 가중치를 받았는데, 이는 현재 "책을 예측할 때 가장 중요한 단어임을 나타냅니다
"is"나 "a"와 같은 단어들은 상대적으로 낮은 가중치를 받았습니다.
이러한 가중치는 다음 단계에서 컨텍스트 벡터를 생성하는 데 사용되며, 이를 통해 디코더는 현재 예측에 가장 관련 있는 정보에 집중할 수 있게 됩니다.

 

5. 컨텍스트 벡터 (Context Vector)

앞서 계산한 어텐션 가중치(a)는 입력 문장의 각 단어가 디코더의 현재 단계에서 얼마나 중요한지를 나타냅니다. 이제 이 가중치를 활용해 디코더가 참조할 문맥 정보, 즉 컨텍스트 벡터를 생성하는 과정을 살펴보겠습니다. 컨텍스트 벡터는 어텐션 가중치를 활용해 입력 문장의 중요한 정보를 선택적으로 결합하여 생성됩니다. 이를 수식으로 표현하면 다음과 같습니다:


여기서,
aij : 디코더의 현재 단계와 입력 문장의 각 단어 간의 어텐션 가중치
hj : 인코더의 각 단어에 대한 은닉 상태 이 수식은 디코더가현재 단계에서 참조할 문맥 정보를 계산하는 핵심 과정을 나
타냅니다.

 

※ 가중치와 은닉 상태의 결합
그림에서 보듯이, 각 인코더 은닉 상태, (파란색 LSTM의 출력)는 자신의 어텐션 가중치와 곱해집니다.이는 그림에서 파란색 LSTM의 출력부에서 점선의 곡선으로 연결되어 "Element wise multiplication" 으로 표시된 부분에서 확인 할 수 있습니다 이 곱셈은 각 은닉 상태 벡터의 모든 요소가 해당 가중치로 스케일링되는 방식으로, 입력 문장의 각 단어가 디코더의 현재 상태에 기여하는 비율을 조정합니다.
이를 통해, 디코더는 중요한 단어의 정보를 더 강하게 반영하고, 덜 중요한 단어의 정보는 상대적으로 약하게 반영할 수 있습니다.
이 곱셈은 일반적인 행렬 곱셈이 아니라, 은닉 상태 벡터의 각 요소를 해당 가중치로 스케일링하는 방식입니다.

 

예를 들어:
"book"에 해당하는 은닉 상태는 높은 어텐션 가중치와 곱해져, 가장 큰 영향을 반영합니다.
반대로, "is"와 "a"는 낮은 어텐션 가중치와 곱해져, 상대적으로 적게 반영됩니다.

 

※ 가중합을 통한 컨텍스트 벡터 생성
어텐션 가중치가 곱해진 모든 은닉 상태는 그림에서 "Element wise multiplication" 으로 표시된 연산을 거칩니다. 이 연산에서는 각 인코더 은닉 상태 bj의 모든 요소가 해 당 어텐션 가중치로 스케일링됩니다. 구체적으로는, 은닉 상태 bj가 벡터라면, 벡터의 각 요소에 동일한 가중치를 곱 하는 방식입니다.이 과정을 통해, 입력 문장의 각 단어가 디코더의 현재 상태에 얼마나 기여할지 조정됩니다.
예시: 

"reading"의 은닉 상태가 높은 어텐션 가중치(예: 0.8) 와 곱해진다면, 그 정보가 컨텍스트 벡터에 더 강하게 반영됩니다.
반면, "is와 같은 상대적으로 덜 중요한 단어의 은닉 상태는 낮은 가중치(예: 0.1)와 곱해져 컨텍스트 벡터에 미미하게 반영됩니다.
이렇게 가중치가 적용된 은닉 상태들은 그림에서 "+" 연산을 통해 모두 더해지고, 최종적으로 컨텍스트 벡터를 형성합니다. 이 컨텍스트 벡터는 디코더가 다음 단어를 생성할 때 참조할 중요한 정보를 종합한 결과입니다.

 

※ 컨텍스트 벡터의 역할
이 컨텍스트 벡터는 디코더가 다음 단어를 예측하는 데 필요한 핵심 정보를 제공하며, 마치 번역가가 원문에서 중요한 부분을 선별적으로 참고하여 번역을 수행하는 것과 유사합니다.

 

6. 최종 출력 생성 및 단어 예측

앞서 생성한 컨텍스트 벡터는 현재 디코더가 필요로 하는 입력 문장의 중요 정보를 담고 있습니다. 이제 이 정보를 활용하여 실제 출력 단어를 생성하는 과정을 살펴보겠습니다.

 

이 과정을 단계별로 살펴보면
※ 컨텍스트 벡터와 디코더 상태의 결합
앞서 생성한 컨텍스트 벡터(C)는 입력 문장의 중요 정보를 담고 있습니다. 그림에서 볼 수 있듯 이, 이 정보는 디코더의 현재 상태와 결합되어 다음과 같은 과정 으로 처리됩니다:
컨텍스트 벡터와 디코더 상태가 결합됩니다 (그림의 진한 분홍색 : 블록)
이는 "원문의 어느 부분에 주목할지"(컨텍스트 벡터)와 "지금까지 무엇을 번역했는지"(디코더 상태)를 함께 고려하는 과정 입니다
마치 번역가가 원문의 중요 부분과 지금까지 번역한 내용을 종합하여 다음 단어를 고르는 것과 같습니다
신경망을 통한 단어 예측 결합된 정보는 다음 단계들을 거쳐 실제 단어로 변환됩니다:

 

fc layer(fully connected layer) 통과:
결합된 정보가 신경망의 출력층을 통과하면서 각 단어에 대한 점수로 변환됩니다 이 과정에서 학습된 가중치를 통해 각 단어의 생성 가능성이 계산됩니다.


확률분포 생성(Softmax):
계산된 점수들은 softmax 함수를 통과하면서 확률 분포로 변환됩니다. 이 확률 분포는 각 단어가 다음 단어로 선택될 가능성을 나타냅니다.

 

최종 단어 선택:
가장 높은 확률을 가진 단어가 최종 출력 단어로 선택됩니다 선택된 단어는 다음 시점의 디코더 입력으로도 사용됩니다.


예를 들어
컨텍스트 벡터가 'book'에 대한 정보를 강하게 담고 있고 디코더가 "그녀는"까지 번역한 상태라면 다음 단어로 "책을"이 가장 높은 확률을 받아 선택될 것입니다.


이러한 과정은 문장이 완성될 때까지(즉, 토큰이 나올 때까지) 반복됩니다. 매 단계마다 새로운 컨텍스트 벡터가 계산되어 다음 단어 예측에 활용되며, 이것이 어텐션 메커니즘의 핵심 강점입니다.