Data/ML&DL

RNN(Recurrent Neural Network)

동동 2023. 4. 23. 00:55
728x90

RNN(Recurrent Neural Network)

  1. RNN이란? 시간축상으로 FFNN을 펼쳐놓은 것! 😊
    • RNN(Recurrent Neural Network)은 순환 신경망(recurrent neural network)의 한 종류로, 시퀀스(sequence) 형태의 데이터를 처리하는 데에 사용됩니다. 시퀀스 데이터는 텍스트, 음성, 비디오, 주가 등 다양한 형태가 있으며, 이러한 데이터는 시간에 따라 변화하는 특성을 가지고 있습니다.
    • RNN은 이전에 처리한 정보를 현재 처리하는데에 사용하는 메모리(memory) 개념을 도입하여, 입력 데이터의 시간적 특성을 고려할 수 있습니다. 이전 입력 값에 대한 정보를 다음 입력 값에 전달하여, 일련의 입력 데이터를 처리하는 과정에서 각 시점(time step)에서 동일한 가중치(weight)를 사용합니다.
    • RNN은 텍스트 생성, 번역, 감정 분석, 음성 인식 등 다양한 분야에서 사용되고 있습니다. 하지만, RNN의 단점 중 하나는 시퀀스의 길이가 길어질수록 이전 정보가 현재에 미치는 영향력이 줄어들기 때문에 장기 의존성(long-term dependency)을 학습하는 데에 어려움이 있다는 것입니다. 이러한 문제를 해결하기 위해 LSTM(Long Short-Term Memory)이나 GRU(Gated Recurrent Unit)와 같은 RNN의 변형 모델이 제안되었습니다.
  2. RNN의 hidden State 공식

 🎑 $h_t = f\left(h_{t-1}W_{hh} + x_tW_{xh} \right)$

  • $x_t$ : 현재 시점의 입력 벡터
  • $h_t$ : 현재 시점의 은닉 상태
  • $W_{xh}$ / $W_{hh}$ : 입력벡터와 이전 시점의 은닉 상태를 혼합하기 위한 가중치 행렬
  • $f$ : Tanh 

  1. RNN의 과정
    • RNN은 시퀀스 데이터를 처리하기 위해 시간의 흐름에 따라 계산을 반복합니다. 각 시간 단계에서, RNN은 현재 입력 및 이전 시간 단계에서의 은닉 상태를 사용하여 새로운 은닉 상태와 출력을 계산합니다. 이전에 계산된 은닉 상태가 새로운 입력과 함께 사용되어 새로운 은닉 상태와 출력이 계산되므로, RNN은 시퀀스 데이터를 처리할 수 있습니다.
    • 아래는 RNN의 업데이트 예시입니다. 이 예시에서는 단순히 하나의 입력 벡터를 받아 시퀀스의 모든 시간 단계에서 동일한 출력을 생성합니다.
    • 우선, RNN은 초기 시간 단계에서 초기 은닉 상태 $h_0$를 0으로 초기화합니다. 그런 다음 시간 단계 $t$에서 RNN은 입력 벡터 $x_t$와 이전 시간 단계의 은닉 상태 $h_{t-1}$를 사용하여 새로운 은닉 상태 $h_t$와 출력 $o_t$를 계산합니다. $h_t = f\left(h_{t-1}W_{hh} + x_tW_{xh} \right)$
    • $o_t = W_{ho} h_t$
    • 여기서 $W_{hh}$, $W_{xh}$, $W_{ho}$는 각각 입력 벡터, 이전 은닉 상태, 현재 은닉 상태와 출력 사이의 가중치 매트릭스입니다. $\text{tanh}$는 하이퍼볼릭 탄젠트 함수입니다. 이 식은 각 시간 단계에서 현재 입력과 이전 은닉 상태의 조합을 사용하여 새로운 은닉 상태를 계산하고, 그 상태에서 출력을 계산하는 방식으로 작동합니다.
    • 이후, RNN은 다음 시간 단계에서 이전 시간 단계에서의 은닉 상태 $h_t$를 현재 시간 단계에서의 은닉 상태 $h_{t+1}$로 업데이트합니다. 이전의 출력은 다음 계산에 영향을 주지 않습니다. 이것은 RNN이 시퀀스 데이터를 처리할 때 이전 시간 단계에서의 정보를 보존할 수 있도록 하는 중요한 메커니즘입니다.
    • $o_t = W_{ho} h_t$를 구한 후 $o_t$에 Softmax 함수를 사용한다.

  1. Loss(Cross-Entropy Loss)
    1. Loss는 각 과정마다 구하고 이를 전부 더한 전체 Loss $L$을 사용한다.
    2. Backpropagation은 모든 시점의 Loss의 합 L에 대해 이뤄진다.
     🎑 RNN의 Cross-Entropy Loss는 다음과 같이 계산됩니다.여기서 $T$는 시퀀스의 길이를 나타내며, $C$는 분류(class)의 개수입니다.$\hat{y}_{t,i}$는 모델이 $t$번째 타임 스텝에서 $i$번째 클래스를 예측한 확률값을 나타냅니다.
    • Cross-Entropy Loss는 실제 정답값과 모델이 예측한 확률값 간의 차이를 계산합니다.
    • 만약 모델이 정답 클래스를 정확하게 예측했다면, 해당 클래스에 대한 확률값은 1이고, 나머지 클래스에 대한 확률값은 0이 됩니다.
    • 이 경우, Cross-Entropy Loss는 0이 됩니다. 하지만 모델이 정답 클래스를 잘못 예측했다면, 해당 클래스에 대한 확률값은 작아지고, 다른 클래스에 대한 확률값은 커집니다. 이 경우, Cross-Entropy Loss는 증가하게 됩니다.
    • 따라서, Cross-Entropy Loss는 모델의 예측값과 실제 정답값 간의 차이를 최소화하기 위한 목적 함수로 사용됩니다. Cross-Entropy Loss를 최소화하는 방향으로 학습을 진행하면, 모델이 더욱 정확한 예측을 수행할 수 있게 됩니다.
  2. $y_{t,i}$는 실제 정답값(target)이 $i$번째 클래스인지 여부를 나타내며,
  3. CE = $- \sum_{t=1}^{T} \sum_{i=1}^{C} y_{t,i} \log(\hat{y}_{t,i})$

 

728x90