RNN(Recurrent Neural Network)이란?
꼭 알아야 할 3가지 사항
RNN(Recurrent Neural Network)은 시계열 또는 순차 데이터를 예측하는 딥러닝을 위한 신경망 아키텍처입니다.
RNN은 다양한 길이의 순차 데이터로 작업하고 자연 신호 분류, 언어 처리, 비디오 분석 등의 문제를 해결하는 데 특히 효과적입니다.
RNN(Recurrent Neural Network)은 과거의 정보를 사용하여 현재 및 미래의 입력에 대한 신경망의 성능을 개선하는 딥러닝 구조입니다. RNN의 독특한 점은 신경망에 은닉 상태 및 루프가 있다는 것입니다. 루프 구조를 통해 신경망은 은닉 상태에 과거의 정보를 저장하고 시퀀스에 대해 연산할 수 있습니다.
RNN은 과거의 정보를 현재 입력에 어떻게 적용할까요? 이 신경망에는 두 개의 가중치 세트가 있습니다. 하나는 은닉 상태 벡터에 대한 가중치 세트이며, 다른 하나는 입력에 대한 가중치 세트입니다. 신경망은 훈련 중에 입력과 은닉 상태, 두 가지 모두에 대한 가중치를 학습합니다. 구현이 되면 출력은 현재 입력, 그리고 이전 입력을 기반으로 하는 은닉 상태를 기반으로 합니다.
LSTM
실제로는 단순한 RNN은 장기적인 종속성 학습에서 문제를 겪습니다. RNN은 일반적으로 역전파를 통해 훈련되며, 여기서 “소실” 또는 “폭주”하는 기울기 문제에 직면할 수 있습니다. 이러한 문제로 인해 신경망의 가중치가 아주 작아지거나 아주 커지므로 장기적인 관계를 학습하기에는 효율성이 떨어지게 됩니다.
이 문제를 극복하는 특수한 RNN 유형이 LSTM(장단기 기억) 신경망입니다. LSTM 신경망은 부가적인 게이트를 사용하여 은닉 셀의 어느 정보가 출력과 다음 은닉 상태까지 보내지는지를 제어합니다. 이를 통해 신경망은 데이터의 장기적인 관계를 더 효과적으로 학습할 수 있습니다. LSTM은 일반적으로 구현되는 RNN 유형입니다.
양방향 LSTM은 시계열 또는 시퀀스 데이터의 시간 스텝 간 양방향 종속성을 학습합니다. 이러한 종속성은 신경망이 각 시간 스텝에서 전체 시계열을 학습하도록 하려는 경우에 유용할 수 있습니다. 장기 종속성을 학습하는 또 다른 RNN의 변형은 게이트 RNN입니다. MATLAB®에서는 양방향 LSTM과 게이트 RNN을 훈련시키고 작업에 사용할 수 있습니다.
MATLAB에서 RNN 예제 시작하기
RNN은 다음과 같은 응용 분야에서 핵심 기술로 사용됩니다.
RNN을 사용해야 하는 경우
분류 및 회귀 작업에서 시퀀스 및 시계열 데이터로 작업하는 경우 RNN 사용을 고려할 수 있습니다. 비디오는 본질적으로 영상의 시퀀스이므로 RNN은 비디오에도 효과적입니다. 신호를 사용한 작업과 마찬가지로 시퀀스를 RNN으로 공급하기 전에 특징 추출을 하는 것이 좋습니다. 각 프레임에 대한 특징 추출을 위해 CNN(예: GoogLeNet)을 활용할 수 있습니다.
분류, 회귀, 비디오 분류 작업을 위한 RNN 신경망 아키텍처.
텍스트, 신호, 비디오에 RNN을 사용하는 MATLAB 예제를 살펴볼 수 있습니다.
MATLAB을 Deep Learning Toolbox™와 함께 사용하면 RNN을 설계, 훈련 및 배포할 수 있습니다. Text Analytics Toolbox™ 또는 Signal Processing Toolbox™를 사용하면 텍스트 또는 신호 분석에 RNN을 적용할 수 있습니다.
신경망의 설계 및 훈련
단 몇 줄의 MATLAB 코드를 사용하여 프로그래밍 방식으로 RNN을 생성하고 훈련시킬 수 있습니다. 순환 계층(LSTM 계층, 양방향 LSTM 계층, 게이트 순환 계층 및 LSTM 투영 계층)을 사용하여 RNN을 구축할 수 있습니다. RNN 신경망의 단어 임베딩 계층을 사용하여 단어를 숫자형 시퀀스로 매핑할 수 있습니다.
심층 신경망 디자이너 앱을 사용하여 대화형 방식으로 RNN을 생성하고 훈련시킬 수도 있습니다. 정확도, 손실, 검증 메트릭 플롯을 사용하여 훈련을 모니터링할 수 있습니다.