트랜스포머

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

📋 문서 버전

이 문서는 2개의 버전이 있습니다. 현재 최신 버전을 보고 있습니다.

트랜스포머

개요

트랜스포머(Transformer)는 자연어처리LP) 분야 혁신적인 영향을 미친 딥러닝 아키텍처로, 2017년글과 빌런드 연구소의 연구자들이 발표한 논문 "Attention is All You Need"에서 처음 소개되었습니다. 기존의 순차적 처리 방식을 기반으로 한 순환신경망(RNN)이나 합성곱신경망(CNN)과 달리, 트랜스포머는 어텐션 메커니즘(Attention Mechanism)에만 의존하여 입력 시퀀스의 각 단어 간의 관계를 병렬적으로 파악함으로써 처리 속도와 성능을 크게 향상시켰습니다.

트랜스포머는 번역, 텍스트 생성, 질문 응답, 요약 등 다양한 자연어처리 과제에서 뛰어난 성능을 보이며, 이후 BERT, GPT, T5 등의 선도적인 언어 모델의 기반이 되었습니다. 현재는 자연어처리 분야의 사실상 표준 아키텍처로 자리 잡고 있습니다.


구조와 동작 원리

트랜스포머는 인코더(Encoder)와 디코더(Decoder)로 구성된 인코더-디코더 구조를 가지고 있으며, 각각은 여러 개의 동일한 레이어로 쌓여 있습니다. 이 구조는 입력 문장을 인코딩하고, 이를 바탕으로 출력 문장을 생성하는 데 사용됩니다.

1. 인코더 (Encoder)

인코더는 입력 시퀀스를 고차원 벡터 표현으로 변환합니다. 각 인코더 레이어는 다음과 같은 두 개의 주요 서브층(sub-layer)으로 구성됩니다:

  • 자기 주의(self-attention) 레이어: 입력 시퀀스의 각 단어가 다른 단어들과 어떤 관계를 가지는지를 계산합니다. 예를 들어, 문장 "The cat sat on the mat because it was tired."에서 "it"이 "cat"을 가리키는지 여부를 판단하는 데 사용됩니다.
  • 피드포워드 신경망(Feed-Forward Neural Network): 자기 주의를 통해 얻은 표현을 추가로 처리하는 완전 연결 네트워크입니다.

각 서브층 이후에는 레이어 정규화(Layer Normalization)와 잔차 연결(Residual Connection)이 적용되어 학습 안정성을 높입니다.

2. 디코더 (Decoder)

디코더는 인코더의 출력을 바탕으로 출력 시퀀스를 생성합니다. 디코더 레이어는 세 개의 서브층으로 구성됩니다:

  • 마스크된 자기 주의 레이어: 출력 시퀀스를 생성할 때 미래의 단어를 참조하지 못하도록 제한하는 자기 주의입니다. 예를 들어, 두 번째 단어를 생성할 때는 첫 번째 단어까지만 참조할 수 있습니다.
  • 인코더-디코더 어텐션 레이어: 인코더의 출력과 디코더의 현재 상태를 결합하여 관련 정보를 집중합니다.
  • 피드포워드 신경망: 최종 처리를 수행합니다.

디코더도 인코더와 마찬가지로 잔차 연결과 레이어 정규화를 사용합니다.


핵심 기술: 어텐션 메커니즘

트랜스포머의 핵심은 멀티헤드 어텐션(Multi-Head Attention)입니다. 이 메커니즘은 입력 시퀀스 내의 모든 위치에서 정보를 동시에 참조할 수 있게 하며, 병렬 처리를 가능하게 합니다.

스케일드 닷 프로덕트 어텐션 (Scaled Dot-Product Attention)

입력으로 쿼리(Query), 키(Key), 값(Value) 벡터를 받아 다음 수식으로 어텐션 가중치를 계산합니다:

[ \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V ]

여기서 (d_k)는 키 벡터의 차원입니다. 나누기는 소프트맥스의 기울기를 안정화하기 위한 조정입니다.

멀티헤드 어텐션

여러 개의 어텐션 헤드를 병렬로 실행하여 다양한 표현 공간에서 정보를 추출한 후, 이를 결합합니다. 이는 모델이 단어 간의 다양한 관계(예: 문법적, 의미적)를 동시에 학습할 수 있게 합니다.

