HyperAI초신경

회전 위치 임베딩(RoPE)

회전 위치 임베딩(RoPE)은 제목의 논문입니다.Roformer: Rotray 위치 임베딩 기능이 있는 향상된 변압기"상대적 위치 정보 종속성을 자기 주의에 통합하고 변압기 아키텍처의 성능을 향상시킬 수 있는 위치 인코딩 방법"이는 Llama, Baichuan, ChatGLM, Qwen 등을 포함하되 이에 국한되지 않는 대규모 모델에서 널리 사용되는 위치 인코딩입니다. 컴퓨팅 리소스 제한으로 인해 대부분의 현재 대규모 모델은 더 짧은 컨텍스트 길이로 학습됩니다. 추론 중에 사전 학습 길이가 초과되면 모델의 성능이 크게 저하됩니다. 그 결과, RoPE 길이 외삽법을 기반으로 한 많은 연구가 등장하여 대규모 모델이 사전 학습 길이를 넘어서도 더 나은 결과를 얻을 수 있도록 하는 것을 목표로 합니다. 따라서 RoPE 기반 모델의 길이 외삽을 위해 RoPE의 기본 원리를 이해하는 것이 중요합니다.

RoPE의 기본 원리

RoPE의 기본 원리는 각 위치를 길이와 방향이 위치 정보와 관련된 회전 벡터로 인코딩하는 것입니다. 구체적으로, 길이가 n인 시퀀스에 대해 RoPE는 각 위치 i를 회전 벡터 pe_i로 인코딩합니다. 이는 다음과 같이 정의됩니다.

pe_i = (sin(i오메가), 코스(i)오메가))

여기서 오메가는 회전 벡터의 주파수를 제어하는 하이퍼파라미터입니다.

RoPE의 장점

RoPE를 독특하게 만드는 것은 모델의 자기 주의 메커니즘에 명시적인 상대적 위치 종속성을 원활하게 통합하는 기능입니다. 이러한 역동적인 접근 방식에는 세 가지 장점이 있습니다.

  • 시퀀스 길이의 유연성: 기존의 위치 임베딩은 일반적으로 최대 시퀀스 길이를 정의해야 하므로 적응성이 제한됩니다. 반면, RoPE는 매우 유연합니다. 임의의 길이의 시퀀스에 대해 즉석에서 위치 임베딩을 생성할 수 있습니다.
  • 토큰 간 종속성 감소: RoPE는 토큰 간의 관계를 모델링하는 데 매우 효과적입니다. 토큰이 시퀀스에서 서로 멀어질수록 RoPE는 자연스럽게 토큰 간의 토큰 종속성을 줄입니다. 이러한 점진적인 쇠퇴 패턴은 인간이 언어를 이해하는 방식과 더욱 일치합니다.
  • 향상된 자기 주의력: RoPE는 선형 자기 주의 메커니즘에 상대적 위치 인코딩을 제공하는데, 이는 기존의 절대 위치 인코딩에는 존재하지 않는 기능입니다. 이러한 개선을 통해 토큰 임베딩을 더욱 정확하게 활용할 수 있습니다.

회전 인코딩 구현(에서 가져옴) 로포머

기존의 절대 위치 인코딩은 문맥에 관계없이 단어가 3, 5 또는 7 위치에 나타나도록 지정하는 것과 같습니다. 대조적으로,RoPE를 사용하면 모델이 단어 간의 관계를 이해할 수 있습니다.이는 단어 A가 단어 B 뒤, 단어 C 앞에 자주 등장한다는 것을 인식합니다. 이러한 동적 이해는 모델의 성능을 향상시킵니다.

RoPE 구현

RoPE(회전 위치 인코딩)의 코드를 분석하여 구현 방법을 이해해 보겠습니다.

  • precompute_theta_pos_frequencies 이 함수는 RoPE의 특수 값을 계산합니다. 먼저 정의하세요 theta 제어하기 위한 하이퍼 매개변수회전의 진폭. 값이 작을수록 회전도 작아집니다. 그런 다음 계산을 사용합니다.그룹 회전 각도theta . 이 함수는 또한 시퀀스의 위치 목록을 생성하고 위치 목록과 회전 각도의 외적을 구하여 회전 각도를 계산합니다.각 위치를 회전해야 하는 양. 마지막으로, 이러한 값을 고정된 크기의 극좌표 형태의 복소수로 변환합니다. 이는 위치와 회전을 나타내는 암호와 같습니다.
  • apply_rotary_embeddings 이 함수는 숫자 값을 취하고 회전 정보를 추가합니다. 먼저 값을 입력합니다마지막 차원은 다음과 같이 나뉩니다.실제 부분과 가상 부분을 나타냅니다.. 그런 다음 이러한 쌍을 하나의 복소수로 결합합니다. 다음으로, 기능미리 계산된 복소수를 입력값으로 곱합니다., 회전을 효과적으로 적용합니다. 마지막으로 결과를 다시 실수로 변환하고 데이터를 재구성하여 추가 처리를 위해 준비합니다.

참고문헌

【1】https://www.bolzjb.com/archives/PiBBdbZ7.html