# Positional Encoding (sin) ## 수식 $ PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right) $ ## 표기법 | 기호 | 의미 | |------|------| | $PE_{(pos, 2i)}$ | 짝수 차원 위치 인코딩 값 | | $pos$ | 토큰의 위치 인덱스 | | $i$ | 임베딩 차원 인덱스 | | $d_{model}$ | 모델 임베딩 전체 차원 | | $\sin(\cdot)$ | 주기적 위치 정보를 부여하는 사인 함수 | | $10000^{2i/d_{model}}$ | 차원별 주파수를 조절하는 스케일 항 | | $2i$ | 짝수 차원 위치 | | $PE$ | 최종 positional encoding 행렬 | ## 직관적 설명 $W^O$: 최종 출력 변환 행렬 Positional Encoding 위치 정보를 인코딩으로 주입해 순서 정보 보존 (RNN의 순차 처리 대체): $d_{\text{model}}$: 모델의 전체 임베딩 차원 $i$: 임베딩 차원의 인덱스 $pos$: 시퀀스 위치 (0, 1, 2, ...) ## 구체적 예시 $d_{model}=8$, $pos=3$, $i=0$이면 분모는 $10000^0=1$이다. 따라서 $PE_{(3,0)}=\sin(3)$가 된다. $i$가 커질수록 분모가 커져 주파수가 낮아지고, 더 완만한 위치 변화를 표현한다. 이 덕분에 서로 다른 차원이 서로 다른 위치 해상도를 담당한다. ## 응용 & 실제 구현 입력 임베딩에 positional encoding을 더해 순서 정보를 주입한다. 학습형 positional embedding 대신 고정형 sinusoidal encoding은 extrapolation에 유리한 경우가 있다. 구현은 보통 사전에 길이 `max_len`만큼 행렬을 계산해 버퍼로 저장한다. 긴 문서 처리에서는 rotary embedding이나 ALiBi와 비교 대상으로 자주 등장한다. ## 관련 개념 - [[ai/algorithms/transformer/concepts/transformer]] ## 참고 자료 Vaswani et al., *Attention Is All You Need* (2017). [[ai/algorithms/transformer/concepts/transformer]]