AI VIDEO BRIEFING

회전 위치 임베딩 RoPE 원리 정리, 트랜스포머가 토큰 순서를 학습하는 방법 완전 해설

어텐션은 입력 토큰의 순서를 구분하지 못한다. 위치를 정수로 더하는 방식에서 출발해 이진수와 사인파를 거쳐 벡터를 회전시켜 위치를 새기기까지, RoPE가 등장하기까지의 흐름을 차근차근 단계적으로 짚는다.

어텐션은 순서를 모른다: 벡터를 회전시켜 위치를 새기는 RoPE의 원리 영상 대표 이미지

핵심 메시지

  • 어텐션은 순열 등변성을 가져서 입력 토큰의 순서를 바꾸면 출력도 똑같이 자리만 바뀔 뿐, 위치가 달라졌다는 사실 자체를 인식하지 못한다.
  • 위치를 정수로 더하면 벡터의 크기가 폭발해 기울기가 불안정해지고, 이진수로 바꾸면 값이 뚝뚝 끊겨 신경망이 다루기 어려워진다.
  • 사인파 위치 임베딩은 연속성 문제를 해결했지만, 입력에 값을 더하는 방식이라 원래 임베딩이 담고 있던 의미 정보가 훼손된다는 한계가 남는다.
  • RoPE는 더하는 대신 곱하는 방식을 택한다. 임베딩을 두 개씩 짝지어 회전 행렬로 돌려 벡터의 크기는 그대로 두고 각도에만 위치를 새긴다.
  • 차원 위치에 따라 회전 각도가 달라져, 뒤쪽 짝은 빠르게 회전하고 앞쪽 짝은 거의 회전하지 않는다. 이진수의 최하위 비트와 최상위 비트가 보이던 성질과 같은 구조다.

쉽게 이해하기

허깅페이스가 공개한 이 강의는 젬마 4가 도입한 '프룬드 RoPE'를 이해하기 위해 먼저 RoPE 자체를 하루 동안 파고든 기록이다. 발표자 아리트로는 왜 위치 임베딩이 필요한지부터 출발한다. 어텐션과 다층 퍼셉트론은 순열 등변성을 가진 집합 연산이어서, 입력 토큰의 순서를 무작위로 섞으면 출력도 같은 방식으로 섞일 뿐 위치가 바뀌었다는 정보 자체는 남지 않는다. 그는 파이토치 코드로 입력을 임의 순열로 섞은 뒤 어텐션을 통과시켜, 출력이 정확히 같은 순열로 섞인다는 것을 직접 확인한다.

이것이 왜 문제인지는 문장으로 보면 분명하다. 같은 단어라도 문장 안에서 놓인 자리에 따라 가리키는 대상이 달라지는데, 위치 정보가 없으면 모델은 그 둘을 구분할 근거를 잃는다. 그래서 어텐션에 들어가기 전에 입력에 위치의 개념을 심어 넣어야 한다는 결론에 도달한다.

가장 단순한 방법은 위치를 정수로 그대로 더하는 것이다. 그러나 뒤로 갈수록 벡터의 크기가 커져 학습 중 기울기가 폭발할 위험이 생긴다. 정수를 이진수로 바꾸면 크기 문제는 사라지지만 값이 이산적이라 변화가 뚝뚝 끊긴다. 다만 여기서 중요한 관찰이 나온다. 최하위 비트는 빈번하게 켜졌다 꺼지고, 최상위 비트는 좀처럼 바뀌지 않는다는 규칙성이다.

연속적인 표현이 필요하다는 요구에서 2017년 사인파 위치 임베딩이 등장한다. 사인파를 쓰면 이진수와 비슷한 주파수 구조를 유지하면서도 값이 매끄럽게 변한다. 그러나 여전히 입력에 무언가를 더하는 방식이라 벡터의 크기가 바뀌고 원래 의미 정보가 흐려진다는 문제가 남았다. 그래서 발표자는 덧셈이 아닌 곱셈적 접근으로 시선을 옮긴다.

