본문 바로가기
실전 개발 노트/개발 가이드

RNN·LSTM·GRU·Transformer 차이: 어텐션 Q·K·V까지

by 쑥쑥자라나라 2026. 7. 30.
728x90

문장은 단어 순서가 바뀌면 의미도 달라진다. 시계열도 앞선 값과 현재 값의 관계가 중요하다. RNN·LSTM·GRU는 상태를 다음 시점으로 전달하고, Transformer는 각 위치가 필요한 위치를 직접 참고한다. 차이는 “기억한다”와 “집중한다”의 구현 방식에 있다.

이 글의 목표: RNN 계열의 순환 구조부터 Transformer의 Q·K·V 계산까지 한 흐름으로 이해하고, 어떤 상황에서 어떤 구조를 선택할지 판단한다.

긴 문장에서 멀어진 정보를 순차 상태·게이트 기억·어텐션이 처리하는 차이

같은 시퀀스를 순차 상태·게이트 기억·병렬 어텐션으로 처리하는 방식 비교

1. 시퀀스는 입력과 출력 길이부터 본다

구조입력 → 출력예시
One-to-One하나 → 하나고정 특성으로 클래스 예측
One-to-Many하나 → 여러 시점이미지 설명 문장 생성
Many-to-One여러 시점 → 하나리뷰 감성 분류
Many-to-Many여러 시점 → 여러 시점번역, 개체명 인식

같은 Many-to-Many라도 출력이 입력과 같은 길이인지, 한 문장을 읽은 뒤 다른 길이의 문장을 생성하는지에 따라 구현이 달라진다. 모델 이름보다 먼저 입력 텐서의 모양과 필요한 출력 시점을 정해야 한다.

2. RNN은 이전 상태를 현재 계산에 넣는다

기본 RNN은 현재 입력 x_t와 이전 은닉 상태 h_(t-1)로 새 상태 h_t를 만든다. 같은 가중치를 모든 시점에 공유하므로 길이가 달라도 같은 규칙으로 처리할 수 있다.

h_t = tanh(W_x x_t + W_h h_(t-1) + b)

“영화가 지루하지 않았다”를 읽는다면 마지막 단어를 해석할 때 앞선 “지루하지”의 정보가 은닉 상태에 반영된다. 감성 분류처럼 마지막 상태 하나를 쓰기도 하고, 품사 태깅처럼 모든 시점의 상태를 출력하기도 한다.

문제는 긴 시퀀스를 역전파할 때 같은 연산이 반복된다는 점이다. 기울기가 매우 작아지면 먼 과거 정보가 학습되지 않고, 매우 커지면 학습이 불안정해진다. 기본 RNN이 장기 의존 관계에 약한 이유다.

3. LSTM과 GRU는 정보 통로를 게이트로 조절한다

LSTM: 셀 상태와 세 종류의 게이트

LSTM은 은닉 상태와 별도로 셀 상태를 둔다. 망각 게이트는 이전 기억 중 버릴 부분, 입력 게이트는 새로 저장할 부분, 출력 게이트는 현재 출력으로 드러낼 부분을 조절한다. 덧셈 중심의 셀 상태 경로가 먼 시점까지 기울기를 전달하는 데 도움을 준다.

GRU: 두 게이트로 단순화

GRU는 셀 상태와 은닉 상태를 하나로 합치고 업데이트 게이트와 리셋 게이트를 사용한다. LSTM보다 매개변수가 적어 학습과 추론이 가벼울 수 있다. 그러나 어느 구조가 항상 더 정확하다고 단정할 수는 없다. 데이터 길이, 크기, 지연 시간 조건에서 직접 비교해야 한다.

구조핵심 상태장점주의점
RNN은닉 상태단순하고 가벼움긴 의존 관계 학습이 어려움
LSTM은닉 상태 + 셀 상태장기 정보 제어가 세밀함계산과 매개변수가 큼
GRU통합된 은닉 상태LSTM보다 구조가 간결함과제별 성능 검증 필요
728x90

4. Transformer는 관련 위치를 직접 찾는다

RNN은 시점을 순서대로 통과한다. Transformer의 Self-Attention은 한 층 안에서 각 토큰이 다른 모든 토큰과의 관련성을 계산한다. 학습 시 여러 위치를 병렬로 처리하기 쉽고, 멀리 떨어진 단어도 짧은 계산 경로로 연결된다.

입력 표현에 서로 다른 선형 변환을 적용해 Query, Key, Value를 만든다.

  • Query(Q): 현재 위치가 찾는 정보
  • Key(K): 각 위치가 가진 정보의 표지
  • Value(V): 실제로 가져올 내용
Attention(Q, K, V) = softmax(QKᵀ / √d_k) V

Query와 모든 Key의 내적은 관련성 점수가 된다. 차원 수의 제곱근으로 나눠 값이 지나치게 커지는 것을 줄이고, softmax로 가중치 합을 1로 만든 뒤 Value를 가중합한다. 결과는 “현재 위치가 다른 위치의 정보를 얼마나 섞어 받을지”를 나타낸다.

