ML(머신러닝)

DL- Attention Mechanism (주의 집중 기법)

LaBbit 2018. 11. 30. 12:59

0. 개요



사람들은 사진이나, 텍스트를 볼 때 특정 부위를 고해상도(high resolution)로 인식할 수 있습니다. 


'고해상도로 인식한다' 라는 의미는 우리가 이미지를 볼 때 어떤곳을 좀더 선명하게 중점적으로 보고, 나머지 부분은 저해상도, 즉 흐리게 볼 수 있다고 해석할 수 있습니다. 예시로 위의 이미지를 보고 사람들은 빨간색 네모칸 안의 뾰족한 귀, 눈, 몽글몽글한 손을 보고 고양이라고 알 수 있습니다. 이와 반대로 회색 칸의 정보로는 고양이라고 예측하기가 어렵습니다. 여기에서 빨간색 네모칸을 고해상도로 인식한다고 볼 수 있는 것입니다.


마찬가지로, 우리는 하나의 문장 안에서, 가까운 문맥에서 단어 사이의 관계를 설명할 수 있고, 다음 단어를 예측하는데 단어 사이의 상관관계를 분석하여 집중! 하면서 볼 수 있습니다.

아래 문장에서는 빨간색과 사과, 사과와 먹는다가 서로 상관관계가 있지만, 빨간색과 먹는다는 별로 상관관계가 없어 보입니다. 





1. Seq2seq 모델의 문제점?


seq2seq 모델은 입력 시퀀스를 새로운 타겟 시퀀스로 바꿔주는 모델입니다. 여기에서 입력 시퀀스와 타겟 시퀀스는 모두 임의의 길이를 가집니다. (입력과 타겟의 길이가 같을 필요는 없습니다.) 변환 작업으로는 텍스트나 오디오에서 여러 언어 사이의 기계번역, 질문-답변 대화 생성 또는 문법 트리로 문장 구문 분석 등이 있습니다. 


seq2seq 모델은 인코더-디코더 아키텍쳐를 가지고 있습니다.


●인코더 - 입력 시퀀스를 처리하는 부분입니다. 정보를 고정된 길이의 컨텍스트 벡터로 압축을 합니다. 전체 시퀀스의 의미를 잘 요약하주는 역할을 합니다.


디코더 - 디코더는 인코더가 압축한 컨텍스트 벡터로 초기화 해준다음 타겟 시퀀스로 변환해주는 역할을 합니다. 디코더의 처음 상태는 인코더 네트워크의 마지막 상태(state)를 사용한다고 합니다.


인코더와 디코더는 둘 다 LSTM, GRU와 같은 RNN 네트워크 입니다.


여기에서 고정된 길이의 컨텍스트 벡터에 주목할 필요가 있습니다. 전체 문장을 단일 벡터로 처리하기 때문에 문장의 앞 부분의 정보가 희석되는 문제점이 발생합니다. 입력 시퀀스가 길어질 경우에는 long term dependencies 문제가 발생하게 됩니다. 이 문제는 LSTM으로 어느정도 해결할 수 있지만, 여전히 문제가 있다고 알려져 있습니다. 이 문제점을 해결하기 위해 주의 집중 메커니즘(어텐션 메커니즘)이 만들어졌습니다.




2. Attention Mechanism



어텐션 메커니즘은 NMT(기계 번역)에서 문장 소스의 길이가 긴 문장의 기억을 돕기 위해서 만들어 졌습니다. 핵심 아이디어는 기계 번역 모델이 출력단어를 예측할 때 특정 단어를 집중해서 본다는 것입니다. 이것에 관해서는 ratsgo's blog 의 좋은 글이 있어 인용하겠습니다. 


----


예컨대 독일어 “Ich mochte ein bier”를 영어 “I’d like a beer”로 번역하는 S2S 모델을 만든다고 칩시다. 모델이 네번째 단어인 ‘beer’를 예측할 때 ‘bier’에 주목하게 만들고자 합니다. 어텐션 매커니즘의 가정은 인코더가 ‘bier’를 받아서 벡터로 만든 결과(인코더 출력)는 디코더가 ‘beer’를 예측할 때 쓰는 벡터(디코더 입력)와 유사할 것이라는 점입니다.


