Attention(어텐션)

2021. 8. 17. 22:12IT Study/Ai

이번 포스팅은 seq2seq의 개선에 이어 Decoder위주로 설명을 할 것이다. 이번 장에서 완성되는 어텐션은 seq2seq처리에서 아주 강력한 기능을 보이고 있으며 그 구조도 상당히 직관적이다.

 

 

어텐션을 짧게 표현하자면 넘어오는 데이터중 필요한 정보만 "주목"시키는 기술이다. 이 말을 이해하기 위해서 천천히 구조를 파악해보도록 하자.

 

 


Encoder개선

 

 

Encoder부분 Attention은 전 포스팅에 글을 올려놨지만 이번 글이 어텐션이 주제인 만큼 간단하게 짚고 넘어 가겠다.

 

 

Encoder파트 attention의 주된역할은 고정길이 벡터 개선이였다. 시계열 데이터가 커지면 커질 수록 고정길이 벡터는 입력데이터를 표현하기 점점 어려워 지기 때문이다. 그렇기에 입력데이터에 따른 크기의 유동적인 조절이 필요하였다.

 

 

이런 식으로 각 부분의 LSTM의 은닉벡터를 한곳에모아 hs로 만들어 decoder에 넘겨주는 것이 전포스팅 까지의 내용이였다. 

 

 

하지만 Decoder로 넘어가기 전에 이 hs의 각 행이 의미하는 것을 좀 짚고 넘어갈 필요성이 있다. 예를 들어 hs의 1행이 의미하는 값은 어떤 것일까. 물론 "나"라는 시계열 1번째 데이터일 것이다. 그러면 hs의 2행은 무엇을 의마할까 그 것은 "나","는"이라는 2개의 입력데이터 이면서 LSTM의 구조적 특성으로 인해 "는"이 좀 더 큰 비중을 차지할 수 있다.(물론 이 해석은 모델의 목적에 따라 충분히 바뀔 수 있다. ) 그러면 마지막 행은 모든 입력값을 가지고 있지만 "이다"가 가장 큰 비중을 차지할 가능성이 높다는 것이다.

 

 

만약 번역 작업을 위한 모델이라 가정했을 때 이 경우에는 단어의 1:1매칭이 어느 때보다 중요해진다. 그렇기에 앞에서 말한 "각 단어의 큰 비중을 가진 행"이 hs가 되는 것이다. 이는 너무 자명하다.

 

 

이 특징을 기억하고 이제 Decoder로 넘어가 보자.

 

 


Decoder - Attention

 

 

이제 진정한 어텐션의 기술을 살펴볼 차례이다. 사실 Encoder에서 설명한 것은 attention을 구현하기 위한 구조적 장치일 뿐이지 어텐션 그 자체는 아니다.

 

 

어텐션의 목적은 hs라는 Encoder에서 은닉벡터가 들어왔을 때 그 은닉벡터를 선택집중해서 연산에 활용하는 것이다. 이는 각 시계열마다 사용되며 결국 hs자체는 모든 시계열에 사용된다. (Peeky와 비슷한 구석이 있죠?)

 

 

그렇다면 은닉벡터의 선택과 집중은 어떤 방식으로 구현이 될까? (필자는 답을 보기전 CNN의 마스크를 생각하면서 데이터 크기의 마스크를 만들어 곱셈을 해주는 것을 생각을 했다.)

정답은 Decoder의 LSTM출력값과 Encoder에서 넘어오는 hs 2개의 내적을 구해주는 것이다. 

자연어 처리에서 벡터의 내적은 단어사이의 유사도라고 많은 사람들이 알고 있을 것이다. 이 유사도를 기반으로 은닉벡터의 선택과 집중을 해주는 것이다. 즉 hs에서 입력값과 가장 비슷한 벡터를 뽑아오는 것이다.

 

 

 

이런식으로 계산을 하게 되면 s가 구해지고 이 s를 정규화 시켜주면 우리가 원하는 값을 얻을수 있다.(a라고 칭하겠다.)

위 그림같은 경우에는 첫번째 행이 가장 비슷한 벡터겠다. 이러한 작업을 "얼라인먼트"라고 한다.

이 s의 값 하나하나는 입력값에대한 hs각각의 유사도이다.

 

 

여기서 이제 구해진 a를 활용할 차례가 됬다. 이 부분은 상당히 간단하다. hs각 단어벡터 에 구해진 a를 곱해주고 그 값들을 모두 더해주면 끝이다. 말로설명하면 이해가 잘 안될 수도 있으니 그림으로 보자.

 

이렇게 계산을 하게되면 a의 비중이 높은 "나"가 제일많이 검출되며 나머지 단어도 버리지 않고 가져갈 수 있다. 심지어 계산 그래프로 검증,유도 할 때도 상당히 편해지게 된다! 이렇게 구해진 c가 어텐션의 출력값이다.

 

 

이제 이 구조들을 합쳐보자.

밑 부분에서 h인 LSTM은닉 벡터가 들어오면 행렬의 곱 계산을 위해 Repeat(브로드캐스팅으로 대체 가능 - 아마다르 곱을 위해)을 해주고 내적을 구해준뒤(X) 한 곳으로 모아준다.(SUM)이 값을 정규화하고(Softmax) 다시 행렬의 곱연산을 위해 Repeat(브로드캐스팅으로 대체 가능 - 아마다르 곱을 위해)을 해준뒤 곱연산(a를 통한 선택)을 해주고 한 곳에 모아주면(SUM) 출력 값인 것이다.

 

 

