Python으로 딥러닝하기|RNN(Recurrent Neural Networks) Part1. 이론
안녕하세요!
오늘은 "파이썬으로 딥러닝 하기!" 중 RNN에 대해 알아보도록 하겠습니다~
딥러닝 알고리즘 중 CNN은 이전 포스팅에서 다뤘습니다.
먼저,
RNN이란 Recurrent Neural Networks로 순환 신경망이라고 합니다.
RNN은 시퀀스 데이터, 예를 들어 음성, NLP, 동영상 등의 데이터에서 사용됩니다.
[기존 DNN과 RNN 비교]
RNN이 기존 딥러닝 알고리즘과 가장 다른 점은
뉴런의 상태를 저장하고 다음 스텝에서 입력으로 사용함으로
긴 시퀀스에 대해서도 예측할 수 있다는 것입니다.
<RNN, 순환 신경망 구조>
이미지 출처: 성킴_RNN_YouTube강의
모든 뉴런은 이전 층의 모든 뉴런에서 나오는 입력 연결과 이어지는 층으로
모든 뉴런을 유도하는 출력 연결 둘 다를 가지고 있습니다.
하지만 전방향층과 달리 순환층은 순환 연결이 있으며 동일한 층의 뉴런 간에 정보를 전파합니다.
따라서 순환 신경망에서 뉴런 활성도는 신경망 인스턴스의 누적 상태를 나타냅니다.
<RNN 종류>
이미지 출처: 성킴_RNN_YouTube강의
RNN은 위와 같이 입력과 출력의 개수에 따라 다양하게 구성할 수 있습니다.
many-to-one: 마지막 출력 값이 label 값과 같아지는 것이 목표
many-to-many: 입력 데이터를 차례대로 입력하면 차례로 출력 데이터 출력
[RNN의 한계]
RNN의 Gradient Vanishing(기울기 소실) 문제
과거 여러 단계 입력들에 대해 계산할 때,
경사(Gradient)가 빠르게 줄어들어 (즉, 오차가 더 줄어들지 못하고 수렴하는 문제 발생)
장기 의존성을 학습하는 모델의 능력이 심각하게 제한됩니다.
이 문제를 해결하기 위해 LSTM 구조를 도입했습니다.
LSTM은 다음 포스팅에서 다루도록 하겠습니다.
※ 참고: Back-Propagation Through Time (BPTT)
RNN은 시간에 따라 펼쳐 놓으면 MLP(Multi-Layer Propagation)와 유사하기 때문에
Back-Propagation방법으로 Gradient를 계산할 수 있습니다.
오늘은 여기까지!
다음 포스팅으로 돌아오겠습니다~