What is RNN ?
rnn은 이름에서도 알 수 있듯이 반복되는 구조의 신경망이다.
즉, 한 rnn 유닛이 여러 time step를 가질 수 있어서, 임이의 길이의 정보를 처리할 수 있다.
이때 한 rnn 유닛은 모든 time step에서 가중치를 공유한다.
또 rnn은 이러한 구조 덕분에 시계열 데이터나 순차적인 데이터 처리를 잘한다.
주의해야될 점이 있는데 이는 rnn이 시간에 따라 측정된 데이터를 다 처리할 수 있다는 것은 아니다.
rnn은 stationary한 데이터 즉, 시간에 따른 확률 분표의 변화가 (적거나)없는 데이터를 가장 잘 처리한다.
rnn이 모든 time step에 대해 가중치를 공유하는 이유도 이러한 가정에 바탕을 둔 것으로 생각할 수 있다.
왜 굳이 mlp대신 rnn을 사용하는지 의문이 들 수 있다.
rnn대신 mlp를 사용했을때 생길수 있는 문제점들은 다음과 같다.
- 파라미터 수가 너무 많아진다.
- 임이의 길이의 데이터를 처리하지 못한다.
- 각 time step에서 파라미터를 공유하지 않으므로 일반화 능력이 떨어질 수 있다. (즉, overfitting)
Vanilla RNN
가장 기본적인 rnn은 다음과 같이 계산된다.
$ h_t = \sigma_h(W_h x_t + U_h h_{t-1} + b_h) \\
y_t = h_t $
$x_t$ : 타임스탭 $t$일때의 입력
$h_t$ : 타임스탭 $t$일때의 hidden state
$y_t$ : 타임스탭 $t$일때의 출력
$W, U, b$ : 가중치하고 bias
$\sigma$ : 활성화 함수
이 그림은 위의 식을 도식화 한 것이다.
LSTM - Long Short Term Memory
lstm은 rnn의 변형으로, 주요 특징은 게이트가 추가되었다는 것이다.
게이트 vanishing/exploding gradient 문제를 많이 줄였다고 한다.
forget gate, input gate, output gate는 각각 다음과 같이 계산된다.
$ f_t = \sigma (W_f x_t + U_f h_{t-1} + b_f) \\
i_t = \sigma (W_i x_t + U_i h_{t-1} + b_i) \\
o_t = \sigma (W_o x_t + U_o h_{t-1} + b_o) $
cell state는 다음과 같이 계산된다.
$ \tilde{c}_t = \text{tanh}(W_c x_t + U_c h_{t-1} + b_c) \\
c_t = f_t \cdot c_{t-1} + i_t \cdot \tilde{c}_t $
hidden state는 다음과 같이 계산된다.
$ h_t = o_t \cdot \text{tanh}(c_t) $
activation function들은 각각 다음과 같다.
$\sigma$ : sigmoid
$\text{tanh}$ : hyperbolic tangent
LSTM은 보통 다음과 같이 그린다.
GRU - Gated Recurrent Unit
GRU는 LSTM의 구조를 좀더 간단하게 만든 형태이다.
GRU는 LSTM에 비해 계산 과정과 파라미터 수가 적어서 학습 속도가 빠르다.
성능 또한 LSTM과 비슷하기도 하지만, LSTM의 구조가 좀더 복잡하다 보니 LSTM의 성능이 좀더 좋다고도 한다.
(간단한 모델에는 GRU를 써도 충분한듯하다.)
GRU의 reset gate와 update gate는 각각 다음과 같다.
$ r_t = \sigma (W_r x_t + U_r h_{t-1} + b_r) \\
z_t = \sigma (W_z x_t + U_z h_{t-1} + b_z) $
hidden state는 다음과 같이 계산된다.
$ \tilde{h}_t = \text{tanh} (W_h x_t + U_h (r_t \cdot h_{t-1}) + b_h) \\
h_t = (1 - z_t) \cdot h_{t-1} + z_t \cdot \tilde{h}_t $
GRU는 다음과 같이 그린다.
'인공지능' 카테고리의 다른 글
Cross Entropy Derivation (0) | 2024.03.11 |
---|---|
CS234 Notes - Lecture 2 번역본 (0) | 2023.11.17 |
머신러닝에 쓰이는 정보이론 (0) | 2023.09.04 |
Optimizer 정리 (2) | 2023.08.24 |
Convolutional Neral Network (0) | 2023.08.15 |