위치마다 다른 벡터가 필요하다면, 모두 미리 저장해야 할까?
앞에서는 단어의 의미 벡터에 위치 벡터를 더했습니다. 이제는 그 위치 벡터 자체를 어떻게 만들지 생각해 볼 차례입니다.
위치 벡터를 하나씩 저장하는 방법은 불편하다
가장 단순한 방법은 각 위치의 벡터를 미리 만들어 표에 저장하는 것입니다. 하지만 문장이 길어질수록 저장해야 할 벡터도 계속 늘어납니다.
벡터를 저장하지 말고 규칙으로 만들면 어떨까?
모든 답을 저장한다
1번째 벡터, 2번째 벡터, 3번째 벡터를 위치마다 하나씩 준비합니다.
필요할 때 계산한다
위치 번호를 규칙에 넣으면 그 위치에 맞는 벡터가 자동으로 만들어집니다.
규칙적으로 변하는 파도를 떠올려 보자
바닷가의 파도는 계속 움직입니다. 같은 높이에만 머물지 않고 위아래로 변하지만, 완전히 무작위로 움직이는 것도 아닙니다.
시계바늘도 같은 원리로 움직인다
시계바늘은 시간이 지날수록 계속 움직입니다. 위치는 매 순간 달라지지만 움직임에는 일정한 규칙이 있습니다.
사인과 코사인이 위치 표현에 잘 맞는 이유
규칙적으로 변한다
위치가 한 칸 이동할 때 값이 갑자기 무작위로 바뀌지 않고 일정한 규칙에 따라 움직입니다.
필요한 위치를 계산할 수 있다
10번째든 10,000번째든 위치 번호를 공식에 넣어 그 자리의 값을 계산할 수 있습니다.
서로 다른 위치를 구별할 수 있다
여러 속도로 움직이는 파도를 함께 사용하면 각 위치마다 다른 숫자 조합이 만들어집니다.
위치를 움직이면 벡터도 달라진다
슬라이더를 움직여 위치 번호를 바꿔 보세요. 위치가 달라질 때마다 여러 숫자가 서로 다른 속도로 변합니다.
빠르게 변하는 숫자들
가까운 위치의 작은 차이를 빠르게 구분하는 데 도움을 줍니다.
천천히 변하는 숫자들
더 넓은 범위에서 위치의 흐름을 구분하는 데 도움을 줍니다.
파도 하나만 쓰지 않고 여러 속도의 파도를 함께 사용한다
한 가지 파도만 사용하면 일정한 시간이 지난 뒤 같은 값이 반복될 수 있습니다. 그래서 Transformer는 빠르게 변하는 파도와 천천히 변하는 파도를 함께 사용합니다.
빠른 파도
짧은 간격으로 위아래가 바뀝니다.
느린 파도
더 긴 간격으로 천천히 변합니다.
공식은 복잡해 보여도 하는 일은 단순하다
실제 Transformer는 위치 번호를 사인과 코사인 함수에 넣어 위치 벡터의 각 숫자를 계산합니다.
여기서 “어떤 값”을 서로 다르게 설정하면 어떤 숫자는 빠르게 변하고 어떤 숫자는 천천히 변합니다. 그 결과 한 위치를 여러 관점에서 표현할 수 있습니다.
모든 Transformer가 지금도 같은 방식만 사용하는 것은 아니다
원래 Transformer 논문에서는 사인과 코사인으로 위치 벡터를 계산하는 고정형 Positional Encoding을 소개했습니다. 이후 모델들은 학습 가능한 위치 임베딩이나 다른 위치 표현 방법도 사용합니다.
이번 페이지에서 기억할 것
- 위치마다 다른 벡터가 필요합니다.
- 모든 위치 벡터를 하나씩 저장하지 않고 규칙으로 계산할 수 있습니다.
- 사인과 코사인은 값이 규칙적으로 변하는 함수입니다.
- 빠른 파도와 느린 파도를 함께 사용하면 위치마다 다른 숫자 조합이 만들어집니다.
- 그 숫자 조합이 위치 벡터가 됩니다.
- 위치 벡터는 의미 벡터에 더해져 Transformer 입력으로 들어갑니다.