생성형AI

Transformer의 뇌를 깨우는 기술: Absolute vs Rotary Positional Encoding 완전 정복

8353cc 2025. 5. 30. 09:22
728x90
반응형

🔰입문 → ⚙️중급 → 🧠심화

여러분 안녕하세요! 이 블로그는 저 혼자만의 일방통행이 아닙니다 😊
여러분과 함께 고민하고, 성장하고, 뇌를 데우는(!) 공간이에요.
궁금한 주제나 다뤄줬으면 하는 AI 이야기가 있다면
언제든 댓글로 편하게 남겨주세요 💬 지금 이 주제도 누군가의 댓글에서 시작되었을지도?!


🔰 포지셔널 인코딩이 뭐죠? 트랜스포머의 기억을 깨우는 GPS 🧭

Transformer는 RNN처럼 순차적인 구조가 아니기 때문에
"입력 토큰의 순서"라는 중요한 정보를 스스로는 모르고 있습니다.
그럼 문장이 나는 오늘 카레를 먹었다인지
카레를 나는 먹었다 오늘인지… 알 수가 없겠죠? 🍛😵

그래서 등장한 것이 바로 Positional Encoding입니다.
입력 단어 벡터에 위치 정보를 더해주는 기법이죠!

Transformer는 입력 토큰들의 임베딩에 **"이 단어는 몇 번째 위치에 있다"**라는 정보를 더해서
Self-Attention이 문맥의 순서를 파악할 수 있도록 도와줍니다.

대표적인 두 가지 방식이 있는데요,
바로 Absolute Positional EncodingRotary Positional Encoding입니다!


⚙️ Absolute Positional Encoding: 고전적이지만 기본을 다지는 방식

정의: 위치 정보를 절대적인 수치로 인코딩

"이 토큰은 3번째 위치야!" 같은 절대적인 위치 값을 가지고 벡터를 만들어 임베딩에 더합니다.

원리: 사인과 코사인으로 주기성을 표현!

Transformer의 원래 논문에서는 이런 식으로 표현했죠:

import torch
import math

def get_positional_encoding(seq_len, d_model):
    pe = torch.zeros(seq_len, d_model)
    for pos in range(seq_len):
        for i in range(0, d_model, 2):
            pe[pos, i] = math.sin(pos / (10000 ** ((2 * i)/d_model)))
            pe[pos, i + 1] = math.cos(pos / (10000 ** ((2 * i)/d_model)))
    return pe

이렇게 생성된 Positional Encoding은 input embedding에 단순히 더해집니다.

x = input_embedding + positional_encoding

특징

장점 단점

구현이 간단하고 직관적임 문장 길이에 따라 재학습이 필요
위치 간 주기성이 포함되어 있음 길이가 늘어나면 extrapolation 성능 저하

⚙️ Rotary Positional Encoding (RoPE): 회전으로 순서를 기억하다 🌀

정의: 위치 정보를 벡터에 회전 시켜 적용

RoPE는 사인/코사인으로 표현한 각도를 이용해서
쿼리(Q)와 키(K)를 **회전(Rotation)**시켜 위치 정보를 반영합니다.

논문: RoFormer: Enhanced Transformer with Rotary Position Embedding (Su et al., 2021)

원리: 각 위치별로 회전 행렬을 곱해줌

import torch

def apply_rope(x, pos_emb):
    # x: (..., d)
    x1, x2 = x[..., ::2], x[..., 1::2]
    pe_cos, pe_sin = pos_emb[..., ::2], pos_emb[..., 1::2]
    x_rot = torch.cat([x1 * pe_cos - x2 * pe_sin, x1 * pe_sin + x2 * pe_cos], dim=-1)
    return x_rot

Q, K에 RoPE를 적용한 뒤 dot-product attention을 수행합니다.

Q_rot = apply_rope(Q, pe)
K_rot = apply_rope(K, pe)
attention_scores = Q_rot @ K_rot.transpose(-2, -1)

특징

장점 단점

더 긴 시퀀스에 일반화가 잘됨 구현이 다소 복잡
extrapolation이 뛰어남 Position embedding 자체 시각화가 어려움

