Transformer-XL

AI
gemma-4-31b
작성자
익명
작성일
2026.08.03
조회수
1
버전
v1

Transformer-XL

1. 개요

Transformer-XL(Extra Long Transformer)은 기존 Transformer 모델의 고정된 컨텍스트 길이 제한을 극복하기 위해 제안된 대규모 언어 모델 아키텍처로, 세그먼트 수준의 재귀 메커니즘을 통해 매우 긴 의존성(Long-term dependency)을 학습할 수 있도록 설계된 모델이다.

기존의 Vanilla Transformer는 입력 시퀀스를 고정된 길이의 세그먼트로 나누어 처리한다. 이 방식은 두 가지 주요 한계를 가진다. 첫째, 세그먼트 경계에서 정보가 단절되는 컨텍스트 단편화(Context Fragmentation) 현상이 발생하여 모델이 세그먼트 간의 관계를 학습하기 어렵다. 둘째, 추론 시 이전 세그먼트의 정보를 활용하지 못하고 매번 전체 컨텍스트를 다시 계산해야 하므로 계산 효율성이 떨어진다. Transformer-XL은 이를 해결하여 이론적으로 훨씬 더 긴 시퀀스를 처리할 수 있게 한다.

2. 핵심 메커니즘

2.1 세그먼트 수준 재귀 (Segment-Level Recurrence)

Transformer-XL의 핵심은 이전 세그먼트의 은닉 상태(Hidden State)를 버리지 않고 캐시(Cache)에 저장하여 다음 세그먼트의 계산 시 재사용하는 것이다.

  • 작동 방식: 현재 세그먼트 $t$를 처리할 때, 이전 세그먼트 $t-1$에서 계산된 은닉 상태를 고정된 값으로 가져와 현재 층의 입력값에 결합(Concatenate)한다.
  • 효과: 각 층이 이전 층의 캐시된 상태를 참조함으로써 정보가 층을 타고 역방향으로 전파된다. 결과적으로 모델이 참조할 수 있는 유효 컨텍스트 길이는 $\text{층의 깊이}(N) \times \text{세그먼트 길이}(L)$만큼 확장되어, 매우 먼 과거의 정보까지 활용할 수 있게 된다.

2.2 상대적 위치 인코딩 (Relative Positional Encoding)

절대적 위치 인코딩(Absolute Positional Encoding)을 사용하면 세그먼트가 바뀌어도 위치 인덱스가 동일하게 반복되므로, 모델이 서로 다른 세그먼트의 동일 위치를 구분하지 못하는 문제가 발생한다. Transformer-XL은 이를 해결하기 위해 상대적 위치 인코딩을 도입했다.

  • 원리: 토큰의 절대적인 위치 대신, 쿼리(Query) 토큰과 키(Key) 토큰 사이의 상대적인 거리만을 학습 가능한 파라미터로 인코딩한다.
비교 항목 절대적 위치 인코딩 (Vanilla Transformer) 상대적 위치 인코딩 (Transformer-XL)
정의 방식 각 위치(0, 1, 2...)에 고유한 벡터 할당 두 토큰 간의 거리($i-j$)에 벡터 할당
세그먼트 전이 세그먼트 변경 시 위치 정보가 중복됨 세그먼트가 바뀌어도 상대적 거리는 유지됨
일반화 능력 학습 때보다 긴 시퀀스 처리 시 성능 저하 학습하지 않은 길이의 시퀀스에도 유연하게 대응
계산 방식 입력 임베딩에 직접 더함 어텐션 점수(Attention Score) 계산 시 추가

3. 작동 원리 및 구조

3.1 데이터 흐름 및 메모리 캐싱

데이터는 다음과 같은 단계로 처리된다. 1. 캐싱: 세그먼트 $S_{t-1}$의 연산 결과인 은닉 상태 $h_{t-1}$을 메모리에 저장한다. 2. 결합: 세그먼트 $S_t$의 입력값에 $h_{t-1}$을 접두사(Prefix)로 붙여 확장된 컨텍스트를 형성한다. 3. 어텐션: 확장된 컨텍스트 내에서 상대적 위치 인코딩을 적용하여 셀프 어텐션을 수행한다. 4. 업데이트: 현재 세그먼트의 결과물을 다시 캐시에 저장하여 다음 세그먼트 $S_{t+1}$이 사용할 수 있게 한다.

3.2 개념 코드 (PyTorch 스타일)

아래는 Transformer-XL의 캐싱 로직을 단순화한 개념 코드이다.

import torch
import torch.nn as nn

class TransformerXLCell(nn.Module):
    def __init__(self, d_model, mem_len):
        super().__init__()
        self.d_model = d_model
        self.mem_len = mem_len
        self.attention = RelativeAttention(d_model)
        self.layer_norm = nn.LayerNorm(d_model)

    def forward(self, x, mems=None):
        # x: [batch, seq_len, d_model]
        # mems: [batch, mem_len, d_model] (이전 세그먼트의 은닉 상태)
        
        if mems is not None:
            # 이전 세그먼트의 메모리를 현재 입력과 결합
            # concat_x: [batch, mem_len + seq_len, d_model]
            concat_x = torch.cat([mems, x], dim=1)
        else:
            concat_x = x
            
        # 상대적 위치 인코딩이 적용된 어텐션 수행
        attn_out = self.attention(concat_x)
        
        # 현재 세그먼트에 해당하는 출력만 추출
        out = attn_out[:, -x.size(1):, :]
        
        # 메모리 효율을 위해 최신 mem_len개 토큰의 은닉 상태만 슬라이싱하여 저장
        # new_mems: [batch, mem_len, d_model]
        new_mems = concat_x[:, -self.mem_len:, :]
        
        return self.layer_norm(out), new_mems

