티스토리 뷰

반응형

딥러닝 기초학습 6: RNN의 탄생 — 순차 데이터를 이해하기 위해 만들어진 첫 번째 딥러닝 모델


“이미지는 2D라서 CNN이 필요했다면,
텍스트와 시계열 데이터는 ‘순서가 있는 1D’ 이다.”

문장에는 문맥이 있고,
음성은 시간 흐름이 있으며,
주가 데이터는 이전 값의 영향을 받습니다.

그런데 기존의 MLP나 CNN은
순서를 기억하지 못합니다.

이 문제를 해결하기 위해 탄생한 모델이 바로
RNN(Recurrent Neural Network, 순환 신경망) 입니다.

이번 글은
“RNN이 왜 만들어졌는가 → 어떻게 동작하는가 → 왜 한계가 있었는가”
수식 없이 직관적으로 완전히 이해할 수 있도록 작성한 글입니다.


1. 순차 데이터의 본질: “과거가 현재에 영향을 준다”

텍스트 예시:

“나는 오늘 아침에 빵을 먹었다.
그래서 점심에는 밥을 먹었다.”

여기서 “밥을 먹었다”를 이해하려면
“빵을 먹었다”가 앞에 있었다는 사실을 기억해야 합니다.

CNN/MLP는 입력을 한 번에 보고 끝이지만
순차 데이터는 시간적 종속성(time dependency) 이 있습니다.

따라서 모델이 “이전 상태”를 기억해야 합니다.


2. RNN이란? — “이전 상태를 기억하는” 신경망

RNN의 핵심 아이디어는 단 하나:

“현재 입력 + 이전 은닉 상태를 함께 사용해 다음 출력을 만든다.”

즉, RNN은 기억(memory) 기능을 가진 모델입니다.

RNN의 은닉 상태(h_t) 계산:

[
h_t = f(Wx_t + Uh_{t-1} + b)
]

여기서

  • (x_t): t번째 입력
  • (h_{t-1}): 이전 시점의 은닉 상태
  • (h_t): 현재 은닉 상태(출력)
  • W, U, b: 학습되는 파라미터

3. RNN의 구조를 직관적으로 보면?

반응형

흐름을 단순화하면 이렇게 됩니다:

x1 → [RNN] → h1
x2 → [RNN] → h2
x3 → [RNN] → h3
...

또는 펼치지 않은 형태는 다음과 같습니다:

         ┌───────┐
x_t ---> │  RNN  │ ---> h_t
         └───┬───┘
             │
             ▼
           h_{t+1} 

즉, 타임스텝마다 같은 RNN 셀을 재사용하면서
과거 정보를 전달합니다.


4. 왜 이렇게 간단한 구조가 강력했을까?

RNN은 다음 문제들을 자연스럽게 해결했습니다:

  • 문맥 이해(NLP)
  • 다음 단어 예측
  • 번역(초기 NMT)
  • 시계열 예측(날씨, 주가)
  • 음성 인식 초창기

과거 RNN 연구는 딥러닝의 NLP 초기를 열었습니다.


5. BPTT(Backpropagation Through Time): RNN의 역전파

RNN도 학습은 역전파로 이루어지지만,
구조가 순차적이기 때문에 시간을 따라 펼쳐서(back-unrolling) 미분합니다.

이 방식이 바로 BPTT입니다.

단점:

  • 시퀀스 길이가 길어질수록 gradient 계산량 증가
  • 메모리 사용 증가

6. RNN의 치명적 한계: 기울기 소실(Vanishing Gradient)

RNN의 기본 구조가 너무 단순해서
긴 문맥을 학습할 때 문제가 발생합니다.

문제를 직관적으로 표현해보면:

❌ 문제 1: 오래된 정보는 잊어버린다

h_t는 계속해서 한 번의 행렬 변환을 거치면서
정보가 희석됩니다.

❌ 문제 2: 역전파 그래디언트가 0으로 수렴한다