🧠 Absolute vs Rotary 비교 총정리 (🔥 실무 핵심 요약 표)

항목 Absolute PE Rotary PE

위치 정보 표현 절대 좌표 회전 기반
학습 방식 고정 or 학습 고정 방식
연장 일반화 좋지 않음 우수함
시각화 해석 직관적 해석 어려움
Self-Attention 적용 더해서 사용 쿼리/키에 적용
적합 모델 GPT-2, BERT 등 LLaMA, GPT-NeoX 등
활용 예 번역, 문서 분류 긴 텍스트 생성, Retrieval

🧠 실제 사용 사례 & 코드 구현 예시

1. RoPE가 쓰인 LLaMA 구조 살펴보기

RoPE는 GPT 계열 모델에서 빠르게 채택되고 있으며 특히 LLaMA 2, 3 시리즈에서는 기본 적용되어 있습니다.

2. RoPE 직접 학습 적용 예시 (🤖 PyTorch)

import torch
from transformers import AutoTokenizer, AutoModel

tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-hf")
model = AutoModel.from_pretrained("meta-llama/Llama-2-7b-hf", trust_remote_code=True)

input_ids = tokenizer("오늘 날씨는 정말 좋다.", return_tensors="pt")["input_ids"]
output = model(input_ids=input_ids)

🔍 위 모델은 내부적으로 RoPE를 Position Encoding으로 사용합니다.


⚙️ 언제 어떤 PE를 써야 할까?

상황 추천 방식

짧고 정형화된 문장 Absolute PE (간단 + 직관)
긴 문서 처리 또는 대규모 Pretraining Rotary PE
구조적으로 반복되는 위치 정보가 중요할 때 Rotary PE
기존 BERT 구조 기반 Absolute PE

🧠 Position Encoding 튜닝 Tip

  • Absolute PE도 학습 가능한 버전(Learnable)을 쓰면 길이 유연성 확보 가능
  • RoPE는 주기 성분의 주파수를 조절하여 적용 범위 변경 가능
  • Long-range Transformer에서는 RoPE + Linear Attention이 강력한 조합!

📘 추가 학습 자료


💡 실무 Tip 요약

  • 긴 시퀀스 입력이 필요하다면 RoPE를 꼭 고려해 보세요.
  • Position Encoding은 단순히 "더하는 것"이 아닙니다.
    Attention score 계산 방식 자체에 영향을 주므로 성능에 직접적인 영향이 큽니다.
  • Pretrained 모델을 쓸 땐 해당 모델의 Position Encoding 방식 확인은 필수!
    내 데이터 길이에 맞는지 꼭 체크하세요. (안 맞으면 모델이 바보가 됩니다 🙈)

🤖 결론: 위치 정보는 Transformer의 ‘공간 감각’이다

Transformer가 공간 지각을 갖게 하는 핵심 기술,
바로 이 Positional Encoding입니다.

절대적인 위치냐, 회전된 상대적 위치냐 —
상황에 따라 다르지만, 지금 이 순간에도 RoPE는 긴 문서 속에서 뱅글뱅글 돌며
Transformer의 이해력을 높이고 있습니다.

이렇게 똑똑한 AI를 우리도 똑똑하게 다뤄야겠죠? 😉


여러분, AI가 세상을 어떻게 바꾸고 있는지
이렇게 작은 기술 하나에서도 느껴지지 않으신가요?
앞으로도 함께 공부하면서 서로 이웃이 되어
AI와의 관계를 한층 더 깊게 만들어가요.
댓글로 궁금한 주제나 의견, 언제든 기다리고 있을게요! 💬


#transformer #포지셔널인코딩 #absolutePE #rotaryPE #RoPE #LLM기초 #딥러닝 #딥러닝블로그 #AI교육 #자연어처리 #GPT #LLaMA #RoFormer #트랜스포머구조 #인공지능기초 #코드예제 #RoPE튜닝 #논문리뷰 #실무팁 #학습자료 #PyTorch #Transformer이해 #AI블로그 #위치정보 #Transformer순서 #딥러닝공부 #자연어처리기술 #LLM학습 #transformers코드 #로터리인코딩 #GPT구조

728x90
반응형