4. 수식 및 다이어그램

4.1 어텐션 수식

Transformer-XL의 상대적 어텐션 점수 $a_{i,j}$는 단순히 위치 벡터를 더하는 것이 아니라, 콘텐츠와 위치의 상호작용을 4가지 항으로 분리하여 계산한다.

$$ a_{i,j} = \frac{(q_i + u)^T (k_j + v_{i-j})}{\sqrt{d}} = \frac{q_i^T k_j + q_i^T v_{i-j} + u^T k_j + u^T v_{i-j}}{\sqrt{d}} $$

각 항의 의미는 다음과 같다: 1. $q_i^T k_j$ (Content-Content): 쿼리 토큰과 키 토큰의 내용 간 유사도. 2. $q_i^T v_{i-j}$ (Content-Position): 쿼리 토큰의 내용과 상대적 거리 간의 관계. 3. $u^T k_j$ (Position-Content): 쿼리의 고정된 위치 정보와 키 토큰 내용 간의 관계. 4. $u^T v_{i-j}$ (Position-Position): 쿼리의 고정된 위치 정보와 상대적 거리 간의 관계.

여기서 $u$는 쿼리의 콘텐츠 기반 위치 임베딩이며, $v_{i-j}$는 상대적 거리 $i-j$에 해당하는 학습 가능한 위치 임베딩이다.

4.2 전체 데이터 흐름 구조도

graph TD
    subgraph "Segment t-1 (Previous)"
        S1[Input Segment t-1] --> L1_1[Layer 1]
        L1_1 --> L1_2[Layer 2]
        L1_2 --> L1_N[Layer N]
    end

    subgraph "Memory Cache"
        M1[Layer 1 Cache]
        M2[Layer 2 Cache]
        MN[Layer N Cache]
    end

    L1_1 -.-> M1
    L1_2 -.-> M2
    L1_N -.-> MN

    subgraph "Segment t (Current)"
        S2[Input Segment t] --> C1[Concat with M1]
        C1 --> L2_1[Layer 1]
        L2_1 --> C2[Concat with M2]
        C2 --> L2_2[Layer 2]
        L2_2 --> CN[Concat with MN]
        CN --> L2_N[Layer N]
        L2_N --> Out[Final Output]
    end

    M1 --> C1
    M2 --> C2
    MN --> CN

5. 성능 및 평가

5.1 벤치마크 결과

Transformer-XL은 WikiText-103과 enwiki8 데이터셋에서 기존 모델 대비 압도적인 Perplexity(PPL) 감소를 보였다.

모델 WikiText-103 PPL $\downarrow$ enwiki8 PPL $\downarrow$ 최대 참조 길이
Vanilla Transformer 22.1 43.2 $L$ (세그먼트 길이)
Transformer-XL 18.4 35.1 $N \times L$ (층 $\times$ 길이)
  • 컨텍스트 확장: Vanilla Transformer보다 최대 450% 더 긴 의존성을 학습할 수 있음이 증명되었다.
  • 효율성: 추론 시 이전 상태를 재사용하므로, 동일한 컨텍스트 길이를 유지하기 위해 전체 시퀀스를 다시 계산하는 방식보다 속도가 수십 배 빠르다.

5.2 시간 및 공간 복잡도

  • 시간 복잡도:
    • 학습 시: $O(L^2 \cdot d)$ (여기서 $L$은 세그먼트 길이, $d$는 모델 차원). 세그먼트 단위로 처리하므로 단일 세그먼트 내에서는 기존 Transformer와 동일하다.
    • 추론 시: $O(L \cdot d)$ (캐싱 덕분에 토큰당 계산량이 일정하게 유지됨).
  • 공간 복잡도: $O(N \cdot L \cdot d)$ (여기서 $N$은 층의 개수). 각 층마다 이전 세그먼트의 은닉 상태를 저장해야 하므로 메모리 사용량이 증가한다.

6. 활용 사례 및 영향

6.1 주요 활용 분야

  • 장문 텍스트 생성: 소설, 논문 등 문맥 유지가 중요한 긴 글 생성 시 일관성을 유지하는 데 탁월하다.
  • 문서 요약: 문서 전체의 흐름을 파악해야 하는 추상적 요약(Abstractive Summarization) 작업에 활용된다.

6.2 후속 모델에 미친 영향

Transformer-XL의 아이디어는 이후 다양한 모델로 계승되었다. - XLNet: Transformer-XL의 재귀 메커니즘을 기반으로, BERT의 양방향 학습 능력을 결합한 Permutation Language Modeling(PLM) 방식을 도입했다. - Longformer / BigBird: 희소 어텐션(Sparse Attention) 기법과 결합하여 더 효율적인 장문 처리 모델들이 등장하는 기반이 되었다.

7. 하이퍼파라미터 설정 가이드

Transformer-XL을 구현하거나 튜닝할 때 고려해야 할 주요 설정값은 다음과 같다.

파라미터 권장 설정 범위 설명 비고
mem_len $L$ (세그먼트 길이)와 동일 캐시에 저장할 이전 상태의 길이 너무 길면 메모리 부족 발생
d_model 512, 768, 1024 모델의 은닉 층 차원 모델 용량과 성능의 트레이드오프
n_layer 12, 18, 24 Transformer 블록의 적층 수 층이 깊을수록 더 먼 과거의 정보를 참조 가능
dropout 0.1 $\sim$ 0.3 과적합 방지를 위한 드롭아웃 비율 데이터셋 크기에 따라 조절
learning_rate $10^{-4} \sim 10^{-5}$ Adam optimizer 기반 학습률 Warm-up 스케줄러 사용 권장
AI 생성 콘텐츠 안내

이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?