텐서 모양: 배치 우선 표현에서 입력이 [batch, length, d_model]이라면 Q·K·V도 보통 앞의 두 축을 유지한다. 행렬곱 뒤 Attention 점수는 head별 [batch, heads, query_length, key_length]가 된다.

Q·K·V 계산과 Self·Cross·Multi-Head Attention의 입력 관계

5. Self·Cross·Multi-Head Attention은 입력 관계가 다르다

Self-Attention

Q, K, V가 같은 시퀀스에서 나온다. 문장 안에서 대명사가 어느 명사를 가리키는지, 코드의 함수 호출이 어느 정의와 연결되는지처럼 내부 관계를 학습한다.

Cross-Attention

Q는 한 시퀀스, K와 V는 다른 시퀀스에서 나온다. 번역 모델의 디코더가 원문 표현을 참고하거나, 이미지 질문 모델이 텍스트 Query로 이미지 특징을 찾는 상황이 예다. Cross-Attention은 특정 “디코더 전용 기능”이 아니라 서로 다른 정보원을 연결하는 방식이다.

Multi-Head Attention

입력을 여러 head의 작은 공간으로 투영해 Attention을 병렬 계산한다. 각 head는 Q만 여러 개 만드는 것이 아니라 Q, K, V 각각에 다른 투영을 적용한다. 어떤 head는 가까운 문법 관계, 다른 head는 먼 의미 관계를 학습할 수 있다. 모든 head의 결과를 이어 붙인 뒤 다시 선형 변환한다.

6. Attention만으로는 순서를 알 수 없다

Self-Attention은 위치 정보를 별도로 넣지 않으면 같은 단어 집합의 순서를 구분하지 못한다. 그래서 입력 임베딩에 고정 또는 학습 가능한 위치 표현을 더한다. 긴 문맥을 다룰 수 있는 범위는 모델의 위치 표현, 학습 설정, 메모리 제한에 따라 달라지며 무제한이 아니다.

생성 모델은 미래 토큰을 미리 보면 안 된다. Causal mask는 현재 위치가 뒤쪽 위치를 참고하지 못하게 Attention 점수를 가린다. 패딩 토큰을 제외하는 padding mask와 목적이 다르므로 둘을 구분한다.

7. PyTorch로 출력 형태를 확인한다

GRU: 마지막 상태로 문장 분류

import torch
from torch import nn

batch, length, input_size = 4, 12, 32
x = torch.randn(batch, length, input_size)

gru = nn.GRU(
    input_size=input_size,
    hidden_size=64,
    batch_first=True
)

outputs, last_hidden = gru(x)

print(outputs.shape)      # [4, 12, 64]
print(last_hidden.shape)  # [1, 4, 64]

Multi-Head Attention: 모든 위치의 표현 갱신

attention = nn.MultiheadAttention(
    embed_dim=64,
    num_heads=4,
    batch_first=True
)

x = torch.randn(4, 12, 64)
updated, weights = attention(
    query=x,
    key=x,
    value=x,
    need_weights=True
)

print(updated.shape)  # [4, 12, 64]
print(weights.shape)  # [4, 12, 12]

실전에서는 Attention 뒤에 잔차 연결과 정규화, 피드포워드 네트워크가 이어진다. 위 코드는 핵심 입력·출력 모양을 확인하기 위한 최소 예제다.

8. 어떤 모델을 선택할까

조건먼저 검토할 구조이유
센서 값을 한 시점씩 즉시 처리GRU·LSTM상태를 유지하며 스트리밍하기 쉬움
긴 문서의 문맥 관계Transformer 계열먼 위치를 직접 연결
작은 데이터·낮은 지연 시간작은 GRU와 기준 모델 비교구조와 연산이 비교적 단순
대규모 병렬 학습Transformer 계열시퀀스 위치의 병렬 처리에 유리
  • “Transformer는 항상 더 빠르다”: 학습 병렬성은 좋지만 긴 시퀀스의 기본 Attention은 메모리와 연산량이 길이의 제곱에 비례한다.
  • “GPT는 Transformer 전체 구조다”: GPT 계열은 대표적인 decoder-only, BERT 계열은 encoder-only 구조다.
  • “Multi-Head는 Query만 여러 개다”: 각 head가 Q·K·V 모두를 별도 공간으로 투영한다.
  • “Attention 그림이 곧 설명이다”: 가중치는 모델 내부 관계를 보여주는 단서지만, 단독으로 인과 설명이 되지는 않는다.

핵심 요약

  • RNN은 이전 은닉 상태를 순서대로 전달한다.
  • LSTM과 GRU는 게이트로 유지·삭제할 정보를 조절한다.
  • Transformer는 Q·K·V로 필요한 위치의 정보를 가중합한다.
  • Cross-Attention은 서로 다른 시퀀스나 모달리티를 연결한다.
  • 모델 선택은 정확도뿐 아니라 길이, 지연 시간, 메모리, 스트리밍 조건으로 결정한다.
728x90