본문 바로가기
논문으로 현업 씹어먹기

LSTM Attention 이해하기 - 어텐션 기초

by Yoo Sung Hyun 2021. 4. 19.
728x90

Attention 예제 소스가 있는 git

github.com/YooSungHyun/attention-time-forecast.git

 

YooSungHyun/attention-time-forecast

attention으로 시계열 예측은 할 수 없을까. Contribute to YooSungHyun/attention-time-forecast development by creating an account on GitHub.

github.com

실무 데이터 적용을 목적으로 했던 소스여서, 중요한 부분은 다 날리고, 딱 중요한 model architecture 부분만 살려두었다.

주석도 세세하게 다 달아놨으니, 이해할겸 보면 정말 도움 많이 되리라 생각된다.

 

최초로 attention을 이해하기위해 봤던 레퍼런스

glee1228.tistory.com/3

 

밑바닥부터 이해하는 어텐션 메커니즘(Attention Mechanism)

glee1228@naver.com 며칠 전부터 포항공대 한보형 교수팀과 구글 콜라보의 논문인 Large-Scale Image Retrieval with Attentive Deep Local Features, 이른바 DELF(Deep Local Feature) 로 잘 알려진 논문을 보기..

glee1228.tistory.com

밑바닥부터 이해하는 어텐션 메커니즘.pdf
3.53MB

내가 이해하기위해 끄적끄적한 것도 같이 올려본다.

내가 Reconstruction Auto Encoder를 설명하면서, hidden_state와 cell_state를 잘 이해해야, attention을 이해할 수 있다고 한적이 있는데, 해당 아티클에도 역시 hidden_state와 cell_state에 대한 설명이 잘 나와있다.

이해가 잘 안된다면, 한 아티클을 계속 보는 것도 방법이겠지만, 여러 아티클을 찾아보면서 그 사람들의 설명을 종합하다보면 답이 나올때도 많다.

 

해당 아티클은 되게 깊은듯 하면서도 간단하게, 차근차근 순서대로 attention을 설명하고 있다.

내가 진행한 부분에서는 multi-head까지는 진행하지 않았으므로, (추후에 BERT에서 다루겠다.) 해당 아티클은 현재 기준에서는, 8 Page까지만 봐도 무관하며, 핵심은 6 Page에 나와있다.

 

encoder의 output을 decoder 매 time-step마다 확인하자!!!!

어떤 일련의 과정을 통해, (각 과정은 attention 방법의 기준이 된다.)

encoder에서 나온 값들을, decoder에서 매 횟수마다 확인해가며, 예측값을 결정하자! 라는 것이다.

 

마치, 오픈북 테스트와 같다.

1번 문제를 풀고, 2번 문제를 풀때, 2번 문제와 가장 연관성 있었던 부분을 책에서 찾는 것이다.

그 다음 3번 문제를 풀때는 3번 문제와 가장 연관성 있었던 부분을 찾고...

즉 찾는 오픈북은 인코더의 hidden output, 질문은 decoder의 input, 그리고 정답은 decoder의 output이 되시겠다.

 

이렇게 설명하면 이해가 쉬운것이,

오픈북 테스트에서 내가 매우 과거에 배운게 헷깔려서 문제를 못풀 리가 있을까?

즉, long term dependency가 해결된다는 장점이 있다.

 

그렇다고 단점이 없을까?

오픈북을 해야할 책이 3000장 짜리 일때와, 30장 짜리 일때의 문제풀이 속도가 같을 수 있을까?

1 stage attention에서는 잘 느끼지 못했는데, 2 stage로 쌓게되니까, encoder와 decoder의 time-series가 무척 긴 경우, (200개 이상 씩 될때.) 매 step마다 찾아나가서 결정하다보니 느려지는 경향이 있다.

필자는 이 부분 때문에 결국 현업에서 Reconstruction Auto Encoder를 사용중이다.

 

그러면 이제 막연해지기 시작한다.

그냥 encoder-decoder layer 쌓는것은 어렵지 않은데, 어떻게 encoder를 매번 확인시켜가며 학습을 시킬 수 있겠는가?

 

결과부터 얘기하자면, 내적을 구해서 유사도를 점수로 바꾸어, 특성값에 가중합 시키는 것으로 특징에 대한 값을 실제 보정시켜버린다.

 

이에 대한 내용은 다음장에서 행렬의 내적을 시작으로 이야기를 풀어보기로 하자.

728x90

댓글