내적 공식을 보면 두 벡터의 크기는 사이각과 분리되어 있다. 질의와 키의 내적에서 크기를 건드리지 않고 각도만 조절하면, 가까운 위치끼리 더 큰 영향을 주고받게 만들 수 있다는 발상이다. RoPE는 임베딩 차원을 두 개씩 짝지어 각 쌍을 회전 행렬로 돌린다. 회전 각도는 차원 인덱스와 위치, 그리고 사인파 임베딩에서 쓰이던 것과 같은 10,000이라는 상수로 결정되며, 그 결과 뒤쪽 짝은 빠르게 회전하고 앞쪽 짝은 거의 회전하지 않는 주파수 구조가 만들어진다.

주요 인사이트

  • 정수에서 이진수, 사인파를 거쳐 회전으로 이어지는 흐름은 서로 다른 아이디어의 나열이 아니라 하나의 문제를 계속 다듬어 온 과정이다. 각 단계는 앞 단계가 남긴 결함을 정확히 하나씩 해결한다.
  • 덧셈에서 곱셈으로 넘어간 것이 RoPE의 결정적 전환이다. 위치를 더하면 벡터의 크기가 흔들려 의미가 훼손되지만, 회전시키면 크기는 보존한 채 각도에만 위치를 담을 수 있다.
  • 회전 각도의 주파수 구조는 이진수 표현의 최하위·최상위 비트 성질을 연속 영역으로 옮겨 놓은 것이다. 세밀한 위치 차이는 빠르게 도는 차원이, 넓은 범위의 위치는 느리게 도는 차원이 담당한다.
  • 구현 관점에서 RoPE 텐서의 헤드 축은 항상 1로 둘 수 있다. 회전은 어느 어텐션 헤드에 들어가는지와 무관하게 동일하므로 브로드캐스트로 처리하면 된다.
  • 회전 행렬을 그대로 행렬곱하는 대신, 곱셈과 덧셈의 조합으로 같은 결과를 얻을 수 있다. 실제 구현이 수식보다 훨씬 가벼워 보이는 이유가 여기에 있다.

자주 묻는 질문

순열 등변성이 왜 문제가 되나요?

어텐션에 입력 순서를 바꿔 넣으면 출력도 같은 방식으로 순서만 바뀝니다. 즉 모델은 순서가 달라졌다는 사실을 표현에 반영하지 못합니다. 같은 단어라도 문장에서의 위치에 따라 의미가 달라지기 때문에, 위치 정보를 따로 넣어 주지 않으면 이를 구분할 수 없습니다.

위치를 그냥 숫자로 더하면 안 되나요?

위치가 커질수록 벡터의 크기가 함께 커져서 학습 중 기울기가 폭발할 위험이 있습니다. 이진수로 바꾸면 크기 문제는 사라지지만 값이 불연속적으로 급격히 변해 신경망이 다루기 어렵습니다. 그래서 연속적인 사인파를 거쳐 회전 방식으로 발전했습니다.

RoPE는 임베딩을 구체적으로 어떻게 다루나요?

임베딩 차원을 두 개씩 짝지어 각 쌍을 2차원 벡터로 보고 회전 행렬로 돌립니다. 회전 각도는 차원 인덱스와 토큰 위치, 그리고 10,000이라는 상수를 조합한 공식으로 정해지며, 각 쌍은 서로 독립적으로 회전합니다.

차원마다 회전 속도가 다른 이유는 무엇인가요?

각도를 정하는 공식이 차원 인덱스에 따라 다른 주파수를 만들기 때문입니다. 그 결과 뒤쪽 차원 쌍은 위치가 조금만 달라져도 크게 회전하고, 앞쪽 쌍은 거의 회전하지 않습니다. 이진수에서 최하위 비트가 자주 바뀌고 최상위 비트가 거의 바뀌지 않던 것과 같은 구조입니다.

원문과 출처

이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.

YouTube 원본 영상 보기 ↗

관련 AI 소식