데이터 사이언스(Data Science)/자연어 처리 ,NLP

Attention, 어텐션 메커니즘

게임이 더 좋아 2021. 1. 8. 14:59
반응형
728x170

 

비슷한 문맥에 비슷한 단어는 모여있다를 극복하기 위한 방법 ( 꼭 그런 것은 아니지만서도 기본적인...~~)

 

즉, 순서(Sequence)를 파악하고 가중치를 그에 따라 조정하여 자연어를 처리하기 위한 메커니즘

 

S2S를 모르면 읽고 가야함.

Sequence to Sequence (S2S) 시퀀스 투 시퀀스란?

 

 


 

Word Attention이란 무엇인가?

딥러넹 모델이 특정 벡터에 주목(attetion)하게 만들어 모델의 성능을 높이는 기법임.

 

그렇다면 왜 특정 벡터에 주목하게 만드는 것이 성능을 높여주느냐??

 

이를 알려면 어텐션이 나온 배경부터 이해해야 한다. 

기계 번역을 위한 S2S(Seq 2 Seq) 모델부터 시작되었는데

Sequence to Sequence (S2S) 시퀀스 투 시퀀스란?

https://imgur.com/6mbfPZR

 

위는 A,B,C를 입력으로  받아서 W,X,Y,Z를 출력하는 그림이다. 

+앞부분을 인코더(Encoder) 뒷부분을 (Decoder)라고 한다.

여기서 문제가 뭐냐? 하면은 입력데이터 길이가 길어질수록 성능이 떨어진다는 것이 문제다.

**RNN이라고는 하지만 점점 loss 가 발생한다. -> S2S에서 마지막 HS만 사용하기 때문에 문제가 생김

 

 

다시 말하자면 W는 A,B,C 모두 관련되어 있는 단어가 아님에도

우리는 입력이 A,B,C 니까 같은 비중으로 W 생각해봐야지? 하고 수행하다가

좋지 않은 결과를 가져오는 것을 말한다.

 

 


 

그래서 어떻게 어텐션으로 이 부분을 해결하느냐??

"어텐션은 Encoder가 입력받아서 벡터로 만든 결과는 디코더가 출력할 때 쓰는 벡터와 유사할 것이다." 라는 가정 하 수행하는 것이다.

?? 무슨소리냐고?

즉 인코더가 만든 모든 HS가 디코더가 Prediction 할 때 도움이 된다는 가정 하에 진행하는 것이다.

 

다시 말하면  매 시점(time step)마다  인코더(Encoder)의 HS를 쭉 훑어보는 것이다.

이 비율을 조정하는 것이 Attetion Score이며 어텐션 메커니즘의 핵심

 


 

어떻게 작동하는건데??

  •    인코더 계산

https://imgur.com/CbQjPWo

 

라고 ratsgo님의 블로그에서 설명하는데.. 나는 저런 그림 못알아듣겠다..ㅠ

 

 

  •    디코더 계산

디코더 또한 설명이 쉽진 않다. 

 

-디코더 예시

 

 

 


 

위의 그림과 설명을 잘 알아듣는다면 여기는 안봐도 되고

내가 다시 나만의 방법으로 설명해보자면..?

 

**닷-프로덕트 어텐션(Dot-Product Attention)이라고 가장 쉽게 어텐션을 정의하는 메커니즘이다.

++어차피 어텐션의 큰 테두리는 같음

여기를 보면 지금 Sooftware에 대해 디코더가 계산하기 위에 인코더의 HS들을 참고하는 그림이다.

즉, 단어를 Prediction 할 때 어떻게 어텐션 메커니즘이 사용되는지를 보여준다.

 

근데 여기서 softmax 함수가 사용된다

 

**softmax 함수는 단어 각각이 출력 단어를 예측할 때 얼마나 도움이 되는지 정도(weight)를 수치화하는 역할이다. (+정규화도 진행함. 입력받는 값들의 합을 1로만듬)

 

 

소프트맥스가 적용된 이후의 도움의 되는 정도 하나의 정보로 담아서 디코더로 전송하는 것이다.

 


하나로 어떻게 만드느냐?? 를 알기 전에 그 전에 어텐션 스코어를 어떻게 구하는지 알고 넘어가자...이거 먼저 설명할 걸 ㅎ

 

위에서 소프트맥스를 통해 얻은 값들은 어텐션 분포(Attention distribution)이라고 한다. Attention score 이후 단계다.

 

어텐션 스코어가 정확히 뭔지 알고 구해보자어텐션 스코어는 디코더가 단어를 예측하려고 할 때 앞선 인코더의 HS들이 지금 디코더의 HS와 얼마나 유사한지 판단하는 수치 값이다.

 

그것이 바로 위에서 녹색 점이다.
**(Dot-product Attention 이기 때문에)

**일반적으로 어텐션 스코어는 디코더의 HS를 전치(transpose)해서 인코더의 HS와 내적(dot product)를 수행한다.

 


 

다시 돌아와서

 

어텐션 스코어를 구할 줄 알고 그를 통해 어텐션 분포를 얻었다.이 후 각 인코더의 어텐션 가중치를 정할 수 있다

( 어텐션 분포를 통해)

하나로 뭉치기 위해서 각 인코더의 HS와 어텐션 가중치를 곱해서 모두 더해준다.++위에선 4개겠지??

 

그 값을 가중치를 곱해서 더한 값이라 해서 Weighted Sum이라고도 부른다. (가중합)

우리는 이 어텐션 값을 Context Vector라고 부르고 Context라고 짧게 부른다.

 

** Seq to Seq 의 Context를 이걸로 대체해서 성능을 향상시킬 수 있다.

 

 


하나로 뭉친 것은 좋다. 어떻게 쓴다고??

 

context vector를 구했으니 디코더의 HS와 결합시켜서 하나의 벡터로 만든다.

이걸 Concatenation이라고 한다. 접합이라는 건데 그냥 진짜 이어붙인다.

 

만든 이 벡터를 예측하는 디코더의 입력으로 사용해

인코더의 정보를 활용하여 예측을 할 수 있게 되는 것이다.

 

(왜 Concatenation을 하는지는 ..? 정확히는 모르겠다.)

 

끗!! ~~ 여기까지만 알고 더 알고싶다면...?

 

마지막으로 어텐션의 종류들~

구하는 방법은 비슷하나 약간씩 차이가 있다.

그리고 수학적 표현 방식도 알아가자 ㅎ

 

Attention(Q, K, V) = Attention Value

어텐션 함수는 주어진 '쿼리(Query)'에 대해서 모든 '키(Key)'와의 유사도를 각각 구한다.

그리고 구해낸 이 유사도를 키와 맵핑되어있는 각각의 '값(Value)'에 반영하고

유사도가 반영된 '값(Value)'을 모두 더해서 반환시켜줌

 

여기서는 이 값을 어텐션 값(Attention Value)이라고 함

 

 

 


lv99.tistory.com/26

ratsgo.github.io/from%20frequency%20to%20semantics/2017/10/06/attention/

wikidocs.net/22893

https://arxiv.org/pdf/1409.0473.pdf

위 링크를 참고했습니다.

728x90
반응형
그리드형