Articlemedium.com·2026년 6월 14일·0

I Spent a Week Inside RNNs — Here’s Everything That Finally Clicked

Quick Summary

원문은 순서와 기억이 필요한 시퀀스 데이터를 설명하기 위해 RNN이 왜 등장했는지, 텍스트가 숫자로 변환되는 과정, 순전파와 시간 역전파, 기울기 문제, 그리고 이를 완화하기 위한 LSTM의 기억 구조를 초보자 관점에서 단계적으로 풀어낸다.

I Spent a Week Inside RNNs — Here’s Everything That Finally Clicked 관련 대표 이미지

🖼️ 인포그래픽

I Spent a Week Inside RNNs — Here’s Everything That Finally Clicked 내용을 설명하는 본문 이미지

🖼️ 4컷 인포그래픽

I Spent a Week Inside RNNs — Here’s Everything That Finally Clicked 내용을 설명하는 본문 이미지

💡 한 줄 요약

원문은 순서와 기억이 필요한 시퀀스 데이터를 설명하기 위해 RNN이 왜 등장했는지, 텍스트가 숫자로 변환되는 과정, 순전파와 시간 역전파, 기울기 문제, 그리고 이를 완화하기 위한 LSTM의 기억 구조를 초보자 관점에서 단계적으로 풀어낸다.

📌 핵심 요약

  • 일반적인 인공신경망은 입력을 한꺼번에 처리하고 순서를 이해하지 못하기 때문에 문장, 음성, 시계열처럼 앞뒤 맥락이 중요한 데이터를 다루는 데 한계가 있다.
  • 순환신경망은 현재 입력과 이전 hidden state를 함께 사용해 새 hidden state와 출력을 만들며, 같은 가중치를 시간 단계마다 재사용함으로써 길이가 다른 시퀀스도 처리할 수 있다.
  • 텍스트는 토큰화, 어휘 사전 생성, 정수 인코딩, 패딩을 거쳐 모델에 들어가며, 정수 자체에는 의미가 없기 때문에 임베딩을 통해 단어 간 의미적 관계를 벡터 공간에 학습시킨다.
  • RNN은 문장을 앞에서부터 순서대로 읽으며 hidden state에 누적 정보를 저장하고, 마지막 상태를 바탕으로 예측을 만든 뒤 손실을 계산해 시간 방향으로 펼친 구조에서 역전파를 수행한다.
  • 시간 역전파에서는 긴 도함수 곱 때문에 기울기 소실과 폭주가 발생할 수 있으며, LSTM은 장기 기억을 위한 cell state와 세 가지 gate를 도입해 오래 유지할 정보와 버릴 정보를 더 세밀하게 조절한다.

🧩 주요 포인트

  1. 일반적인 인공신경망은 입력을 한꺼번에 처리하고 순서를 이해하지 못하기 때문에 문장, 음성, 시계열처럼 앞뒤 맥락이 중요한 데이터를 다루는 데 한계가 있다.
  2. 순환신경망은 현재 입력과 이전 hidden state를 함께 사용해 새 hidden state와 출력을 만들며, 같은 가중치를 시간 단계마다 재사용함으로써 길이가 다른 시퀀스도 처리할 수 있다.
  3. 텍스트는 토큰화, 어휘 사전 생성, 정수 인코딩, 패딩을 거쳐 모델에 들어가며, 정수 자체에는 의미가 없기 때문에 임베딩을 통해 단어 간 의미적 관계를 벡터 공간에 학습시킨다.
  4. RNN은 문장을 앞에서부터 순서대로 읽으며 hidden state에 누적 정보를 저장하고, 마지막 상태를 바탕으로 예측을 만든 뒤 손실을 계산해 시간 방향으로 펼친 구조에서 역전파를 수행한다.
  5. 시간 역전파에서는 긴 도함수 곱 때문에 기울기 소실과 폭주가 발생할 수 있으며, LSTM은 장기 기억을 위한 cell state와 세 가지 gate를 도입해 오래 유지할 정보와 버릴 정보를 더 세밀하게 조절한다.

🧠 상세 정리

1. 순서가 중요한 데이터와 일반 신경망의 한계

