RNN

한상우·2025년 1월 5일

스터디

목록 보기
10/23

RNN (Recurrent Neural Network)

  • 시계열 데이터나 순차적 데이터를 처리하는 데 특화된 딥러닝 모델
  • 현재 단계의 예측이 단순히 현재 입력에만 의존하지 않고, 이전 입력도 고려한다
  • 고정 크기의 데이터가 아닌 가변적인 시퀀스의 입력 또는 출력을 처리할 수 있다
  • Recurrent는 '반복되는'이라는 뜻으로, RNN이 시간 단계마다 동일한 구조를 반복적으로 사용하는 모델임을 나타낸다

source : GOLDEN PLANET

  • 왼쪽 그림 (순환 구조를 표현) :

    • xtx_t는 특정 시간 단계의 입력값을 나타낸다
    • WW모든 시간 단계에서 재사용하는 가중치 집합(Wxh,Whh,WhyW_{xh}, W_{hh}, W_{hy})을 나타낸다
    • hh시간 축을 따라 이전 정보를 축적하며 갱신되는 상태를 나타낸다.
    • yty_t는 특정 시간 단계의 출력값을 나타낸다
  • 오른쪽은 왼쪽 그림을 시간 단계(Time Step)마다 펼쳐서 입력, 출력, 가중치를 표현한 그림이다.

시퀀스와 종속적인 데이터 처리

  • RNN의 순환 구조는 다음 두 가지 주요 특징을 제공한다.

    • 시퀀스 데이터 처리 :

      • 입력/출력의 크기가 고정되어 있지 않아도 처리할 수 있다.
    • 종속적인 데이터 처리 :

      • 시간 축을 따라 이전 정보를 은닉 상태에 축적하며 갱신하여 데이터 간의 종속성을 학습할 수 있다.
  • CNN과 RNN을 비교해보면 다음과 같다

특징CNN (One-to-One)RNN (다양한 구조)
입력 크기고정 크기 입력 (예: 단일 벡터, 정해진 이미지 크기)시퀀스 입력 가능
출력 크기고정 크기 출력 (예: 단일 값 또는 클래스)시퀀스 출력 가능
시간/순서 고려독립적인 데이터 처리 (시간적 문맥 정보 없음)종속적인 데이터의 시퀀스를 처리 (순서 중요)
적용 분야고정 구조 데이터 (이미지, 정적인 피처 벡터)순차 데이터 (텍스트, 음성, 비디오, 시계열 데이터 등)

RNN 종류

  • RNN은 입출력 구조에 따라 RNN의 종류를 나눌 수 있다.

source : Convolutional Neural Networks for Visual Recognition

  • 0) One-to-One (고정 입력 -> 고정 출력)

    • 예: ANN, CNN

  • 1) One-to-Many (고정 입력 -> 시퀀스 출력)

    • 예: 이미지 캡셔닝

    • 입력: 하나의 고정 크기 이미지

    • 출력: 이미지의 내용을 설명하는 단어들의 시퀀스

      • RNN이 이미지의 특징 벡터를 입력으로 받아, 이를 반복적으로 처리하여 단어 시퀀스를 생성

  • 2) Many-to-One (시퀀스 입력 -> 고정 출력)

    • 예: 감정 분류, 액션 예측

    • 입력: 단어의 시퀀스(텍스트) 또는 비디오 프레임의 시퀀스

    • 출력: 하나의 정적 결과(예: 감정 라벨, 액션 라벨)

      • 입력 시퀀스를 처리하면서 RNN은 은닉 상태를 업데이트해 최종 단계에서 하나의 결과를 생성

  • 3-1) Many-to-Many (시퀀스 입력 -> 시퀀스 출력)

    • 예: 번역, 비디오 요약

    • 입력: 한 언어로 된 문장 시퀀스(예: 영어 문장)

    • 출력: 다른 언어로 된 문장 시퀀스(예: 프랑스어 문장)

      • RNN이 입력 시퀀스를 처리한 후, 디코더(decoder)가 새로운 시퀀스를 생성

  • 3-2) Many-to-Many (시퀀스 입력 -> 시퀀스 출력, 동기적)

    • 예: 비디오 분류(프레임 수준에서)

    • 입력: 비디오의 프레임 시퀀스

    • 출력: 각 프레임에 대한 라벨 시퀀스

      • 이 경우, 모델은 현재 프레임뿐 아니라 이전 프레임의 문맥 정보도 활용해 각 프레임을 분류

