오늘부터 5회에 걸쳐 어텐션 매커니즘에 대해 공부하고 실습해볼 예정이다.
공부 자료는 데이콘 어텐션 메커니즘 학습 트랙을 이용하였다.
어텐션 메커니즘의 등장은 자연어 처리 분야에 혁신적인 변화를 가져왔다. 먼저 전통적인 Seq2Seq모델의 구조와 작동원리를 살펴보고, 이 모델이 가진 정보 병목 현상, 위치 정보 손실, 긴 문장 처리의 한계를 분석해보자. 이어서 이 한계를 극복하고자 등장한 어텐션 메커니즘의 발전 과정을 살펴보고 딥러닝과 NLP에서의 중요성을 공부해보자.
Seq2Seq 모델은 하나의 시퀀스를 다른 시퀀스로 변환하는 능력을 가진 모델이다. 기계번역에서 많이 사용된다.

이미지 처럼 인코더(Encoder)와 디코더(Decoder)로 구성된다. 두 부분 모두 순환 신경망(RNN) 구조로 되어있고, RNN의 변형인 LSTM, GRU도 가능하다. 위 이미지는 LSTM 중심으로 설명하고 있다.
인코더(Encoder)
인코더는 연속된 단어로 이뤄진 입력 문장을 처리하는 역할을 한다. 문장이 인코더를 거치면 컨텍스트 벡터(Context Vector)가 생성되며, 이 벡터는 입력 시퀀스 전체의 의미를 요약한 형태로 디코데에게 전달된다.
디코더(Decoder)
디코더는 인코더에서 생성된 컨텍스트 벡터를 입력으로 받아 결과 문장을 순차적으로 생성합니다. 이후, 이전 단계에서 생성된 단어와 디코더의 이전 은닉 상태를 입력으로 사용하여 다음 단어를 예측하며, 이 과정은 문장의 끝을 나타내는 토큰"eos"가 생성될 때까지 반복됩니다. 학습 시에는 'teacher forcing' 기법을 사용하여 실제 정답 단어를 담음 예측에 활용하고, 추론 시에는 자신이 생성한 이전 단어를 기반으로 다음 단어를 예측합니다.
정보 병목 현상(Bottleneck Effect)
위 이미지를 보면 모델에서 인코더의 마지막 은닉 상태 하나만이 고정된 크기의 컨텍스트 벡터로 사용되어 번역의 역할을 담당하는 디코더에 전달 됩니다.
이 컨텍스트 벡터는 입력 문장의 길이와 상관 없이 모든 정보를 하나의 고정된 크기의 벡터로 압축해야 하므로 문장의 정보가 손실될 가능성이 큽니다.
위치 정보 손실
컨텍스트 벡터가 입력 시퀀스를 요약하는 과정에서, 각 단어의 순서 정보가 명확하게 보존되지 않을 수 있습니다.
예를 들어 "The cat chases the mouse." 와 "The mouse chases the cat."과 같은 순서가 중요한 문장을 구분하지 못할 가능성이 있다. 이는 컨텍스트 벡터가 문장의 모든 의미를 압축하는 과정에서 어휘 간의 관계와 순서를 명확히 보존하지 못하기 때문입니다.
긴 문장 처리의 어려움
Seq2Seq 모델의 기반이 되는 LSTM은 셀 상태와 게이트 메커니즘을 통해 기울기 소실 문제(Gradient vanising problem)를 어느정도 해결하고자 했지만, 입력 시퀀스가 매우 긴 경우 여전히 문제가 발생 할 수 있습니다.
이는 긴 문장의 앞부분에서 나온 중요한 정보가 뒤쪽으로 충분히 전달되지 못해, 디코더가 정확한 번역을 생성하기 어렵게 만듭니다.
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"라는 논문에서 어텐션 메커니즘을 기반으로한 트랜스포머 모델이 제안 되었다. 이 논문은 어텐션 메커니즘을 모델의 중심에 두어, RNN이나 LSTM 같은 재귀적 구조 없이도 시퀀스 데이터를 효과적으로 처리할 수 있는 획기적인 아키텍처를 설계하였다.
트랜스포머와 LLM의 근간
현재 AI분야에서 가장 주목받는 기술인 트랜스포머와 LLM은 모두 어텐션 메커니즘을 기반으로 한다. 이를 이용해 기술을 깊이 있게 이해하고 효과적으로 사용하려면 어텐션 메커니즘을 알아야한다.
시퀀스 데이터를 다루는 딥러닝의 핵심 요소
어텐션 메커니즘은 자연어 처리를 넘어 다양한 딥러닝 응용분야로 확장되고 있다. 시계열 예측 모델, 음성 신호, 단백질 구조 같은 데이터에서도 널리 사용된다.
어텐션 메커니즘은 마치 우리가 글을 읽거나 번역할 때 문장의 특정 부분에 '주의를 기울이는' 인지과정을 모방한 것 입니다.

