티스토리 뷰

▶RNN(Recurrent Neural Network)

 

1. RNN 등장 배경

연속적인 데이터(Sequence data)를 다뤄야 한다면?

 

유전적인 정보, signal을 표현하는 정보, Text 형태의 정보

🙍🏻‍♀️그래서 기존 모델들로는 sequnce data를 학습할 수가 없어서 RNN이 나온건가요?
👩🏻‍💻기존 모델들로도 해결할 수 있기는 합니다만.....

 

  • Snapshots을 이용하는 방법..?
    • 각 시점에 대한 데이터를 끄집어내서 그때에 대한 output을 각각 도출
    • 하지만 sequence data는 트랜드성이 존재(=dynamic behaviors)
      • snapshots 형태로 학습을 하게 되면 dynamic한 hehavior들을 포함할 수 없음
      • 즉, 이전 데이터들과의 연관성은 학습하지 못한 모델이 되게 됨

 

  • Sliding predictor를 사용한 방법..?
    • 아래와 같이 모델에 일련의 input을 연속적으로 이용하는 방식
    • Finite-response Model
      • 그래서 몇개의 input을 활용할건가?" 문제 발생..
        • 정말 많은 과거 데이터가 있다고 하더라도 어느정도 시점까지만 한정적으로만 활용이 가능
    • Infinite-response Model
      • 현실적으로 구현이 불가능..
      • 유지되는 weight들도 굉장히 많아질 것이고 이 많은 것을 다 계산을 하여 업데이트하는 것이 현실적으로 불가능
        • 다른 형태로 생각할 필요 발견🔥

Finite-response Model

 

Infinite-response Model

Recursive하게 학습

 

아래 그림을 보게 되면 t-1 시점을 결과값을 도출하고 그 다음으로 t 시점의 결과값을 도출할 것입니다.

그런데 자세히 보게 되면 t 시점에서는 t-1 시점에 사용한 input 데이터 2개 + 1개의 새로운 시점의 데이터 이렇게 사용합니다.

따라서 이것을 Recursive하게 학습을 진행할 수 있지 않을까 하는 생각이 들 수 있습니다.

이러한 Resursive한 학습을 그림을 나타내 보면 다음과 같습니다.

Sequence data가 가진 트랜드성, dynamic한 behaviors들을 위와 같이 hiddent state들이 계속 보유를 하고 있기 때문에 이러한 sequence data를 처리할 때 충분히 효과적이게 됩니다.

 

2. Recurrent Neural Network(RNN)

RNN은 이전 시점의 hidden state와 현 시점의 input을 통해 매 시점마다 recurrence relation을 찾는다! 

 

Forward Propagation

 

  • t 시점의 hideen state ( = 이전 시점들의 recurrence relation + 지금 시점의 정보)에 가중치를 곱하여
  • softmax 함수를 통과시키면 t 시점 output이 도출됨

 

  • sequnce 모델링을 위한 RNN 형태

 

Back Propagation Through Time (BPTT)

 

우리가 지금 업데이트 해야할 파라미터들은 U, W, v 총 3개입니다.

  • U: input을 연결하는 가중치 행렬
  • W: 현재 hidden state와 다음 hidden state를 연결하는 가중치 행렬
  • V: output을 연결하는 가중치 행렬

 

  • V ( output을 연결하는 가중치 행렬)
    • 이전 시점들에 대한 hidden state를 현재 시점의 hidden state가 가지고 있기 때문에 output의 output을 연결하는 가중치 행렬에 대한 미분에 대해서는 다른 파라미터를 고려할 필요 없이 바로 미분해주면 됩니다.

 

  • W (현재 state와 다음 state를 연결하는 가중치 행렬)
    • t 시점의 hidden state는 이전 시점들의 hidden state들과 어떤 연관성을 가짐
      • + t 시점의 hidden state에 대해서는 t-1 시점에서의 hidden state와 연관
      • + t-1 시점의 hidden state에 대해서는 t-2 시점에서의 hidden state와 연관
      • + ...

일반화 했을 때

이처럼 이전 시점의 hidden state가 많을 수록 chain rule에 의한 식의 길이가 점점 길어지게 됩니다.

따라서 이쯤 되어서 드는 생각...

 