RNN 학습 과정

  • RNN은 입력 시퀀스를 처리하면서 은닉 상태(hidden state)를 업데이트한다.

  • 입력 벡터는 각 시점(timestep)마다 RNN에 제공되며, 은닉 상태는 입력과 이전 상태를 기반으로 갱신된다

1. Foward Pass

frame 1부터 n까지를 입력으로 받는 RNN모델의 foward pass는 다음과 같이 작동한다.

  • Timestep 1 (frame 1) :

    • 입력 : x1x_1 (첫 번째 프레임)
    • 은닉 상태 업데이트 : h1=f(Wxhx1+Whhh0+bh)h_1 = f(W_{xh}x_1 + W_{hh}h_0 + b_h)
    • 출력 : y1=g(Whyh1+by)y_1 = g(W_{hy}h_1 + b_y)
  • Timestep 2 (frame 2) :

    • 입력 : x2x_2 (두 번째 프레임)
    • 은닉 상태 업데이트 : h2=f(Wxhx2+Whhh1+bh)h_2 = f(W_{xh}x_2 + W_{hh}h_1 + b_h)
    • 출력 : y2=g(Whyh2+by)y_2 = g(W_{hy}h_2 + b_y)
  • Timestep n (frame n) :

    • 입력 : xnx_n (마지막 프레임)
    • 은닉 상태 업데이트 : hn=f(Wxhxn+Whhhn1+bh)h_n = f(W_{xh}x_n + W_{hh}h_{n-1} + b_h)
    • 출력 : y1=g(Whyhn+by)y_1 = g(W_{hy}h_n + b_y)

  • WxhW_{xh} : 입력-은닉 상태 가중치 (input size x unit size)

    • 입력 벡터를 현재 은닉 상태로 변환한다
    • 입력 데이터를 은닉 상태 공간으로 투영(embedding)하여 RNN의 내부 상태에서 활용 가능하게 만들어 준다
      • 예: "고양이"라는 단어가 입력으로 들어오면, WxhW_{xh}를 통해 단어의 벡터 표현이 은닉 상태 공간으로 전달된다
  • WhhW_{hh}: 은닉 상태-은닉 상태 가중치 (unit size x unit size)

    • 이전 은닉 상태가 현재 은닉 상태로 영향을 미치도록 한다
    • RNN이 시간적 문맥과 이전 정보를 기억할 수 있게 해주는 핵심 가중치이다
      • 예: 이전 단어("The cat")가 현재 단어("is")의 문맥을 형성하는 데 기여
  • WhyW_{hy}: 은닉 상태-출력 가중치 (unit size x output size)

    • 현재 은닉 상태를 출력 벡터로 변환하는 데 사용한다

      • 예: 은닉 상태가 "고양이가 잔다"라는 정보를 담고 있다면, 이를 출력("The cat is sleeping")으로 변환한다

  • RNN Foward Pass의 문제점 :

    • hth_t는 계속해서 이전 단계의 은닉 상태(ht1h_{t-1})를 기반으로 갱신되는데, 1보다 작은 값이 지속적으로 곱해지는 상황에서는 hth_t가 점점 작아지고, t가 커질수록 초기 은닉 상태의 영향이 소멸한다.
  • 기울기 소실로의 연결 :

    • 이는 RNN이 긴 시퀀스를 처리할 때 초기에 입력된 데이터의 정보를 잃게 만들며, RNN 역전파 (BPTT)에서 기울기 값이 지수적으로 감소하게 되어, 가중치 업데이트가 효과적으로 이루어지지 않는 문제를 유발한다.

2. Calculate Loss

  • RNN은 지도 학습(Supervised Learning) 모델이며, 학습 과정에서 정답 라벨을 사용한다.

  • 각 시간 단계의 출력(yty_t)과 정답 라벨(ytruey_{true})간의 차이를 기반으로 손실(LL)을 계산한다.

    L=t=1TLt(yt,ytrue)L = \sum_{t=1}^T L_t(y_t, y_true)