위 그림 처럼 '책이'라는 단어를 생성할 때, 입력 문장의 'book'에 가중치를 제일 높게 부여하고 있다.
이러한 선택적 집중은 아래 이미지에서 볼 수 있듯이 어텐션이 적용된 Seq2Seq 모델과 같이 어텐션 레이어를 통해 구현된다.
디코더는 출력 단얼르 생성할 때마다 인코더의 모든 은닉 상태를 참조하여, 핸재 생성하려는 단어와 가장 연관이 높은 입력 정보를 선별적으로 활용합니다. 아래 이미지 처럼, 디코더는 특정 시점에서 '책을'이라는 단어를 예측할 때, 'book'이라는 단어에 가장 높은 주의를 기울이고 있습니다. 이러한 과정은 어텐션 메커니즘을 통해 이뤄지며, 인코더의 은닉 상태들을 기반으로 가중치가 동적으로 계산되어 컨텍스트 벡터로 결합됩니다.

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

어텐션 메커니즘이 적용된 Seq2Seq 모델의 구조는 기존 Seq2Seq 모델의 인코더-디코더 구조를 기반으로 하되, 그 사이에 어텐션 레이어가 추가된 형태를 갖는다. 위 그림에서 볼 수 있듯이 모델은 크게 파란색 박스로 표시된 인코더 부분, 그 상단에 위치한 연한 녹색 배경의 어텐션 레이어, 그리고 인코더 오른쪽 녹색 박스로 표시된 디코더 세 부분으로 구성된다.
인코더는 입력 문장의 각 단어를 순차적으로 처리하면서 각각의 LSTM 셀에서 은닉 상태를 생성한다. 이때 각 은닉 상태는 해당 단어와 그 문맥 정보를 포함하고 있으며, 이 모든 은닉 상태들은 어텐션 레이어로 전달된다.
어텐션 레이어는 인코더의 모든 은닉 상태들과 디코더의 현재 은닉 상태사이의 연관성을 계산합니다. 이 레이어는 디코더가 각 단계에서 출력 단어를 생성할 때, 입력 문장의 어떤 부분에 집중해야 할지를 결정하는 핵심 역할은 합낟.
디코더는 매 시점 세 가지 정보를 활용하여 다음 단어를 예측한다.
특히, 컨텍스트 벡터는 고정된 것이 아니라 디코더의 각 단계마다 새롭게 계산된다.

위 그림에서 볼 수 있듯이, 디코더는 각기 다른 시점에서 서로 다른 컨텍스트 벡터를 생성한다.
이러한 구조를 통해 어텐션 메커니즘은 디코더가 출력 단어를 생성할 때마다 입력 문장의 모든 부분을 참조할 수 있게 하며, 각 시점에서 가장 연관성이 높은 부분에 집중할 수 있도록 한다.
어텐션 메커니즘의 단계별 동작 개요

어텐션 스코어는 디코더가 특정 단어를 예측할 때 입력 문장의 각 단어가 얼마나 중요한지를 나타내는 값이다. 이는 아래 그림처럼 디코더가 예측하고자 하는 단계()의 이전 단계의 은닉 상태()와 인코더의 각 은닉 상태(%h_j$)사이의 연관성을 수치화 한 것이다.