----(ratsgo's blog)



2-1. Attention Mechanism의 기본 개념


이제 기본 개념에 대해 살펴보겠습니다. 우선 모델은 아래 이미지처럼 생겼습니다.  

 



우선 인코더는 길이 T의 입력 X를 받아 히든 스테이트 벡터 h를 만듭니다. a는 각 출력이 어떤 입력을 더 많이 집중해서 보면 되는지에 대한 가중치 벡터로 모든 a값들을 더하면 1이 됩니다. a를 어텐션 벡터(attention vector)라고도 부를 수 있습니다. 다음 수식들을 보시면 계산과정을 더 자세히 이해할 수 있습니다. 변수와 식이 조금 복잡하여 이해에 도움을 주기위해 색으로 표현했습니다.




디코더의 현재 시간 i의 히든 스테이트이전 시간의 히든 스테이트(벡터) , 이전 시간의 디코더 출력, 현재 컨텍스트 벡터를 입력으로 받아서 구해집니다. 이제 컨텍스트 벡터를 구하는 식을 알아봐야겠죠?




디코더가 i번째 단어를 예측할 때 쓰이는 컨텍스트 벡터는 위의 식으로 정의할 수 있습니다. 인코더의 j번째 열벡터어텐션 확률값(어텐션 벡터)으로 가중합(weighted sum)을 한 것이라고 볼 수 있습니다. Tx는 입력 단어의 길이 입니다. 처음부터 끝까지 모든 단어들을 보고 있다는 점을 알 수 있는 식입니다. 더 들어가서 어텐션 확률값에 대해 알아보겠습니다.  






컨텍스트 벡터를 만들기 위해서는 스코어값이 중요합니다.  스코어값은 디코더가 i번째 단어를 예측할 때 쓰는 이전 시간의 히든 스테이트 벡터인코더의 j번째 열벡터가 얼마나 유사한지를 나타내는 값입니다. 유사도가 높을 수록 높은 값을 나타내고, 낮을 수록 적은 값이 나옵니다. a는 유사도를 잘 뽑아낼 수 있게끔 해주는 역할을 합니다. Bahdanau의 논문에서는 aaligment model이라고 부르며, 단일 은닉 레이어가 있는 피드포워드 네트워크에 의해 매개 변수화 되며 다른 부분과 함께 훈련된다고 합니다(FFNN으로 학습되는 파라미터라고 이해하였습니다.). a는 유사도만 잘 뽑아준다면 다양한 형태로 변형이 가능하며, 오른쪽의 복잡한 수식은 활성함수가 tanh인 aligment model의 예시 입니다. 여기에서 v, W는 학습 파라메터 입니다. 


어텐션 확률값은 스코어값을 소프트맥스 함수를 적용하여 합이 1이 되도록 만들어준 것입니다. 확률값이라고 불리는 이유가 여기에 있습니다. 이제 어텐션을 적용하기 위한 수식들을 알아보았으니, 예시를 통해 인코더와 디코더에서 일어나는 어텐션 메커니즘 계산 과정을 보겠습니다. 



2-2 디코더와 인코더 계산 예시



입력 : 나는 강아지를 정말 좋아한다.

예상 출력 : I really like puppies.



 


인코더가 하는 일은 입력 시퀀스를 받아 그에 해당하는 히든스테이트 벡터를 만듭니다. 위 그림은 bi-directional모델을 가정한 것입니다. 하늘색분홍색 원들로 이루어진 벡터들은 그 결과입니다. 2-1부분의 식에서는 (인코더의 j번째 열벡터) 부분입니다. 그리고 이 벡터들을 차례로 쌓아서 오른쪽의 그림과 같이 히든 스테이트 벡터 행렬을 만듭니다. 


디코더가 하는 일은 인코더의 히든 스테이트 벡터, 이전 시간의 히든 스테이트 벡터, 컨텍스트 벡터를 입력으로 받아 결과값을 출력합니다. 그림을 통해 이해해 보도록 해보겠습니다.



위 그림은 입력 문장 '나는 강아지를 정말 좋아한다'를 받아서 맨처음 단계인 'I'를 출력하는 상태 입니다. 초록색벡터는 어텐션 확률값인코더의 히든스테이트 벡터로 구해진 컨텍스트 벡터 입니다. 어텐션 확률값을 보시면 하얀색에 가까운 부분과 검은색에 가까운 부분이 있는데, 하얀색일 수록 스코어 값이 높은 것을 나타냅니다. 이 부분을 집중하여 보겠다는 의미인거죠. 이제 다음 단어를 예측하는 부분을 보겠습니다. 





'I' 다음 'really'를 예측한 모습을 볼 수 있습니다. 이 전의 출력값 'I'와 (두번째 스코어 값인코더의 히든 스테이트 벡터로 구해진) 컨텍스트 벡터, 그리고 이전 시간의 스테이트 벡터를 이용하여 값을 구한것을 볼 수 있습니다. 두번째 스코어 값을 보면 세 번째 단어인 '정말' 부분이 가장 높은것을 볼 수 있습니다.


주의할 점은 현재 예시는 test 할 때의 과정이라는 점 입니다. 만약 training 하는 과정이라면, 두 번째 상태 입력 값은 첫 번째 상태의 정답인 'I'로 고정되어 있습니다. 만약 모델이 'I'가 아닌 다른 단어를 예측해도 정답인 'I'가 들어가게 되는 것이죠.





위의 이미지는 마지막 계산 과정입니다. 이제 Aligment matrix라 불리는 어텐션 확률값으로 만들어진 이미지를 보겠습니다. 


    

위에서 말했듯이 밝을 수록 더 높은 스코더, 즉 더 많이 집중해서 보았던 부분입니다. 가장 밝은 부분끼리 짝지어 보면 I - 나는 , 강아지를 - puppies , 정말 - really , 좋아한다 - like 로 어텐션 메커니즘이 잘 적용 되었다고 볼 수 있습니다. 


3. 참조 및 출처


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

http://docs.likejazz.com/attention/

https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html?fbclid=IwAR1QpSK0Eqf20b7YADsK9cOiIhvBuF6lStybrN7rr815tbhf2bZEAaeB86U

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

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