본문 바로가기

Hello MLop/DL

NLP_어텐션 메커니즘(Attention Mechanism)

20230123

 


언제나 그렇듯

새로운 모델은 늘 기존 모델의 단점에서 시작된다.

 

앞서 포스팅한 Seq2Seq 모델

인코더에서 입력 시퀀스를 Context vector라는

하나의 고정된 크기의 벡터 표현으로 압축하고

 

디코더Context vextor를 통해 출력 시퀀스를 만들었다.

 

여기서 두 가지 문제점이 발견된다.

 


🚨 seq2seq 모델의 한계

1. 하나의 고정된 크기의 벡터(Context vector)에

모든 정보를 압축하려고 하니 정보 손실이 발생함.

= 병목 현상 (= bottle neck)

 

 

2. RNN계열의 고질적인 문제

기울기 소실(Vanishing gradient) 문제 존재.

 

즉, 입력 시퀀스가 길면

출력 시퀀스의 품질이 떨어지는 현상 발생.

 

이를 해결하기 위해 나타난것이

Attention 이다.

 


Attention

 

Attention 모델이 제시한 위 두가지 문제점

해결 방안은 이러하다.

 

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

인코더에서의 전체 입력 문장(sequence)

다시 한 번 참고한다는 것이다.

 

단, 전체 입력 sequence를 참고하는게 아니라

해당 시점에서 예측해야할 단어

연관이 있는 입력 단어 부분

좀 더 집중해서 보겠다는 것이다.

 


그림으로 보자.

 

seq2seq모델의 경우

 

그림과 같이

인코더 층에서

RNN계열 알고리즘을 통과한

vector 들을 context vector에 모아서

 

디코더 층에서

Context vector를 참고해

다시 출력해준다.

 

이때 인코더 층의 sequence가 많아 지면

Context vector층확률값(vector)들도

분산이 된다.

# 정확도가 떨어진다.

 

그렇게 때문에 디코더층에서

품질이 떨어지게 되는 것이다.

 


 

이를 보완한 Attention의 경우

 

빨간 색으로 표시한 중요한 단어

중심으로 두는 방향성을 가지고 있다.

 

모델의 구조는 비슷하지만

층의 구성에서 이를 보완했다.

 

아래의 사진을 보자.

 

 

인코더 층의 경우

seq2seq층과 동일하지만

 

디코더 층에서 차이가 난다.

 

디코더 층에서는 RNN계열 층을 지나고

Attention 층을 지난다

 

이때 Attention층에서는 시점마다

RNN계열층의 은닉상태(Quary)

인코더에서의 전체 입력 시퀀스 정보(Key, Value)

다시 한번 참고한다.

 


 

💡 Quary, Key, Value

 


 

Attention 층에서는

Attention 함수가 사용되는데

 

이때 다양한 함수(Attention Score Function)를 이용해서

Attention Score가 만들어지고

 

보통 SoftMax 함수를 통해Attention Value가 생성된다.


 

💡 Attention Score Function

 

어텐션 함수는 주어진 쿼리(Query)에 대해

모든 (Key)와의 유사도를 구함

 

벡터간의 거리(유사도)를 구하는 방법은

내적, 코사인 유사도, 유클리디안 거리 방법 등이 있지만

 

내적 유사도를 이용한다.

 

💡 내적 유사도의 예시

 

 

 


정리를 해보자면

 

Attention Mechanism활용한

seq2seq 방식의 모델은

 

기존의 seq2seq모델에서

병목현상기울기 소실문제해결하기 위해 만들어졌으며

 

이를 해결하기위해Sequence층

Attention Mechanism을 추가했다.

 

Attention Mechanism이란

Q,K,V를 가지고목적에 맞게

Attention Score Function을 이용하여

 

전체 인코더 Seqeunce를 참고해 나온

Attention Score디코더층의 계산된 은닉상태와 합친 후

Q를 업데이트 하는 것이다.

 

'Hello MLop > DL' 카테고리의 다른 글

Stable Diffusion  (0) 2023.02.22
NLP_Transfomer  (0) 2023.02.11
NLP_RNN을 이용한 Encoder-Decoder  (0) 2023.01.23
MLop_DL_LSTM 실습  (0) 2022.12.18
MLop_DL_RNN 실습  (0) 2022.12.17