# 간단한 멀티헤드 어텐션 구현 (의사코드)
class MultiHeadAttention:
    def __init__(self, d_model, num_heads):
        self.num_heads = num_heads
        self.d_k = d_model // num_heads
        self.W_q = Linear(d_model, d_model)
        self.W_k = Linear(d_model, d_model)
        self.W_v = Linear(d_model, d_model)
        self.W_o = Linear(d_model, d_model)

    def forward(self, Q, K, V):
        Q, K, V = self.W_q(Q), self.W_k(K), self.W_v(V)
        Q, K, V = split_heads(Q), split_heads(K), split_heads(V)
        attention_output = scaled_dot_product_attention(Q, K, V)
        return self.W_o(concat_heads(attention_output))


장점과 한계

장점

  • 병렬 처리 가능: RNN과 달리 순차 처리가 필요 없어 학습 속도가 빠릅니다.
  • 장거리 의존성 학습 우수: 문장 내 멀리 떨어진 단어 간 관계도 효과적으로 포착합니다.
  • 확장성: 레이어를 깊게 쌓거나 모델 크기를 늘려 성능을 지속적으로 향상시킬 수 있습니다.

한계

  • 메모리 사용량 큼: 전체 입력 시퀀스에 대한 어텐션을 계산하므로 긴 시퀀스에서 메모리 소모가 큽니다.
  • 학습 데이터 의존성: 방대한 데이터가 필요하며, 소규모 데이터에서는 과적합 우려가 있습니다.

관련 모델 및 발전

트랜스포머는 이후 다음과 같은 주요 언어 모델의 기반이 되었습니다:

모델 특징
BERT 인코더 기반, 양방향 어텐션, 사전 학습 + 파인튜닝
GPT 디코더 기반, 단방향 어텐션, 텍스트 생성 중심
T5 인코더-디코더 전체 사용, 텍스트를 모두 입력-출력 텍스트로 변환

이들 모델은 트랜스포머의 기본 구조를 활용하여 각각의 과제에 최적화된 방식으로 발전하였습니다.


입력 데이터 처리 및 임베딩

트랜스포머는 텍스트 데이터를 직접 처리할 수 없으므로, 수치형 벡터로 변환하는 전처리 과정이 필수적입니다.

토큰화 및 임베딩

먼저 입력 문장은 토큰화(Tokenization) 과정을 통해 최소 의미 단위인 토큰으로 분리됩니다. 분리된 각 토큰은 임베딩 층(Embedding Layer)을 통해 $d_{model}$ 차원의 연속적인 벡터로 변환됩니다. 이 과정에서 단어의 의미적 유사성이 벡터 공간상의 거리로 표현됩니다.

포지셔널 인코딩 (Positional Encoding)

RNN과 달리 트랜스포머는 모든 토큰을 동시에 병렬로 처리하므로, 단어의 위치 정보(Sequential Order)를 알 수 없습니다. 이를 해결하기 위해 임베딩 벡터에 위치 정보를 더해주는 포지셔널 인코딩을 사용합니다.

트랜스포머는 서로 다른 주기를 가진 사인(sine)과 코사인(cosine) 함수를 사용하여 위치 값을 생성합니다:

$$PE_{(pos, 2i)} = \sin(pos / 10000^{2i/d_{model}})$$ $$PE_{(pos, 2i+1)} = \cos(pos / 10000^{2i/d_{model}})$$

  • $pos$: 토큰의 절대적 위치
  • $i$: 차원 인덱스
  • $d_{model}$: 모델의 임베딩 차원

이러한 함수적 접근은 모델이 학습 데이터에서 보지 못한 더 긴 시퀀스에 대해서도 상대적인 위치 관계를 일반화하여 학습할 수 있게 합니다.

아키텍처의 세부 구성 요소

모델 차원 및 피드포워드 네트워크

트랜스포머의 모든 서브층은 일관된 모델 차원($d_{model}$)을 유지합니다. 각 어텐션 층 이후에는 포지션 와이즈 피드포워드 네트워크(Position-wise Feed-Forward Network)가 배치됩니다.

