728x90
RNN(Recurrent Neural Network)
- 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의 변형 모델이 제안되었습니다.
- 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
- 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 함수를 사용한다.
- Loss(Cross-Entropy Loss)
- Loss는 각 과정마다 구하고 이를 전부 더한 전체 Loss $L$을 사용한다.
- Backpropagation은 모든 시점의 Loss의 합 L에 대해 이뤄진다.
- Cross-Entropy Loss는 실제 정답값과 모델이 예측한 확률값 간의 차이를 계산합니다.
- 만약 모델이 정답 클래스를 정확하게 예측했다면, 해당 클래스에 대한 확률값은 1이고, 나머지 클래스에 대한 확률값은 0이 됩니다.
- 이 경우, Cross-Entropy Loss는 0이 됩니다. 하지만 모델이 정답 클래스를 잘못 예측했다면, 해당 클래스에 대한 확률값은 작아지고, 다른 클래스에 대한 확률값은 커집니다. 이 경우, Cross-Entropy Loss는 증가하게 됩니다.
- 따라서, Cross-Entropy Loss는 모델의 예측값과 실제 정답값 간의 차이를 최소화하기 위한 목적 함수로 사용됩니다. Cross-Entropy Loss를 최소화하는 방향으로 학습을 진행하면, 모델이 더욱 정확한 예측을 수행할 수 있게 됩니다.
- $y_{t,i}$는 실제 정답값(target)이 $i$번째 클래스인지 여부를 나타내며,
- CE = $- \sum_{t=1}^{T} \sum_{i=1}^{C} y_{t,i} \log(\hat{y}_{t,i})$
728x90
'Data > ML&DL' 카테고리의 다른 글
CNN을 활용해서 주식차트를 학습해서 예측하자. 1부. 서론~데이터수집 (0) | 2023.05.29 |
---|---|
Attention(Seq2Seq와 Attention) (0) | 2023.04.23 |
FFNN(Feed Forward Neural Net) (0) | 2023.04.22 |
음성인식개론(문제정의, 저장방법, Tokenization) (0) | 2023.04.22 |
-1- 머신러닝과 수학 (최적화) (0) | 2022.05.08 |