PYTHON으로 딥러닝하기

Python으로 딥러닝하기|RNN(Recurrent Neural Networks) Part1. 이론

euni_joa 2019. 5. 14. 23:32
반응형

 

 

 

 

안녕하세요!

 

오늘은 "파이썬으로 딥러닝 하기!" 중 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를 계산할 수 있습니다.

 

 


 

오늘은 여기까지!

 

다음 포스팅으로 돌아오겠습니다~

반응형