본문 바로가기
인공지능 개발하기/기술 & 논문 리뷰

Attention 매커니즘

by 선의공 2024. 4. 27.
반응형

 

 

이번 포스팅에서는 Attention 매커니즘에 대해서

학습하는 시간을 가져보겠습니다!

 

위키독스와 해당 포스팅을 참고할게요!

https://wikidocs.net/22893

 

15-01 어텐션 메커니즘 (Attention Mechanism)

앞서 배운 seq2seq 모델은 **인코더**에서 입력 시퀀스를 컨텍스트 벡터라는 하나의 고정된 크기의 벡터 표현으로 압축하고, **디코더**는 이 컨텍스트 벡터를 통해서 출력 …

wikidocs.net

https://ctkim.tistory.com/entry/Attention-Mechanism

 

어텐션 메커니즘 (Attention Mechanism)이란?

1. Attention Mechanism란? seq2seq 모델은 기존의 RNN 모델과 같이 고정된 길이의 벡터를 입력으로 받아 고정된 길이의 벡터를 출력하는 구조를 가지고 있습니다. 그러나 이 구조는 고정된 길이의 벡터

ctkim.tistory.com


 

1. Attention의 아이디어

앞서 포스팅한 Seq2Seq 매커니즘에서 문제점을 제기했고,

문제점을 해결하기 위해 Attention 매커니즘이 나왔다고 했습니다.

 

Seq2Seq 매커니즘의 크게 두가지 문제는

1. 하나의 벡터인 Context에 모든 정보를 압축하려니 정보손실 발생

2. 단어가 길어지면 길어질수록 기울기 소실(Vanishing gradient)이 발생.

였는데요, 어떻게 Attention은 이 문제를 보완했을까요?

 

기본적인 아이디어는 이를 보완하기 위해

디코더에서 출력 단어를 예측하는 매 time step마다

인코더의 전체 입력 문장을 한번 더 참고한다고 합니다.

이 입력 문장 자체는 서로 다른 연관 비율을 가지고 있고

이 중 연관이 큰 부분에 더 집중(attention) 한다고 해요. 

 


 

 

2. Attention 함수

 

어텐션 함수의 역할은 입력 시퀀스의 각 단어들에 대한 가중치를 계산하는 것입니다.

위의 아이디어에서 보자면 디코더의 값을 인코더의 전체 입력 문장을

참고한다고 했잖아요? 이부분을 나타냅니다.

 

attention 함수는

Query, Key, Value 로 구성되어있습니다.

코드 측면에서 보면 Key-value로 구성된 딕셔너리 형태를 참고한다고 보시면 됩니다.

Attention(Q,K,V) = Attention Value

이렇게 표현할 수 있습니다.

 

Query(Q) : t 시점의 디코더 셀에서의 은닉상태

Key(K) : 모든 시점의 인코더 셀의 은닉상태들

Value(V) : 모든 시점의 인코더 셀의 은닉상태들

 을 나타냅니다.

 

attention 함수는 Query 벡터와 Key간의 유사도를 측정합니다.

이 유사도를 측정하는데에는 아래 표처럼 내적,외적 등 다양한 방법론이 제시되었습니다.

 

구해낸 유사도를 정규화해서 각 단어의 가중치를 계산하며,

이 가중치에 Value를 곱해주면 이 값이 Attention Value로서 출력됩니다.

 


 

3. 닷-프로덕트 어텐션(Dot-Product Attention)

 

기본 예시로 닷 프로덕트 어텐센(Dot-Product Attention)을 이해해보겠습니다.

위에서 말한 유사도 측정 방법론 중 dot(내적)을 적용한 어텐션 방식입니다.

 

 

 

위 그림은 세번째 LSTM 셀에서 출력 단어를 예측할때 어텐션 메커니즘을 사용하는 모습을 나타냅니다.

세번째 LSTM셀은 출력 단어를 예측하기 위해서 인코더의 모든 입력 단어 정보를 다시 참고합니다.

 

