순환 신경망이라고 부르는 RNN에 대한 내용을 정리해보겠습니다.
RNN
RNN은 Recurrent Neural Network의 줄임말로, 순환하는 신경망이라고 직역할 수 있습니다.
(Recursive Neural Network, 재귀 신경망과는 다른 신경망입니다.)
RNN은 음성이나 문자처럼 순차적으로 나타나는 Sequence data(시계열 데이터)에 적합한 모델로 알려져있습니다.
구조를 보면서 왜 그런지 생각해봅시다.
RNN의 기본 구조
RNN의 기본 구조입니다.
시계열 데이터 $(x_0, x_1, \dots, x_t, \dots)$ 가 RNN 계층에 입력되고, $(h_0, h_1, \dots, h_t, \dots)$ 가 출력되는 것을 표현하고 있습니다.
그림을 보면 출력이 두개로 분기 돼 하나는 그대로 출력, 하나는 자기 자신에 입력되는 것을 알 수 있습니다. 즉, 순환하고 있습니다.
위의 그림을 쭉 펼쳐서 좀 더 친숙한 그림으로 보겠습니다.
위의 그림에서 알 수 있듯이 시계열 데이터의 길이에 관계없이 입력과 출력을 받아들일 수 있기에, 유연하게 구조를 만들 수 있는 것이 장점입니다.
출력 계산
[그림 2]의 예시를 수식으로 한번 나타내보겠습니다.
즉, $h_t$를 현재 state, $h_{t-1}$을 직전 state으로 생각하고 현재 상태의 출력을 계산하는 수식을 한번 봅시다.
활성화 함수는 하이퍼볼릭탄젠트(tanh)를 사용한다고 가정하겠습니다.
$ h_t = tanh(h_{t-1}W_h + x_t W_x + b) $
수식을 보면 가중치가 두개임을 확인할 수 있습니다.
1. 입력 $x$를 출력$h$로 변환하기 위한 가중치
2. $W_x$와 RNN의 직전 state$h_{t-1}$을 다음 state {h_t}로 변환하기 위한 가중치 $W_h$ 입니다.
이처럼 RNN은 $h$라는 '상태'를 가지고 있으며 위의 수식과 같은 형태로 '상태'가 갱신된다. 라고도 해석할 수 있습니다.
그래서 RNN을 '상태를 가진다.' '메모리가 있다.' 라고도 표현합니다.
이렇게 state $h_t$를 계산하고, Output $y_t$는 아래와 같이 y의 가중치를 곱해서 계산됩니다.
RNN의 문제
RNN은 과거의 정보를 기억할 수 있지만, 관련 정보와 그 정보를 사용하는 지점 사이 거리가 멀어질 경우 성능이 저하됩니다. 역전파시에 기울기 소실 또는 폭발이 일어나기 때문입니다.
RNN은 Long-Term Dependencies가 없다고 합니다. (장기 의존 관계를 학습하기 어렵다.)
다음 시간에는 이런 RNN의 문제를 해결할 수 있는 LSTM에 대해 알아보겠습니다.
읽어주셔서 감사합니다.^^
[참고자료]
[1] https://www.youtube.com/watch?v=-SHPG_KMUkQ
[2] 밑바닥부터 시작하는 딥러닝 2 (사이토 고키)
'머신러닝, 딥러닝 ML, DL > 이론' 카테고리의 다른 글
[Deep Learning] seq2seq (Encoder - Decoder) (0) | 2021.08.18 |
---|---|
[Deep Learning] LSTM 개념 정리 (2) | 2021.08.13 |
[Deep Learning] 10. CNN, 풀링 계층 (Pooling Layer) (0) | 2021.08.12 |
[Deep Learning] 9. CNN, 합성곱 계층, 패딩, 스트라이드 (2) | 2021.08.11 |
[Deep Learning] 8. 합성곱 신경망, CNN의 구조 (0) | 2021.08.11 |