본문 바로가기
자연어처리(NLP)/LLM(Large Language Model)

[LLM][기초] LLM의 Positional Encoding (absolute, relative, learned)

by Hyen4110 2024. 9. 11.

1. Positional Encoding이 필요한 이유?

기본적으로 Transformer 모델은
(1) 입력 시퀀스를 병렬적이면서 독립적으로 처리하고
(2) 어텐션 모듈은 위치 정보를 잡아낼 수 없기 때문에
단어의 순서에 따라서 달라지는 의미를 구분할 수 없습니다.

즉, 아래 두 입력 시퀀스의 차이를 구분할 수 없습니다.

"The dog chased the pig"
"The pig chased the dog"

따라서, 위치 정보를 추가해주는 Positional Encoding 작업이 필요합니다.
즉, 아래 그림에서
dog에 해당하는 단어 임베딩에
2번째 위치를 의미하는 위치 임베딩을 넣어주는 작업을 진행합니다.
이때, 위치 정보를 어떤 식으로 만들어내느냐에 따라 아래 2가지 유형으로 구분됩니다.

[출처] https://www.youtube.com/watch?v=o29P0Kpobz0&t=165s

2. Positional Encoding의 유형

Positional Encoding의 유형은 크게 아래 2가지로 분류됩니다.

1) Absolute Positional Encoding
2) Relative Postiional Encoding

1) Absolute Positional Encoding

Absolute Positional Encoding은 말 그대로 하나의 위치에 대해서 고유한 독립적인 벡터를 갖습니다.
Absolute Positional Encoding 방법은 크게 2가지로 나눌 수 있는데


(1) 데이터로부터 학습하는 방법
(2) Sinusoidal function을 통해 구하는 방법

위 2가지의 성능은 대체적으로 유사합니다.

[출처] https://www.youtube.com/watch?v=o29P0Kpobz0&t=165s

 

그러나, Absolute Positional Encoding가 지닌 한계점이 있습니다.
각각의 위치에 대한 임베딩 벡터는 서로 독립적인데,

바로 옆에 위치한 토큰 간의 연관성(position1 - position2)을
멀리 떨어진 토큰 간의 연관성(position1 - position500)보다 중요하다는 것을 인코딩 할 수 없습니다.
토큰 간의 상대적인 거리에 따른 중요도는 대해서는 반영해낼 수 없다는 한계점이 있습니다.

[출처] https://www.youtube.com/watch?v=o29P0Kpobz0&t=165s

이러한 Absolute Positional Encoding의 한계점을 개선하기 위해 제안된 방법론이
Relative Positional Encoding 입니다.

 

2) Relative Positional Encoding

Relative Positional Encoding, 상대적 위치 인코딩에서는

"각 토큰의 위치가 몇번째냐"는 절대적인 위치 정보가 아닌,
"두 토큰 간의 거리가 얼마나 되냐"는 상대적인 위치정보를 인코딩하는 방법입니다.

[출처] https://www.youtube.com/watch?v=o29P0Kpobz0&t=165s

 

즉 Relative Positional Encoding은 하나의 토큰이 아닌 두 토큰(토큰 쌍,pair)에서 정의가 됩니다.
따라서, Absolute Positional Encoding에서 단어 임베딩 벡터에다가 위치 임베딩 벡터를 더하는 방식은 더 이상 사용할 수 없습니다.
그렇다면 Relative Positional Encoding에서는 어떻게 위치 정보를 입력할까요?

 

"T5 Model"

T5모델을 대표 예시로 살펴보겠습니다.
T5에서는 상대적인 위치정보가 담긴 부동소수점으로 표현되는 bias matrix로 정의하고, 이를 어텐션 메커니즘에 입력합니다.

예를 들어 입력 시퀀스가 "abcd"라고 했을때
b1은 a-b, b-c, c-d와 같이 위치가 거리 1만큼 떨어진 토큰 간의 상대적 위치를 의미합니다.
b3는 a-d와 같이 위치가 거리 3만큼 떨어진 토큰 간의 상대적 위치를 의미합니다.
즉 거리가 n만큼 떨어진 토큰 간의 거리는 b(n)으로 동일한 값을 갖습니다.

[출처] https://www.youtube.com/watch?v=o29P0Kpobz0&t=165s

하지만 이러한 T5 모델로 대표되는 Relative Positional Encoding이 갖고있는 단점은
_추론 속도(inference speed)가 매우 느리다_는 것입니다.
아래 표에서 Absolute Positional Encoding인 Sinusoidal에 비하여

T5모델은 속도가 매우 느린데,
특히 입력 시퀀스 길이가 길어질수록 더욱 더 차이가 나는 것을 확인할 수 있습니다.

[출처] https://www.youtube.com/watch?v=o29P0Kpobz0&t=165s

그렇다면, 왜 속도가 느린 것일까요?
그 이유는 상대적 위치를 반영하는 프로세스에 있습니다.

Absolute Positional Encoding에서는 위에서 언급했다시피
단어 임베딩에 위치 임베딩을 더하는 반면,
T5의 Relative Embedding에서는 셀프 어텐션 layer에
query-key 쌍에 매번 위치 임베딩을 추가하는 작업이 필요합니다.

또한 토큰을 생성할 때마다, 위치 임베딩을 다시 구해야하는 작업을 수행해야합니다.
이 때문에 연산을 효율적으로 만드는 Key-Value 캐시를 이용하는것도 어렵게 됩니다.
이런 한계점 때문에, LLM 모델에서는 사실상 많이 사용되지 않는 방법론이었습니다.

 

Rotary Positional Embedding

이러한 Relative Positional Embedding의 한계점을 개선한것이 Rotary Positional Embedding입니다.
Rotary Positional embedding에서는 거리에 따라서 bias를 추가하는 것이 아니라
거리만큼 위치 임베딩 벡터를 회전하는 것입니다.

[출처] https://www.youtube.com/watch?v=o29P0Kpobz0&t=165s

입력 시퀀스가 "dog" 일 때, 위치 임베딩 벡터가 xi라고 한다면
"The dog"에서의 dog의 위치 임베딩은 1만큼의 위치에 위치하므로 Θ만큼 회전을 하고,
"The pig chased the dog"에서의 "dog" 위치 임베딩은 4번째 위치에 위치하므로
4Θ만큼의 회전하여 임베딩 벡터를 구합니다.

입력 시퀀스에 토큰이 추가로 생성 되더라도,
앞에 위치한 토큰의 임베딩을 변경하지 않아도 되기 때문에 캐싱이 가능해집니다.

Rotary Position Embedding의 두번째 장점은
두 토큰간의 거리가 유지되는 한, 두 토큰간의 내적값은 동일하다는 것입니다.

"The pig chased the dog"이라는 문장에서도 거리가 3만큼 떨어져있고,
"Once upon a time, the pig chased the dog"이라는 문장에서도 3만큼 떨어져 있기 때문에,
두 벡터간의 각도는 유지가 되므로, 동일한 내적값을 갖게 됩니다.

즉, Absolute과 Relative Positional Encoding을 동시에 가능하게 한다는 장점을 갖게 됩니다.

[출처] https://www.youtube.com/watch?v=o29P0Kpobz0&t=165s

 

 

 

참고자료

https://arxiv.org/pdf/2307.06435

https://www.youtube.com/watch?v=o29P0Kpobz0&t=165s

 

댓글