디코더의 예측값과 각 단어의 정보를 비교하고 유사도를 구한 후

Softmax 함수를 거쳐 정규화를 하여 어텐션의 분포를 조절하고

각 단어가 예측된 출력 단어와 얼마나 연관이 있는지 균등하게 전체 합이 1인 가중치로서 나타내줍니다.

 

아래 그림은 좀 더 정확한 도식을 표현하고 있습니다. 

 

1단계: Attension Score 구하기

2단계 : SoftMax를 통해 어텐션분포(Attention Distribution) 구하기

3단계: 어텐션 값(Attention Value) 구하기

 

 

3 -1 . Attention Score 구하기

 

인코드의 시점을 1,2...N이라고 하면 인코더의 은닉상태는

이라고 표현하겠습니다.

디코더의 현재 시점 t에서 디코더의 은닉상태를

라고 하겠습니다.

여기서 인코더와 디코더의 은닉상태의 차원이 4로 같다고 가정합니다.

 

닷 프로덕트 어텐션에서는 Attention Score를 구하기 위해서

내적의 방식을 사용하게 되고 각 스칼라를 곱해서 더해서 반환합니다.

이 어텐션 스코어 함수를 정의하면 

해당 식으로 표현할 수 있습니다.

모든 디코더의 은닉상태에서의 어텐션 스코어 모음값을

 라고 정의하면

모든 Attention Score 함수는 해당 수식으로 표현할 수 있습니다.

 

 

3-2. 어텐션 분포(Attention Distribution) 구하기

 

앞서 구해준 Attention Score인 

에 소프트맥스 함수를 적용하여 모든 값을 합하면 1이 되는 확률 분포를 얻습니다.

이를 어텐션 분포(Attention Distribution)이라고 하고

각각의 값은 어텐션 가중치(Attention Weight)라고 합니다.

디코더 시점인 t에서의 어텐션 가중치의 모음값인

어텐션 분포를

라고 하면 

로 나타낼 수 있습니다.

 

 

3-3. 어텐션 값(Attention Value) 구하기

 

 

지금까지 구한 값들을 하나로 합치게 됩니다.

각 인코더의 은닉상태와 어텐션 가중치들을 곱하고 곱한 값들을 모두 더해주면(Weighted Sum)

어텐션값(Attention Value)를 얻을 수 있습니다.

어텐션 값은 위의 수식으로 나태낼 수 있습니다.

해당 어텐션 값은 인코더의 문맥을 포함하고 있다고 해서

Context vector라고 불리는데,

Seq2Seq의 하나의 압축된 벡터(마지막 은닉상태)를 부르는 것 동일하지만

그 의미는 대조적입니다.

 

 

결과적으로 이 얻어진 Attention 값을 디코더의 t 은닉상태인

과 겹합(concatenate)하게 되고 하나의 벡터로 만들어 줍니다.

이 만들어진 벡터를

라고 한다면 이 벡터는 y예측 연산의 입력으로 사용되므로서

y를 좀 더 잘 예측할 수 있게 합니다.

 

 

 

3-4 . 출력층 연산 계산

논문에서는 Vt를 바로 출력층으로 보내기 전에 신경만 연산을 한 번 더 추가하였다고 합니다.

다시 이 그림을 보면 이해가 되실건데,

Dense 층을 줘서 가중치를 구하고

이를 Softmax를 통해 출력층의 입력으로 사용합니다.

 

 

논문의 내용을 기준으로 Dense레이어를 거친

가중치와 Vt를 곱한 후 하이퍼볼릭탄젠트를 지나도록 하고

해당 수식으로 표현되게 됩니다.

 

마지막으로 Softmax를 거친 값을 출력 층의 입력으로 사용합니다.

 

 

 

 

 

다음 포스팅으로는 이 Attention을 사용해서 구성한 

Attention All you Need - Transformer에 대한 논문 리뷰를 진행하겠습니다.

 

 

틀린부분 있다면 지적 부탁드립니다!

반응형