(고전 RNN의 핵심 문제)

→ 긴 문장을 이해하지 못함
→ 문맥 유지가 어려움
→ “나는 영희가 좋아. 그런데 철수가 영희에게…”
이런 문장에서 장거리 의존성 학습이 불가능

이 문제가 NLP의 정체기였고,
이를 해결하기 위해 등장한 모델이 있습니다.


7. LSTM과 GRU — RNN의 한계를 해결하기 위한 발전형

RNN이 “기억을 잘 못한다”는 근본 문제를 해결하기 위해,
게이트(gate) 라는 개념을 추가한 모델들이 등장합니다.

  • LSTM (1997)
  • GRU (2014)

이 둘은 다음과 같은 점에서 강력합니다:

  • 정보를 ‘기억할지’ or ‘지울지’를 결정
  • gradient가 소실되지 않도록 설계
  • 긴 문장을 안정적으로 처리
  • BPTT 안정화

LSTM은 RNN의 “업그레이드 버전”이며
현대 딥러닝의 NLP 발전을 크게 이끌었습니다.

(LSTM/GRU는 다음글에서 자세히 설명합니다.)


8. RNN의 실제 학습 흐름 — 직관적으로 정리

예를 들어 “나는 밥을 먹었다”라는 4개 단어로 구성된 문장을 처리하면:

"나는" → h1
"밥을" → h2 (h1 기반)
"먹었다" → h3 (h2 기반)
"</EOS>" → h4 (h3 기반)

RNN은 입력 순서를 바꾸면 전혀 다른 결과가 나옵니다.
이것이 CNN/MLP와 결정적으로 다른 점입니다.


9. PyTorch로 동작하는 RNN 코드 예제

완전히 검증된 코드입니다.

import torch
import torch.nn as nn

rnn = nn.RNN(input_size=10, hidden_size=20, batch_first=True)

X = torch.randn(5, 3, 10)   # (batch, seq_length, input_dim)
h0 = torch.zeros(1, 5, 20)  # (num_layers, batch, hidden)

out, hn = rnn(X, h0)

print(out.shape)  # torch.Size([5, 3, 20])
print(hn.shape)   # torch.Size([1, 5, 20])

10. RNN은 왜 최종적으로 Transformer에게 자리를 내줬을까?

RNN의 구조적 한계:

한계 이유

순차적 계산 병렬화 불가능 → 느림
긴 문맥 처리 실패 gradient 소실
장거리 의존성 문제 이론적 구조의 한계

반면 Transformer는:

  • Attention으로 모든 위치를 동시에 참조
  • 병렬 처리 가능(GPU 최적화)
  • 장거리 문맥 강함
  • 속도 향상

이 때문에 오늘날 NLP는 거의 모두 Transformer 기반입니다.

그러나!
RNN을 먼저 이해해야 Transformer와 Attention이 왜 필요한지 보입니다.


11. 요약

핵심 포인트 의미

RNN 순차 데이터를 위한 첫 번째 딥러닝 모델
은닉상태 h_t 과거 기억 저장
BPTT 시간축을 따라 역전파
문제 gradient 소실, 장거리 의존성 실패
해결책 LSTM, GRU 등 게이트 기반 구조
후속 발전 Transformer의 시대

📘 다음 글 예고

👉 딥러닝 기초학습 7: LSTM과 GRU — RNN의 한계를 해결한 ‘게이트 구조’의 모든 것

다음 글에서는

  • LSTM의 3가지 게이트
  • GRU 구조의 단순성과 강점
  • Forget gate가 왜 혁신이었는지
  • RNN 대비 기울기 소실이 어떻게 해결되었는지
    를 완전히 직관적으로 정리합니다.


RNN,순환신경망,딥러닝,NLP,LSTM,시계열데이터,BPTT,딥러닝기초,PyTorch,언어모델

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
글 보관함
반응형