원문은 RNN의 필요성을 설명하기 위해 먼저 일반 인공신경망이 왜 시퀀스 데이터에 맞지 않는지 짚는다. “I love this movie”와 “I don’t love this movie”처럼 단어가 비슷해도 순서와 부정어의 위치에 따라 의미가 크게 달라진다. “Dog bites man”과 “Man bites dog”의 예시도 같은 단어라도 배열이 바뀌면 전혀 다른 사건이 된다는 점을 보여준다. 일반적인 ANN은 입력을 한꺼번에 보는 방식이라 ‘먼저’, ‘그다음’, ‘이후’라는 시간적 구조를 직접 다루지 못한다. 또한 고정된 입력 크기를 요구하기 때문에 길이가 다른 문장을 맞추려면 패딩이 필요하지만, 이는 메모리 낭비를 만들 뿐 문맥 기억 문제 자체를 해결하지 못한다.

2. RNN의 출발점: 이전 정보를 다음 단계로 넘기기

RNN은 네트워크가 방금 처리한 정보를 기억하고 다음 입력 처리에 활용할 수 있다면 어떨까라는 질문에서 출발한다. 원문은 RNN을 현재 입력과 이전에 기억한 정보를 함께 받아 출력과 갱신된 기억을 만드는, loop가 있는 신경망으로 설명한다. 이 기억은 hidden state라고 불리며, RNN의 핵심 장치다. 각 시간 단계에서 새로운 hidden state는 현재 입력과 이전 hidden state의 함수로 계산된다. 따라서 RNN은 입력 전체를 한 번에 보는 대신 한 요소씩 읽고, 그때마다 기억을 갱신하면서 순서 정보를 보존하려고 한다.

3. 시간에 따라 펼쳐지는 동일한 작은 네트워크

원문은 RNN을 이해하는 핵심 시각으로 ‘unrolling’을 제시한다. 실제로는 하나의 순환 구조지만, 시간 단계별로 펼쳐 보면 같은 작은 네트워크가 여러 번 복사되어 이어진 것처럼 보인다. 중요한 점은 각 시간 단계에서 완전히 다른 가중치를 쓰는 것이 아니라 Wxh, Whh, Why 같은 동일한 가중치를 반복해서 사용한다는 것이다. 이를 parameter sharing이라고 하며, 이 덕분에 RNN은 세 단어 문장이든 삼백 단어 문장이든 같은 가중치 집합을 계속 적용할 수 있다. 즉 RNN의 유연성은 입력 길이마다 새 구조를 만드는 데서 나오지 않고, 같은 셀을 시간축으로 반복 적용하는 데서 나온다.

4. 텍스트를 숫자로 바꾸는 전처리 흐름

원문은 RNN이 문장을 직접 읽는 것이 아니라 수학 연산만 수행한다는 점을 강조한다. 따라서 원시 텍스트는 먼저 토큰화되어 단어 단위로 나뉘고, 각 고유 단어에는 어휘 사전에서 번호가 부여된다. 이후 문장은 정수 배열로 바뀌며, 훈련 중 보지 못한 단어는 OOV 토큰으로 대체되어 모델이 멈추지 않도록 처리된다. 배치 학습을 위해 길이가 다른 시퀀스는 패딩으로 길이를 맞추며, 예시에서는 짧은 배열 뒤에 0을 붙이는 post-padding이 등장한다. 그러나 이런 정수 인코딩만으로는 단어 간 의미 관계를 알 수 없기 때문에, 단순 숫자 표현은 본질적인 한계를 가진다.

5. 임베딩: 의미 없는 번호를 의미 공간으로 바꾸기

정수 인코딩에서 ‘King’이 1이고 ‘Queen’이 2라는 사실만으로는 두 단어가 의미적으로 가깝다는 정보를 모델이 알 수 없다. 원문은 이 문제를 해결하는 장치로 embedding layer를 설명한다. 임베딩은 단어를 하나의 번호가 아니라 여러 차원의 조밀한 벡터로 표현하며, 많은 텍스트를 학습하는 과정에서 비슷한 의미를 가진 단어들이 벡터 공간에서 가까운 위치에 놓이게 된다. 예를 들어 King, Queen, Prince, Princess 같은 단어들이 서로 가까운 군집을 형성할 수 있다. 글쓴이는 IMDB 리뷰 데이터셋 실험에서 단순 정수 인코딩 대신 임베딩을 넣은 것이 가장 큰 정확도 향상을 만들었다고 말한다.

6. RNN 순전파: 문장을 차례대로 읽고 예측하기