그 외로 역전파에 관해 써보자면 Repeat와Sum의 구조는 반대의 성질을 띄고 있어 역전파의 모습도 반대의 모습을 가지고 있다. 

hs는 분기노드를 지나 2개로 나뉜다. (+연산)

 

 


어텐션 행렬의 형상

 

 

그림으로 먼저 보자.

이번 어텐션은 행렬의 형상이 어렵지는 않은데 몇가지 반드시 확인해야할 점이 2가지 정도 존재한다.

첫번 째는 아마다르 곱이다. 아마다르 곱이란 원소별 1:1대응 곱셈이라고 포스팅에 기술 해놨었다. 이 아마다르 곱을 하기위해 h, a를 hs에 형상에 맞게 repeat해주는 것이 첫번 째 포인트이다. 

 

 

두번 째는 Sum연산과 Repeat연산의 축이다. 무슨 축을 기준으로 덧셈을 하고 반복을 할지는 시스템상에서 너무나도 당연하지만 그 구조를 제대로 파악하지 못하면 헷갈릴 수 있는 부분이기 때문이다. 이 파트는 위에 써놓은  그림과 설명을 보고 직접 해석해 Repeat한뒤 아마다르곱으로 1:1대응 곱을 해보면 무엇을 더해야 하는지 금방 보이게 된다.

 

 


미니배치에 관한 고찰

 

 

잠시 어텐션의 모델 적용을 보기전에 미니배치의 관련해 조금 쓰고 싶은 내용이 있다. 정확히는 입력값과 마스크가중치인 a에 관련해서이다.

 

 

위를 보면 a의 형상이 N*T인 것을 볼 수가 있다. 이는 한 시계열에 존재하는 a이다. (a는 시계열마다 공유되지 않으며 사용될 때마다 계산 된다.)

여기서 T가 뭘 의미하는지부터 생각해보자 T는 hs로부터 확인가능한데 바로 입력데이터의 갯수이다. 이 T로부터 각 입력데이터가 얼마나 중요한지 계산을 하게 되는 것이였다. 

 

 

그러면 N은 항상 봐왔듯이 미니배치의 개수였다. 미니배치란 결국 한번에 얼마나 처리하는가 였는데 이는 한번에 입력되는 단어의 수이다.

 

 

여기서 생각할 수있는건 N은 "병렬처리"숫자라고 하면 아주 좋은 설명이겠다. 어텐션의 특성으로 인해 시계열 T중에서 가장 주목한것을 골라야하니 N의 숫자가 얼마나 크던 결국 비교대상,나열대상은 T인 것이다. 이 구조를 이해했다면 a의 행렬이 2차원이여도 충분히 납득 가능할 것이다.

 

N끼리의 데이터는 결국 다른 시계열데이터일 것이기 때문이다.

 

 

그 외에도 미니배치를 생각할 때 병렬처리의 개념만 생각하고 있으면 상당히 논리들이 쉽게 이해가 가는 경우가 많다.

 

 


어텐션을 적용한 Seq2seq

 

 

먼저 전체적인 모습을 확인해 보자.

위 그림은 지금까지 했던 모든 것을 이어놓은 모습이다. 딱히 어려운 점이 보이지는 않다.

대신 한가지 특이한 점은 LSTM에서 Attention으로 이어지는 부분외에 Affine으로 이어지는 부분이 하나더 존재하는데 이는 본인이 생각하기에 Attention으로 가는 값은 어텐션위주의 연산에많은 사용이 이루어 지고있다고 생각한다. 하지만 우리가 최종적으로 원하는 값은 어텐션의 결과값이 아니다. 어텐션의 결과값은 보조적인 정보값이다.(연관도 선택값)

그렇기에 LSTM의 가장 본질적인 정보를 Affine계층에 이어주기위해 가지를 하나더 뻗어 정보를 전달한다.

 

 

이과정에서 +연산이 이루어 지는데 어텐션의 결과값과 LSTM의 은닉벡터값이다. 이는 직관적으로 보면 메인 정보에 연관도 선택값을 "추가"해준다고 볼 수 있겠다.

 

 

 


마무리

 

 

지금까지 seq2seq와 그 개선점들을 보았다. 그중에서 가장 중요한 어텐션을 이번 장에 알아보았고 Reverse,Peeky,Attention을 사용해 seq2seq를 사용한다면 상당히 강력한 모델이 만들어질 것이다. 물론 자연어처리에모델에서는 하이퍼 파라미터의 정밀도가 상당히 영향을 많이 준다는 것 같다. 

 

 

지금까지 알아본 개선점 뿐만아니라 LSTM겹치기, DropOut등 다른 기술들도 활용한다면 충분히 더 강력한 모델을 만들 수 있다고 기대된다. 

 

 

 

 

본 글은 한빛미디어 "밑바닥부터 시작하는 딥러닝2"를 기반으로 제작되었습니다.

'IT Study > Ai' 카테고리의 다른 글

Seq2Seq 개선 (Reverse, Peeky, Attention-어텐션)  (0) 2021.08.14
seq2seq(Sequence to Sequence)  (0) 2021.08.04
LSTM(Long Short-Term Memory)  (0) 2021.07.30
RNNLM(RNN Language Model)  (0) 2021.07.28
RNN, Truncated BPTT, Time RNN  (0) 2021.07.27