이 네트워크는 두 개의 선형 변환과 하나의 ReLU 활성화 함수로 구성됩니다: $$\text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2$$ 일반적으로 내부 은닉층의 차원은 $d_{model}$보다 훨씬 크게 설정(예: $d_{model}=512 \rightarrow d_{ff}=2048$)하여 모델의 표현력을 확장합니다.

레이어 정규화 (Layer Normalization)

학습의 안정성과 속도를 높이기 위해 각 서브층의 출력에 레이어 정규화(Layer Normalization)를 적용합니다. 트랜스포머에서는 '잔차 연결 $\rightarrow$ 레이어 정규화' 순서로 이어지는 $\text{LayerNorm}(x + \text{Sublayer}(x))$ 구조를 사용하여 기울기 소실 문제를 방지하고 최적화를 가속화합니다.

데이터 흐름 및 텐서 차원 변화

입력 데이터가 모델을 통과하며 겪는 텐서의 차원 변화는 다음과 같습니다. (단, $B$: 배치 크기, $N$: 시퀀스 길이, $d_{model}$: 모델 차원)

단계 입력 텐서 차원 연산/층 출력 텐서 차원 비고
입력 $(B, N)$ Token Embedding $(B, N, d_{model})$ 정수 인덱스 $\rightarrow$ 벡터
위치 부여 $(B, N, d_{model})$ Positional Encoding $(B, N, d_{model})$ 요소별 덧셈(Element-wise sum)
어텐션 $(B, N, d_{model})$ Multi-Head Attention $(B, N, d_{model})$ $Q, K, V$ 연산 후 결합
FFN $(B, N, d_{model})$ Feed-Forward Net $(B, N, d_{model})$ $d_{model} \rightarrow d_{ff} \rightarrow d_{model}$
최종 출력 $(B, N, d_{model})$ Linear $\rightarrow$ Softmax $(B, N, \text{vocab\_size})$ 다음 토큰 확률 분포 생성

어텐션 메커니즘의 심층 이해

Q, K, V의 직관적 비유

어텐션 메커니즘의 쿼리(Query), 키(Key), 값(Value)은 정보 검색 시스템과 유사합니다. - Query (Q): "내가 지금 찾고자 하는 정보가 무엇인가?" (현재 단어의 관점) - Key (K): "나는 어떤 정보를 가지고 있는가?" (다른 모든 단어들의 색인/특징) - Value (V): "내가 제공할 실제 내용은 무엇인가?" (실제 의미 정보)

소프트맥스와 어텐션 맵

$QK^T$ 연산을 통해 계산된 유사도 점수에 소프트맥스(Softmax) 함수를 적용하면, 합계가 1이 되는 확률 분포 형태의 어텐션 맵(Attention Map)이 생성됩니다.

Attention Map Example (예시 이미지: 단어 간의 관계 강도를 히트맵으로 표현한 어텐션 맵)

이 맵에서 높은 값을 가진 영역은 모델이 특정 단어를 처리할 때 어떤 다른 단어에 집중(Attention)하고 있는지를 시각적으로 보여줍니다.

기술적 한계: 복잡도 분석

트랜스포머의 가장 큰 기술적 제약은 시퀀스 길이($n$)에 따른 자원 소모량입니다.

시간 및 공간 복잡도

셀프 어텐션 과정에서 모든 토큰 쌍 간의 유사도를 계산해야 하므로, 연산량과 메모리 사용량은 다음과 같은 복잡도를 가집니다: - 시간 복잡도: $O(n^2 \cdot d)$ - 공간 복잡도: $O(n^2)$

즉, 입력 문장의 길이가 2배가 되면 연산량과 메모리 요구량은 4배(제곱)로 증가합니다. 이로 인해 매우 긴 문서(Long-context)를 처리할 때 메모리 부족(Out-of-Memory) 문제가 발생하며, 이를 해결하기 위해 Linear Attention, FlashAttention, 또는 Sparse Attention과 같은 최적화 기법들이 연구되고 있습니다.

참고 자료

트랜스포머는 자연어처리의 패러다임을 바꾼 혁신적인 기술이며, 현대의 인공지능 언어 모델 대부분이 그 영향 아래에서 발전하고 있습니다.

AI 생성 콘텐츠 안내

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

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

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