위치 인코딩Positional Encoding
자리마다 순서 표시를 붙여 주는 방법
- 위치 인코딩은 조각마다 몇 번째 자리인지를 나타내는 표시를 붙여 주는 일이에요.
- 왜 필요하냐면, 모든 자리를 한꺼번에 보는 방식에는 순서 개념이 아예 없기 때문이에요.
- 표시는 따로 놓이지 않고 원래 내용에 더해져 한 덩어리로 들어가요.
- 정해진 규칙으로 만든 표시를 쓰기도 하고, 학습으로 알아서 정하게 두기도 해요.
- 요즘은 절대 몇 번째인지보다 두 자리가 얼마나 떨어져 있는지를 담는 방식이 널리 쓰여요.
목차
1비유로 이해하기
극장 표에는 좌석 번호가 적혀 있어요. 이 번호가 없다면 어떻게 될까요. 관객은 다 들어와 있지만 누가 앞줄이고 누가 뒷줄인지 알 수 없어요. 사람 수는 같고 얼굴도 그대로인데 순서만 사라지는 거예요. 위치 인코딩은 이 좌석 번호를 표에 적어 주는 일이에요.
번호는 관객과 따로 다니지 않아요. 표 한 장에 좌석 번호와 관람할 사람 정보가 함께 적혀 있죠. 위치 인코딩도 마찬가지로 조각의 내용에 순서 표시를 더해 한 덩어리로 만들어요.
좌석 번호가 붙는 순간 "앞줄 사람이 뒷줄 사람보다 무대에 가깝다" 같은 관계가 생겨요. 번호가 있어야 거리도 앞뒤도 말할 수 있어요.
2자세히 알아보기
순서를 잃어버리는 구조
문장을 한 단어씩 차례로 넘기며 처리하던 예전 방식에는 순서 문제가 없었어요. 처리하는 차례가 곧 순서였으니까요. 대신 느렸어요.
지금 쓰는 방식은 모든 자리가 서로를 한꺼번에 봐요. 덕분에 아주 빨라졌지만 대가가 생겼어요. 모두가 동시에 서로를 보면 누가 먼저 나왔는지 알 수 없어요. "개가 고양이를 쫓았다"와 "고양이가 개를 쫓았다"가 똑같은 낱말 묶음으로 보여요.
그래서 문장을 넣기 전에 순서 표시를 붙여 줘야 해요. 이 표시가 없으면 낱말 순서를 아무리 바꿔도 모델의 결과가 달라지지 않아요.
번호를 내용에 더해요
표시는 조각 옆에 따로 붙는 게 아니에요. 조각의 내용을 담은 숫자 묶음에 같은 크기의 순서 숫자 묶음을 더해서 하나로 만들어요. 그러면 그 자리의 값에는 "무엇인지"와 "몇 번째인지"가 함께 들어 있게 돼요.
더해서 섞어도 괜찮은 이유는 담을 자리가 넉넉하기 때문이에요. 숫자 묶음의 항목이 수백에서 수천 개라, 내용과 순서가 서로 다른 방향으로 자리 잡을 여유가 있어요. 학습을 거치며 모델은 둘을 구분해 읽는 법을 익혀요.
표시를 만드는 두 갈래
처음 제안된 방식은 사람이 정한 규칙으로 표시를 만들었어요. 여러 주기의 파도를 겹쳐 자리마다 다른 무늬가 나오게 하는 식이에요. 학습이 필요 없고, 학습 때 보지 못한 긴 길이에도 그대로 번호를 매길 수 있다는 장점이 있어요.
다른 갈래는 표시 자체를 학습으로 정하게 두는 방식이에요. 자리마다 숫자 묶음을 하나씩 두고 학습 중에 값이 맞춰지도록 해요. 데이터에 맞는 표시를 얻을 수 있지만, 미리 만들어 둔 자리 수를 넘어가면 붙일 번호가 없어요.
절대 번호보다 사이의 거리
몇 번째인지를 그대로 적는 방식에는 약점이 있어요. 같은 문장이 문서 앞쪽에 있느냐 뒤쪽에 있느냐에 따라 번호가 전혀 달라지는데, 정작 중요한 건 "이 낱말과 저 낱말이 몇 칸 떨어져 있는가"인 경우가 많아요.
그래서 요즘은 두 자리의 거리 자체가 계산에 드러나도록 만든 방식이 널리 쓰여요. 자리 번호에 따라 값들을 조금씩 돌려 놓아, 두 자리를 견줄 때 자연히 그 사이의 거리가 반영되게 하는 방법이에요. 앞뒤 어디에 놓이든 같은 간격이면 같은 관계로 읽히니, 긴 글에서 훨씬 안정적이에요.
좌석 수를 넘어가면
학습할 때 본 적 없는 아주 먼 자리 번호가 들어오면 모델이 흔들려요. 극장에 없는 좌석 번호가 적힌 표를 받은 것과 비슷해요. 문장이 갑자기 어색해지거나 앞부분을 놓치는 일이 생겨요.
컨텍스트 윈도우를 넓히는 작업이 단순히 숫자를 키우는 문제가 아닌 이유가 여기 있어요. 표시를 넓은 범위에 맞게 다시 조정하고, 늘어난 길이로 조금 더 학습시켜 주는 과정이 함께 필요해요.
3조금 더 정확하게
위치 인코딩은 각 토큰의 임베딩에 위치 정보를 담은 벡터를 더하거나, 어텐션 계산 단계에서 위치 관계를 반영하는 기법이에요. 처음 제안된 방식은 여러 주기의 사인과 코사인 값을 자리마다 다르게 배치한 고정 방식이었고, 자리마다 학습되는 벡터를 두는 방식도 널리 쓰였어요. 지금 큰 모델들이 많이 쓰는 방식은 질의와 키를 자리 번호만큼 회전시켜 두 자리의 상대 거리가 자연스럽게 반영되게 하는 회전 방식이에요.
비유가 어긋나는 지점도 있어요. 극장 좌석 번호는 정수 하나지만, 위치 인코딩은 자리마다 수백 개의 값으로 된 묶음이에요. 또 좌석 번호는 관객 정보와 따로 적히지만, 위치 인코딩은 내용 값에 더해져 겉으로는 구분되지 않게 섞여요. 무엇보다 극장 좌석은 번호가 겹치면 안 되지만, 위치 표시는 값이 완전히 다르기만 하면 되지 순서대로 커질 필요도 없어요.
4직접 해보기
5흔한 오해
모델이 낱말 순서를 당연히 안다고 생각하기 쉽지만, 실제로는 순서 표시를 따로 붙여 주지 않으면 낱말을 섞어 넣어도 결과가 같아요.
위치 표시가 조각 옆에 따로 붙는다고 여기기 쉽지만, 실제로는 내용 값에 더해져 한 덩어리로 들어가요.
컨텍스트 길이는 설정만 바꾸면 늘어난다고 생각하기 쉽지만, 실제로는 위치 표시를 넓은 범위에 맞게 손보고 추가 학습을 해 줘야 해요.
7한 줄 요약
그러니까위치 인코딩은 극장 좌석 번호처럼 조각마다 몇 번째인지를 표시해 붙여, 순서를 모르는 구조에 앞뒤 개념을 되돌려 주는 방법이에요.
잘못된 내용이나 더 좋은 비유가 있나요? 수정 제안 보내기 · 마지막 수정2026-09-02