Knowledge/Vision

Positional embedding (직관적 이해)

침닦는수건 2023. 9. 13. 22:15
반응형

Transformer 구조가 트렌드인 만큼 transformer 구조 내 핵심 기능 중 하나인 positional embedding에 대한 연구도 많이 진행되고 있다. 초창기 token에 position 정보를 넣어주기 위해서 sinusoidal function을 이용한 positional encoding을 사용했었는데 이제는 learnable 형태로 넣는 positional embedding이 더 효과적이라는 것이 밝혀져 embedding을 알아야 한다. 따라서 이 글에서는 positional embedding의 예시를 몇가지 짚어보면서 흐름을 잡을 수 있도록 정리한다.

 

이전 글 : 2023.03.10 - [Knowledge] - Positional encoding

 

 

Prerequisites

positional information을 네트워크에게 왜 제공을 해야하느냐? 다시 짚어보면 위 문장들의 단어를 하나하나 transformer 네트워크에 넣어주는데 MLP로 시작하기 때문에 feature가 서로 섞인다. 그러면 위와 같은 세 문장은 의미가 전혀 다르지만 feature 상에서 구분력이 낮아지는게 정상이다. 따라서 position이 다름을 네트워크에게 인지시키는 과정이 꼭 필요하다.

Absolute positional embedding

absolute postional embedding은 절대적으로 문장 내의 순서를 표현하는 feature 하나를 정의한 뒤 이를 input feature에 더해주는 형태다. 직관적으로 이해가 쉽고 구현도 쉬워 많이 쓰인다. sinusoidal function으로 만드는 positional encoding도 이 범주에 속한다고 볼 수 있고 learnable feature를 그냥 더 해주는 것이 대표적이다. 두 방식의 차이는 실험적으로 크지 않다고 한다. 

 

단점으로는 절대적 문장 내 순서를 feature로 표현하기 때문에 문장의 최대 길이를 알아야 한다. 최대로 설정한 길이 이상의 문장이 들어올 경우 대응이 안된다. 

추가적으로 positional embedding끼리 independent한데, 이럴 경우 position 1-2 간 거리와 position 1-500 간 거리가 큰 차이가 없다. 직관적으로는 1-2가 feature 상에서도 가깝고 1-500가 멀어야 하는데 말이다. feature만 보고 position 간 상대 거리를 가늠할 수 없는게 단점이다.

 

Relative positional embedding

그래서 등장한 것이 relative positional embedding이다. 문장 길이에 제한을 받지 않도록 만든 아이디어다. 절대적 위치가 아닌 단어 pair 단위로 상대 거리를 embedding해주는 방식이다. 역시나 learnable feature 이므로 그냥 만들면 된다.

이렇게 상대 거리를 embedding하도록 하려면 Absolute positional embedding(APE)와 같이 구현할 수가 없다. 왜냐면 위 그림처럼 APE는 input에 그냥 더해주면 그만이지만, Relative positional embedding(RPE)는 서로 token끼리 곱해지고 상호작용하는 과정에 조합에 맞추어서 그때 그때 넣어줘야 하기 때문이다. 따라서 위 그림처럼 model 안으로 들어가있다.

그때 그때 넣어줘야 조합에 따라 넣어줘야 한다는 것이 구현 난이도를 높일 것 같지만 사실은 쉽다. token들을 일렬로 세운다음 Query, Key로 분배해서 matrix multiplication하는 과정을 거치는데 이 과정에서 matrix 형태로 만든 relative positional embedding matrix를 더해주면 그만이기 때문이다.

 

장점은 확실하다. 의도했던 대로 문장 길이의 제한을 받지 않는다는 장점이 있다. 

단점은 속도가 느리다는 점이다. 매 block마다 계속 더해주기 때문에 gradient 때문이 연산량이 더 늘어나 속도가 느려진다.

 

Rotary positional embedding ( Absolute + Relative )

APE와 RPE의 장점을 합치고 단점을 보완하기 위해 Rotary positional embedding이 등장했다. 이게 지금은 가장 유명한 듯하다. 내용은 단어 feature를 회전시키는 방식으로 positional information을 부여하는 것이다. 

 

만약 dog이 1번째라면 theta만큼 1번 회전, 2번째라면 2번회전과 같은 방식이다. 이럴 경우 회전 각도를 보고 절대적으로 어느 위치에 있는지 알 수 있다. (APE같은 특성) 

동시에 두 단어를 pair로 보았을 때, 두 단어의 상대적 위치는 회전된 각도 차이를 보면 된다. (RPE같은 특성) 문장 길이가 달라지더라도 상대적인 단어 거리는 유지됨을 그림을 통해 알 수 있다.

구현은 역시나 APE처럼 입력에 넣어줄 순 없고 model 안에 넣어주는 식이며 더하는 방식이 아니라 곱하는 방식이다. 위 예시는 2차원일 때 예시인데 QK 곱하는 부분의 앞에 rotation matrix를 곱해주는 방식이다.

 

N차원일 경우는 좌측 그림과 같이 block matrix를 곱해주면 되는데 이부분이 zero elements가 많으므로 naive multiplication보다는 우측과 같이 vector multiplication + addition으로 분리해서 다루면 연산량 이득을 가져갈 수 있다. (RPE의 연산량 증가 문제를 약간 해결한 셈)

 

각 포지션마다 positional embedding 값 간의 거리를 서로 비교해보면 위 그래프처럼 나오는데, 가까우면 dot product 값이 크고 멀면 dot product 값이 작게 나오는 것을 볼 수 있다. (APE에 embedding 간 거리가 실제 단어 간 거리와 맞아떨어지지 않는 문제 해결)

 

참고 영상

https://www.youtube.com/watch?v=o29P0Kpobz0 

 

 

반응형

'Knowledge > Vision' 카테고리의 다른 글

Spherical harmonic 직관적으로 이해하기  (0) 2023.11.23
Static library와 dynamic library 차이  (0) 2023.09.14
Image flickering  (0) 2023.08.17
Trifocal tensor 이해하기  (0) 2023.03.30
Swish activation function  (0) 2023.03.10