위 그림에서 각각 인코더 은닉 상태, 디코더의 이전 은닉상태가 어텐션 함수에 입력이 되고 어텐션 스코어로 출력이 된다. 산식은 아래와 같다.
식을 보면 a함수 내부에 이전 은닉 상태(), 인코더의 은닉상태()가 독립변수로 들어가 있다. 이때 계산은 기본적으로 벡터 내적(Dot Product)으로 계산한다. 이외에 여러 방법이 있는데 한번 소개해보겠다.
Dot Product Attention
가장 단순하고 효과적인 방식이다.
내적은 두 벡터가 얼마나 "유사한 방향을 가리키는지"를 측정하는 방법이다. 내적값이 클 수록 비슷한 방향을 가리키는 것이며, 이는 연관성이 높다라고 할 수 있다.반대로 값이 작으면 연관성이 낮다고 해석할 수 있다.
이를 통해 디코더는 현 시점에서 어떤 입력 단어에 더 주의를 기울여야 할지 결정 할수 있다.
Scaled Dot Product Attention
Scaled Dot Product Attention은 기본적인 내적 방싱의 한계를 보완한 방식이다. 벡터의 차원()이 커질수록 내적값이 커지는 경향이 있어 학습이 불안정해질 수 있다는 문제를 해결하기 위해, 스케일링 펙터를 도입했다.
여기서 는 키(key) 벡터의 차원을 의미하며, 로 나눠줌으로서 내적 값의 분산을 1로 조정한다. 이를 통해 기울기 소실이나 발산 문제를 완화 할 수 있다.
Luong Attention
Luong Attention는 내적 방식의 확장된 방법으로, 디코더의 은닉 상태를 선형 변환하여 입력과의 연관성을 더 효과적으로 계산한다. 디코더의 이전 단계 은닉 상태에 학습가능한 가중치 행렬()을 곱해 새로운 표현 공간으로 변환한 후, 인코더의 은닉 상태와 내적을 수행한다.
핵심은 디코더의 은닉 상태를 단순히 사용하는 대신, 를 통해 입력 데이터에 더 적합한 표현으로 조정한다는 점이다. 이를 통해 디코더의 은닉 상태와 인코더의 은닉 상태가 더 잘 매칭될 수 있다.
Bahdanau Attention(Additive Attention)
Bahdanau Attention은 어텐션 점수를 계산할 때, 단순히 두 은닉 상태의 내적을 사용하는 대시느 신경망을 통해 비선형적으로 결합하는 방식을 도입했다. 이 방식은 디코더와 인코더의 은닉 상태 간의 더 복잡한 상호작용을 포착할 수 있도록 설계되었다.
추가 설명
이 방식은 단순 내적과 달리, 두 은닉상태간의 비선형 결합을 통해 더 복잡한 상호작용을 모델링할 수 있고, 디코더와 인코더의 은닉 상태가 서로 다른 차원을 가질 경우에도, 가중치 행렬를 통해 쉽게 조정할 수 있는 장점이 있다.
Self-Attention
Self-Attention은 입력 시퀀스 내의 각 요소들이 서로 어떻게 관련되어 있는지 파악하는 메커니즘이다. 기존의 어텐션이 인코더와 디코더 사이의 관계를 모델링했다면, Self-Attention은 시퀀스 내부에서 각 단어가 다른 단어들과 어떤 연관성을 가지는지 학습한다.
학습 시 주변 단어와 강한 연관성을 학습함과 동시에 약한 연관성을 학습하며 다른 단어와 맺는 관계를 학습함으로서 문맥을 더 잘 이해할 수 있게 된다.
이 메커니즘은 입력 시퀀스의 모든 단어가 서로 참조할 수 있도록 하며, 이를 통해 문장의 구조적 맥락을 효과적으로 모델링 한다.
추가 설명
는 쿼리 변환을 위한 가중치 행렬는 키 변환을 위한 가중치 행렬 는 키벡터의 차원
Bahdanau Attention은 디코더가 '어떤 단어를 예측해야 할까?" 결정할 때, 입력 문장의 모든 단어들과의 관계를 더 섬세하게 고려하는 방식이다.

빨간색 블록으로 표시된 디코더의 현재상태는 repeat 연산을 통해 인코더의 각 단어에 대응되도록 복제됩니다.
그리고 파란색 블록으로 표시된 인코더의 각 은닉상태와 concat 연산을 통해 결합됩니다. 번역가가 한 단어를 번역하기 위해 원문의 모든 단어를 동시에 참조하는 과정을 모방한 것이다.
이런 구조 덕에

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

어텐션 가중치()는 입력 단어와 디코더 은닉 상태 간의 관련성을 나타내는 어텐션 스코어()를 소프트맥스 함수를 통해 정규화하여 계산한다.
정규화의 결과는 이미지의 상단에 막대그래프로 표현된다. 이때, 높고 진한 색 막대는 해당 입력 단어가 디코더의 현재 시점에서 가장 큰 주의를 받고 있음을 나타내고 반대의 경우는 낮고 연한 색을 띈다.
어텐션 가중치를 식으로 나타내면 위와 같은데
지수 변환: 각 어텐션 스코어에 지수함수를 적용하면 모든 값을 양수로 만들어주며, 차이를 더 극적으로 만든다.
총합으로 나누기: 모든 지수 변환된 값의 합으로 나눠준다. 이를 통해 모든 가중치의 합이 1이 되도록 만듭니다.
이것이 소프트맥스 함수이다.
어탠션 가중치의 특징
모든 가중치의 합이 1로 표현 되므로 해석에 용이하다.
이미지 상 값의 크기에 따라 그래프가 높고 낮고로 표현되었다. 이는 예측에서 해당 단어가 얼마나 중요한지를 나타내고 있다.
앞서 계산한 어텐션 가중치는 입력 문장의 각 단어가 디코더의 현재 단계에서 얼마나 중요한지 나태난다. 이제 이 가중치를 활용해 디코더가 참조할 문맥 정보, 즉 컨텍스트 벡터를 생성하는 과정을 알아보자. 컨텍스트 벡터는 어텐션 가중치를 활용해 입력 문장의 중요한 정보를 선택적으로 결합하여 생성하며 수식은 다음과 같다.
여기서

위 그림은 컨텍스트 벡터의 생성 과정을 나타낸다. 각 인코더의 은닉 상태는 자신의 어텐션 가중치와 곱해진다. 이 곱셈은 각 은닉 상태 벡터의 모든 요소가 해당 가중치로 스케일링되는 방식으로, 입력 문장의 각 단어가 디코더의 현재 상태에 기여하는 비율을 조정한다.
이를 통해 디코더는 중요한 단어의 정보는 더 강하게 덜 중요한 단어는 약하게 반영할 수 있다.
다음은 각 인코더 은닉 상태의 모든 요소가 해당 어텐션 가중치로 스케일링 (곱셈)된다.
이렇게 가중치가 적용된 은닉 상태들은 합연산을 통해 더해지고 최종적으로 컨텍스트 벡터를 형성한다.
