-
RNN(Recurrent Neural Network) 이해하기Machine Learning/Neural Network 2019. 7. 9. 01:48
문장에서 어떤 단어를 번역할 때 우리는 그 단어의 이전 문맥을 고려합니다.
문맥을 고려하지 않으면 여러 뜻을 가진 단어의 경우 엉뚱하게 번역할 가능성이 큽니다.
이처럼 연속된 데이터의 특징을 이해해야 해결할 수 있는 문제들이 있습니다.
연속된 데이터, 즉 순차 데이터(Sequential data)를 다룰 수 있게 설계된 신경망이 순환 신경망(RNN : Recurrent Neural Network)입니다.
주가 예측, AI 작곡/작사, 기계 번역, 음성 인식 등 순차 데이터를 다루는 문제가 RNN의 주요 과제입니다.
RNN의 구조
RNN은 과거의 정보를 현재에 반영해 학습하도록 설계되었습니다. 이 컨셉을 통해 시간 순서로 나열된 데이터를 학습합니다.
이전 상태로부터 전달된 값을 히든 스테이트(hidden state)라고 하고 이는 현재의 영향을 받아 매번 갱신됩니다.
위의 그림을 예로 들면, 현재 타임 스텝의 히든 스테이트 ht는 인풋 Xt와 이전 히든 스테이트 ht-1의 영향을 받아 갱신되는 것입니다.
학습 방법
다른 신경망과 마찬가지로 RNN 역시 경사 하강법(Gradient Descent)과 오차 역전파(backpropagation)를 이용해 학습합니다.
정확하게는 시간 흐름에 따른 작업을 하기 때문에 역전파를 확장한 BPTT(Back-Propagation Through Time)를 사용해서 학습합니다.
RNN의 문제점
하지만 이론과 달리 RNN은 학습이 쉽지 않습니다.
학습 데이터의 길이가 길어질수록 먼 과거의 정보를 현재에 전달하기 힘들기 때문인데요.
역전파 도중, 과거로 올라가면 올라갈수록 gradient 값이 소실(0에 수렴)되는 문제를 Vanishing gradient 문제라고 합니다.
RNN의 문제점에 대한 논의는 다음 논문에서 다뤄졌습니다. [참조 논문]
결과적으로, RNN이 처리하지 못하는 장기 의존성(Long-Term dependencies) 문제를 다루기 위해 LSTM(Long Short-Term Memory)이 고안되었습니다.
※ Exploding gradient
Vanishing gradient와는 반대로 gradient 값이 무한대로 커지는 Exploding gradient 문제의 경우 미리 최대 값을 지정해주는 방법으로 해결이 가능합니다.RNN은 왜 tanh를 사용할까?
RNN은 주로 하이퍼볼릭 탄젠트를 활성화 함수(activation function)로 사용합니다. 왜 그럴까요?
reddit에서도 같은 질문을 찾을 수 있는데요.
여러 의견이 있기 때문에 제가 생각하기에 가장 설득력 있는 의견을 다루겠습니다.
RNN에서 주로 tanh를 사용하는 이유는,
RNN의 Vanishing gradient 문제를 예방하기 위해서 gradient가 최대한 오래 유지될 수 있도록 해주는 역할로 tanh가 적합하기 때문입니다.
sigmoid와 tanh를 비교해 보겠습니다.
sigmoid
tanh
두 함수의 derivative(주황색 그래프) 수치를 보면 sigmoid에 비해 tanh의 미분 최대값이 상대적으로 크다는 사실을 알 수 있습니다.
즉, sigmoid의 경우 곱셈이 거듭되면서 Vanishing gradient 문제가 생길 가능성이 상대적으로 크기 때문에 tanh를 사용하는 것이 gradient를 잃지 않는데 유리하다고 할 수 있습니다.
LSTM부터는 다음 포스팅에서 이어가겠습니다.
Reference
˙colah's blog "Understanding LSTMs"
˙ratsgo's blog "RNN과 LSTM을 이해해보자!"
˙Team AI Korea blog "BPTT와 Vanishing Gradient 문제"
댓글