Attention은 가중평균을 통해서 문맥정보를 제공하는 방식이다.
이 글의 시작은 DeeprETA라는 논문에서부터였다. DeeprETA는 Uber에서 사용하는 시간예측 알고리즘으로, Post Processing에 최적화된 모델이다. 즉 Uber의 경우 배차를 하고 Routing을 하는 시점에서 기본적인 예상시간을 계산한다. 이후에 실제 상황을 감안해서 보정을 하는 과정을 거치는데 이 아키텍처 상에서 저자는 Feature간의 Interaction을 반영하기 위해 Linear Self Attention을 활용한다. 이 시점에서 나는 Linear Attention을 잘 이해하고 있지 못하였기 때문에 Attention에 대해서 정리하기 시작하였다.
Attention 매커니즘은 딥러닝, 특히 자연어 처리 분야에서 매우 중요한 개념임에도 불구하고 현재 하고 있는 시간 예측 분야에서는 크게 관심을 두고 있지 않았는데, Feature의 상호작용을 처리했다는 측면에서 관심을 갖게 되었다.
Attention은 기본적으로 가중평균을 계산하는 방법이다. 이는 문맥을 반영하는 데 핵심적인 역할을 하기 위해 활용된다. 예를 들어 문장에서 특정 단어가 다른 단어들과 어떻게 관련되는지를 파악하기 위해, 각 단어의 중요도에 따라 가중치를 부여한다. 이 때 Transformer에서는 이전 Decoder 출력값 뿐만 아니라, Encoder의 Hidden State에 대한 정보도 고려하여 계산을 한다.
Attention을 언급할 때 항상 등장하는 정보는 Query, Key, Value인데, Query는 번역할 정보, Key는 직전의 출력값이라고 이해하면 되고, Value는 가중치가 반영된 정보라고 봐주면 된다. 이 때 가중치는 내적을 통해서 Query와 Key간의 유사도를 계산하는데, 이 때 유사도를 계산하는 방식은 생각보다 부하가 상당하기 때문에 DeeprETA 저자는 Linear Self Attention을 결합한다.
여기서 유사도를 구한다는 Query, Key를 결합한다는 자체를 Feature관점에서 본다고 하면 Feature간의 Interaction을 구하는 것으로 Attention을 활용할 수 있다. DeeprETA의 저자는 Attention을 이렇게 본질에 기반해서 더 다양한 쓰임새로 확장해나간다.
이렇게 Attention의 매커니즘을 이해하고, 이를 고안한 사람이 처음에 왜 생각했는지 이해하는데 주력한다면, 사실 생각보다 많은 곳에서 Attention을 도구로서 문제에 접근할 수 있겠다는 생각이 들었다. 이 녀석만 그럴까?