3. Backward Pass (BPTT)

  • BPTT (Backpropagation Through Time) : 시간적으로 펼쳐진 RNN에서 역전파를 통해 각 시점에서 손실 기울기를 계산한다.

  • 왼쪽 그림과 같이 순차적인 순환 구조를 가진 RNN을 오른쪽 그림처럼 시간을 축으로 펼쳐주면 모든 레이어의 뉴런이 1개이고, 레이어의 개수는 시퀀스의 길이(TT)와 같은 ANN과 같은 모습이 된다.

  • 시간 축을 거슬러 올라가며(TT → ... → 11) 기울기(손실 기여도)를 계산한다(체인 룰)

    LTW=LThThTW{\partial L_T \over \partial W} = {\partial L_T \over \partial h_T} \cdot {\partial h_T \over \partial W}

    • LTL_T : 특정 시간 단계 TT에서의 손실함수
    • hTh_T : 시간 단계 TT의 은닉 상태
    • WW : RNN 학습 가중치 (Wxh,Whh,WhyW_{xh}, W_{hh}, W_{hy})
  • 기울기를 이전 단계로 전달하며 시간 단계의 기울기를 누적한다

    LT1W=LThThTW+hThT1LTW{\partial L_{T-1} \over \partial W} = {\partial L_T \over \partial h_T} \cdot {\partial h_T \over \partial W} + {\partial h_T \over \partial h_{T-1}} \cdot {\partial L_T \over \partial W}

    • 우변 첫 번째 항 : 앞 단계(TT)의 기울기
    • 우변 두 번째 항 : 현재(T1T-1) 은닉 상태가 앞 단계(TT)의 은닉 상태에 미친 영향

    결과적으로, 모든 시간 단계의 기울기를 누적한다

    LW=t=1TLtW{\partial L \over \partial W} = \sum_{t=1}^T {\partial L_t \over \partial W}

=TLThThTW+(T1)LT1hT1hT1W++L1h1h1W+(은닉 상태의 영향)= T \cdot \frac{\partial L_T}{\partial h_T} \cdot \frac{\partial h_T}{\partial W} + (T-1) \cdot \frac{\partial L_{T-1}}{\partial h_{T-1}} \cdot \frac{\partial h_{T-1}}{\partial W} + \dots + \frac{\partial L_1}{\partial h_1} \cdot \frac{\partial h_1}{\partial W} + (\text{은닉 상태의 영향})

RNN의 핵심 비유 : 밀 크레프

  • 밀 크레프 : 흔히 크레이프 케이크라고 부르며, 여러장의 크레이프 사이에 생크림이나 커스터드 크림, 과일 등을 넣으며 겹겹이 쌓아 만든다.

  • 시퀀스 :

    • RNN은 입력/출력을 가변적으로 처리할 수 있다.
      이는 밀 크레프의 층 수가 정해져 있지 않아, 필요한 만큼 쌓아올릴 수 있는 모습과 유사하다.
  • 은닉 상태 :

    • RNN에서는 각 입력 데이터를 가공하여 새로운 정보를 기존 은닉 상태에 더한다.
      이는 크레이프 한 장을 기본 층으로 쌓고, 크림을 얹어 새로운 층을 만드는 것과 유사하다.
  • 활성화 함수 :

    • RNN의 활성화 함수는 은닉 상태 업데이트 과정에서 입력 데이터와 이전 은닉 상태를 정교하고 조화롭게 연결한다.
      이는 밀 크레프의 중간에 생크림, 과일을 추가하여 각 층을 더 풍부하고 조화롭게 만드는 것과 유사하다.
  • 시간 단계 :

    • RNN은 각 시간 단계에서 입력을 받아 은닉 상태를 업데이트한다.
      이는 밀 크레프의 각 층을 순차적으로 쌓아 올리는 과정과 유사하다.
  • 최종 출력 :

    • RNN의 출력은 해당 시간 단계의 은닉 상태를 기반으로 생성한다.
      이는 크레이프 케이크를 완성한 후, 겉면에 데코레이션(출력층 가중치 적용)을 추가하여 결과물을 만드는 과정과 유사하다.
profile
개인 공부용 블로그입니다

0개의 댓글