원문은 “Movie was good”이라는 짧은 리뷰를 예로 들어 RNN의 순전파를 단계별로 보여준다. 처음에는 hidden state를 0으로 초기화하고, 첫 단어 “Movie”를 처리해 h₁을 만든다. 다음 단어 “was”를 처리할 때는 현재 입력뿐 아니라 h₁도 함께 사용하므로 h₂에는 “Movie”와 “was”에 관한 정보가 함께 담긴다. 마지막 단어 “good”을 처리해 만들어진 h₃는 지금까지 읽은 전체 문장 정보를 대표하는 상태가 된다. 이후 이 마지막 hidden state를 출력층과 sigmoid 함수에 통과시켜 긍정 리뷰일 확률을 예측하고, 실제 라벨과 비교해 Binary Cross-Entropy 손실을 계산한다.

7. 시간 역전파와 긴 도함수 곱의 부담

RNN은 같은 셀이 시간 단계마다 반복되므로, 학습할 때도 일반적인 층 방향 역전파와는 다른 설명이 필요하다. 원문은 이를 해결하기 위해 순환 구조를 시간축으로 펼치면 깊은 feedforward network처럼 볼 수 있다고 말한다. 이렇게 펼친 구조에서 손실의 오류 신호가 마지막 단계에서 이전 단계들로 거슬러 올라가며 전달되는 방식이 Backpropagation Through Time이다. recurrent weight인 Wh의 기울기는 어느 한 시점의 계산만이 아니라 모든 시간 단계에서 온 기여의 합으로 구성된다. 하지만 가중치가 반복 사용되고 chain rule이 계속 적용되면서 긴 도함수 곱이 생기고, 바로 이 지점에서 RNN 학습의 대표적인 문제가 시작된다.

8. 기울기 소실과 폭주, 그리고 LSTM의 기억 관리

원문은 RNN의 핵심 실패 모드로 vanishing gradients와 exploding gradients를 설명한다. 반복되는 도함수가 1보다 작으면 긴 시퀀스를 거치며 기울기가 거의 0에 가까워지고, 앞부분의 정보와 초기 가중치가 제대로 학습되지 않는다. 반대로 반복되는 값이 1보다 크면 기울기가 급격히 커져 가중치 업데이트가 지나치게 커지고 학습이 불안정해진다. 폭주하는 기울기는 gradient clipping, 낮은 learning rate, 더 나은 초기화로 비교적 직접적으로 완화할 수 있지만, 소실 문제는 더 근본적인 구조 변화가 필요했다. 그래서 원문은 LSTM을 오래 유지할 정보와 버릴 정보를 gate로 조절하는 더 똑똑한 기억 관리자라고 설명하며, cell state가 긴 시간 동안 정보를 비교적 덜 변형된 채 흐르게 하는 통로 역할을 한다고 정리한다.

🧾 핵심 주장 / 시사점

  • RNN의 핵심은 복잡한 수식보다 ‘현재 입력을 읽을 때 이전 상태를 함께 본다’는 단순한 아이디어에 있으며, 이 아이디어가 순서가 있는 데이터 처리의 출발점이 된다.
  • 텍스트 모델링에서 성능을 좌우하는 중요한 전환점은 문자를 숫자로 바꾸는 것 자체가 아니라, 임베딩을 통해 숫자 표현에 의미적 구조를 학습시키는 단계다.
  • RNN의 장점인 반복 구조와 parameter sharing은 동시에 시간 역전파에서 긴 곱을 만들기 때문에, 긴 문맥을 다룰수록 구조적 한계와 학습 불안정성이 드러난다.

✅ 액션 아이템

  • 일반 인공신경망이 순서를 놓치는 한계를 고려해 문장·음성·시계열 데이터는 RNN 기반 처리로 우선 설계를 전환한다.
  • 텍스트 입력은 토큰화-사전 생성-정수 인코딩-패딩-임베딩 순서를 고정해 정수의 무의미성을 의미 벡터 학습으로 보완한다.
  • 시간 역전파 구간의 기울기 소실·폭주 징후를 점검하고, 장기 의존성 필요 시 LSTM의 cell state 및 gate 작동을 적용한다.

❓ 열린 질문

  • RNN의 hidden state 누적이 예측 품질을 높인다고 판단할 수 있는 시퀀스 길이 임계점은 어디인가?
  • 토큰화와 패딩 설정이 달라질 때 임베딩이 학습하는 단어 간 의미 관계는 어떤 범위에서 달라질 가능성이 있는가?
  • LSTM의 세 가지 gate가 장기 기억 유지와 삭제를 분기할 때 유지 우선순위는 어떤 기준으로 정해야 하는가?

관련 문서

공통 태그와 주제 흐름을 기준으로 같이 보면 좋은 문서를 이어서 제안합니다.