본문 바로가기

boostcamp AI tech/boostcamp AI

Positional Encoding

728x90
 

Transformer - Multi-Head attention

1. Multi-head attention self-attention을 유연하게 더 확장한 multihead attention에 대해 알아본다. 그림에서 보면 중첩된 블럭들이 보인다. self-attention에서는 한번 Q, K, V쌍이 만들어지고 attention 블럭을 한번

jsdysw.tistory.com

LLM들의 약점으로 손꼽히는 것 중 하나는 long sequence를 잘 처리하지 못한다는 것이다. 이에 따라 positional encoding에 대한 연구들도 많이 이루어지고 있고 mamba는 아예 transformer구조 자체를 바꾸려는 시도도 하고 있다.

 

지난 시간 간략히 알아본 positional encoding에 대해 더 알아보자.

I go home에서 {I, home}의 연산결과와 home go I에서 {home, I}의 연산결과는 동일하고 결국 순서정보를 고려하지 않는 셈이 된다.

rnn이야 순서대로 embedding 벡터가 들어가서 모델이 자연스럽게 순서정보를 학습할 수 있지만 transformer는 그렇지 않다.

그래서 각 토큰 embeding vector에 위치 정보를 나타내는 positional vector를 더해준다. 

거의 모든 LLM은 이 positional embedding이 들어간다. positional vector를 만드는 몇가지 방법론들을 알아보자.

 

1. Absolute positional encoding -> Normalizing -> binary

토큰의 순서로 만드는 방법이다. sequence가 길어지면 word embedding에 더해지는 값도 커져서 단어의 의미를 희석한다는 단점이 있다.

그래서 값이 너무 커지지 않게 크기를 Normalize하는 방법이 이어서 나왔다. 하지만 여전히 input sequence에 따라 더해지는 positional vector가 달라진다는 문제가 있다.

그래서 이번에는 2진수를 활용했다. 단어의 embedding size가 위 그림처럼 3이라면 0, 1, 2, 3,...,7을 2진수로 바꿔서 더해주는 것이다. 하지만 [0,0] -> [0,1] -> [1,0] 이 Position vector 값들이 연속적이지 않은 문제들이 있었다.

 

2. Continuous binary vector

sine 주기를 사용해서 연속적인 값을 만들어내게 되었다.

주기가 다른 n개의 sine함수들로 positional vector를 만든다. 다만 일정 step마다 positional vector가 동일해지는 문제가 있다.

 

3. Sinusoidal Position Embedding

그래서 sine, cosine을 결합해서 지금 transformer가 사용하는 positional embedding이 등장했다.

히트맵을 보면 position마다 독립적이면서도 연속적인 embedding vector를 만들어냈음을 알 수 있다.

하지만 여기서도 지적되는 문제점이 있다. 

만약 모델이 최대 250 길이로 학습이 되었다면 모델은 251길이의 position embedding을 본적이 없다. 이게 모델이 추론할때 문제가 될 수 있다고 한다.

 

4. Relative Positional Encoding

그래서 토큰들의 상대적인 위치를 고려하는 embedding 방식이 제안되었다.

이순신은 조선 중기의 무신이다. 라는 문장에 absolute position vector로 0, 1, 2, 3을 차례로 더했다.

상대적 거리란, '이순신은'에 대해서 attention을 계산할때 다른 토큰에 1, 2, 3을 위치정보로 더했다면 '조선'에 대해서는 중기의 무신이다 라는 토큰들에게 1, 2위치 정보를 더해주는 것이다. (정확한 설명은 아니고 이런 느낌이다 정도로 이해하자)

T5에서는 이 relative positional encoding을 사용했다.

보면 자신과 거리가 멀수록 값이 크다

position embedding의 최대값을 넣어주면 위 그림처럼 31 길이 이상으로는 새로운 position embedding vector값이 나오지 않는다.

 

5. Rotary Embedding

relative positional embedding 방식 중 하나이다. 벡터가 m=1, m=2, ... 순으로 빙 돌면서 만들어진다. 만약 모델이 m=7길이의 문장을 받았다고 하더라도 이미 모델은 벡터간 차이를 학습했기 때문에 m=6길이에 대해 학습했다고 하더라도 더 유연하게 대처할 수 있게 된다. 

 

 

 

728x90
반응형