Vanishing Gradient Problems

 

  • RNN은 Long-term dependencies를 처리하는 데에 한계가 있음
    • 점점 gradient를 잃어버릴 수 있음
    • 즉, 주요 단어들 사이에 여러 시간 스텝이 지났다면 잘 기억하지 못함
    • 이는 보통 문장의 의미를 파악하는 데에 있어서 가까이 있지 않은 단어들이 밀접한 관련이 있을 수도 있기 때문에 문제가 됨
    • "I grew up in France, ... and I speak fluent ____"
      • 중간에 무슨 문장이 있든 마지막에는 "french"라는 대답을 하게 될텐데
      • 이는 굉장히 과거 시점의 데이터가 t 시점의 output을 예측하는 데에 충분히 영향을 줄 수 있다는 말과 같음

 

  • Vanishing gradent problems를 해결하는 방법 3가지
    • #1. Activation Functions
    • #2. Parameter Initialization
    • #3. Gated Units (LSTM, GRU, etc.)

 

728x90

 

3. Long Short-Term Memory (LSTM)

  • 위에서 설명한 것처럼 RNN의 Long-term depencies 한계에 따른
  • vanishing gradient problem 문제를 해결하기 위해 등장
  • 정보에 대한 흐름을 컨트롤 하는 계산적인 블록을 바탕으로 구성

 

Gates

 

  • 정보를 더하거나 제거할 때 이용
  • Element-wise multiplication

필터 연산과 비슷하게(물론 마지막에 sum하진 않습니다)

element-wise하게 얼마만큼 정보를 통과시킬지를 gate를 통해 값을 주게 되면

 

1.0일 때는 해당 정보를 전부 통과시키겠다

0.5일 때는 해당 정보를 반만 통과시키겠다

0.0일 때는 해당 정보를 아예 통과시키지 않겠다

라는 말이 되겠습니다.

 

element-wise 하게 multiplication하게 되면 gate를 통해 데이터가 변형된 것을 확인할 수 있습니다.

(파란색 그림 가장 오른쪽)

 

게이트를 자세히 보게 되면 element-wise하게 multiplication하는 부분은 결과적으로 연산을 하여 0~1 사이 값으로 도출되므로 가장 오른쪽 그림과 같이 간단히 activation function으로 나타낸 부분을 확인할 수 있습니다.

 

cell state \( C_t \)

 

  • 과거에 누적되어 있는 데이터들을 의미

 

Basic RNN

 

Basic RNN

 

LSTM의 단계

 

  • Forget gate \( f_t \)
    • LSTM의 첫 단계
    • cell state(과거 데이터)로 부터 어떤 정보를 버릴 것인지를 정함
    • 과거 정보 \( h_{t-1} \)과 \( x_t \)을 받아서 0과 1 사이의 값을 \( C_{t-1} \)에 보내줌
    • 그 값이 1이면 "모든 정보를 보존해라", 0이면 "모두 버려라"라는 말을 의미

LSTMdml forget gate layer

  • Input gate \( i_t \)
    • 다음 단계로 새로 들어오는 정보 중 어떤 것을 cell state에 저장할 것인가를 정함
    • input gate가 어떤 값을 업데이트할 지 정함
    • 그 다음에 tanh layer가 새로운 후보 값들인 \( \tilde{C}_t \) 라는 vetor를 만들고, cell state에 더할 준비
    • 이렇게 두 단계에서 나온 정보를 합쳐서 state를 업데이트할 재료를 만들게 됨

LSTM의 input gate layer

  • 이전 cell state \( C_{t-1} \)를 새로운 cell state \( C_t \)로 업데이트
    • 이전 단계에서 어떤 값을 얼마나 업데이트해야 할지는 다 정해놓았음
    • 이전 state에 \( f_t \)(forget gate layer)를 곱해서 가장 첫 단계에서 잊어버리기로 정했던 것들을 잊어버림
    • → \( i_t * \tilde{C}_t \) 를 더한다.
      • 이 더하는 값은 두 번째 단계에서 업데이트하기로 한 값을 얼마나 업데이트할 지 정한 만틈 scale한 값

LSTM의 cell state 업데이트

  • Output gate \( o_t \)
    • 마지막으로 무엇을 output으로 내보낼지 정함
    • 이 output은 cell state를 바탕으로 필터된 값이 될 것임
    • 먼저 sigmoid layer에 input 데이터를 통과시켜서 cell state의 어느 부분을 output으로 내보낼지 결정
    • → cell state를 tanh layer를 통과시켜 -1과 1 사이의 값을 받은 뒤
    • → 방금 전에 계산한 sigmoid gate의 output과 곱해줌
    • → 그렇게 하면 우리가 output으로 보내고자 하는 부분만 내보낼 수 있게 됨

LSTM의 output gate layer

 

 

728x90
LIST
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
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 31
글 보관함