RNN (Recurrent Neural Network)

RNN(Recurrent Neural Network)이란?

꼭 알아야 할 3가지 사항

RNN(Recurrent Neural Network)은 시계열 또는 순차 데이터를 예측하는 딥러닝을 위한 신경망 아키텍처입니다.

RNN은 다양한 길이의 순차 데이터로 작업하고 자연 신호 분류, 언어 처리, 비디오 분석 등의 문제를 해결하는 데 특히 효과적입니다.

RNN의 작동 방식

RNN(Recurrent Neural Network)은 과거의 정보를 사용하여 현재 및 미래의 입력에 대한 신경망의 성능을 개선하는 딥러닝 구조입니다. RNN의 독특한 점은 신경망에 은닉 상태 및 루프가 있다는 것입니다. 루프 구조를 통해 신경망은 은닉 상태에 과거의 정보를 저장하고 시퀀스에 대해 연산할 수 있습니다.

RNN은 과거의 정보를 현재 입력에 어떻게 적용할까요? 이 신경망에는 두 개의 가중치 세트가 있습니다. 하나는 은닉 상태 벡터에 대한 가중치 세트이며, 다른 하나는 입력에 대한 가중치 세트입니다. 신경망은 훈련 중에 입력과 은닉 상태, 두 가지 모두에 대한 가중치를 학습합니다. 구현이 되면 출력은 현재 입력, 그리고 이전 입력을 기반으로 하는 은닉 상태를 기반으로 합니다.

RNN의 셀 하나를 펼친 모습의 다이어그램. 데이터 시퀀스에 대해 정보가 신경망 안에서 어떻게 움직이는지 볼 수 있습니다. 입력은 셀의 은닉 상태에 의해 계산되어 출력을 생성하고, 은닉 상태는 다음 시간 스텝으로 전달됩니다.

RNN의 셀 하나를 펼친 모습. 데이터 시퀀스에 대해 정보가 신경망 안에서 어떻게 움직이는지 볼 수 있습니다. 입력은 셀의 은닉 상태에 의해 계산되어 출력을 생성하고, 은닉 상태는 다음 시간 스텝으로 전달됩니다.

LSTM

실제로는 단순한 RNN은 장기적인 종속성 학습에서 문제를 겪습니다. RNN은 일반적으로 역전파를 통해 훈련되며, 여기서 “소실” 또는 “폭주”하는 기울기 문제에 직면할 수 있습니다. 이러한 문제로 인해 신경망의 가중치가 아주 작아지거나 아주 커지므로 장기적인 관계를 학습하기에는 효율성이 떨어지게 됩니다.

이 문제를 극복하는 특수한 RNN 유형이 LSTM(장단기 기억) 신경망입니다. LSTM 신경망은 부가적인 게이트를 사용하여 은닉 셀의 어느 정보가 출력과 다음 은닉 상태까지 보내지는지를 제어합니다. 이를 통해 신경망은 데이터의 장기적인 관계를 더 효과적으로 학습할 수 있습니다. LSTM은 일반적으로 구현되는 RNN 유형입니다.

RNN과 LSTM 신경망을 나란히 보여주는 다이어그램. RNN은 입력에 은닉 상태를 사용하며, 이 상태는 다음 시간 스텝에서 RNN에 대한 추가 입력으로도 사용됩니다. LSTM은 망각 게이트와 기억 셀 같은 추가 유닛을 사용하여 소실 및 폭주하는 기울기 문제를 방지합니다.

RNN(왼쪽)과 LSTM 신경망(오른쪽)의 비교.

양방향 LSTM은 시계열 또는 시퀀스 데이터의 시간 스텝 간 양방향 종속성을 학습합니다. 이러한 종속성은 신경망이 각 시간 스텝에서 전체 시계열을 학습하도록 하려는 경우에 유용할 수 있습니다. 장기 종속성을 학습하는 또 다른 RNN의 변형은 게이트 RNN입니다. MATLAB®에서는 양방향 LSTM과 게이트 RNN을 훈련시키고 작업에 사용할 수 있습니다.

MATLAB에서 RNN 예제 시작하기

RNN이 중요한 이유

RNN은 다음과 같은 응용 분야에서 핵심 기술로 사용됩니다.

신호 처리

신호는 일정 시간에 걸쳐 센서로부터 수집되는 경우가 많으므로 본질적으로 순차적인 데이터입니다. 대규모 신호 데이터셋에 대해 자동 분류회귀를 수행하면 실시간 예측이 가능합니다. 원시 신호 데이터를 심층 신경망에 입력하거나 전처리하여 주파수 성분과 같은 특정한 특징에 집중할 수 있습니다. 특징 추출은 신경망의 성능을 대폭 개선할 수 있습니다.

텍스트 분석

언어는 본질적으로 순차적이며, 텍스트 조각의 길이는 다양합니다. RNN은 문장의 단어를 맥락화하는 방법을 학습할 수 있기 때문에 텍스트 분류, 텍스트 생성, 기계 번역, 감성 분석(단어와 구의 의미 범주화) 등의 자연어 처리 작업에 매우 유용한 툴입니다.

RNN을 사용해야 하는 경우

분류 및 회귀 작업에서 시퀀스 및 시계열 데이터로 작업하는 경우 RNN 사용을 고려할 수 있습니다. 비디오는 본질적으로 영상의 시퀀스이므로 RNN은 비디오에도 효과적입니다. 신호를 사용한 작업과 마찬가지로 시퀀스를 RNN으로 공급하기 전에 특징 추출을 하는 것이 좋습니다. 각 프레임에 대한 특징 추출을 위해 CNN(예: GoogLeNet)을 활용할 수 있습니다.

분류, 회귀, 비디오 분류 작업을 위한 RNN 구축에 사용되는 계층이 포함된 RNN 신경망 아키텍처의 다이어그램.

분류, 회귀, 비디오 분류 작업을 위한 RNN 신경망 아키텍처.

텍스트, 신호, 비디오에 RNN을 사용하는 MATLAB 예제를 살펴볼 수 있습니다.

MATLAB을 사용한 RNN

MATLABDeep Learning Toolbox™와 함께 사용하면 RNN을 설계, 훈련 및 배포할 수 있습니다. Text Analytics Toolbox™ 또는 Signal Processing Toolbox™를 사용하면 텍스트 또는 신호 분석에 RNN을 적용할 수 있습니다.

신경망의 설계 및 훈련

단 몇 줄의 MATLAB 코드를 사용하여 프로그래밍 방식으로 RNN을 생성하고 훈련시킬 수 있습니다. 순환 계층(LSTM 계층, 양방향 LSTM 계층, 게이트 순환 계층LSTM 투영 계층)을 사용하여 RNN을 구축할 수 있습니다. RNN 신경망의 단어 임베딩 계층을 사용하여 단어를 숫자형 시퀀스로 매핑할 수 있습니다.

심층 신경망 디자이너 앱을 사용하여 대화형 방식으로 RNN을 생성하고 훈련시킬 수도 있습니다. 정확도, 손실, 검증 메트릭 플롯을 사용하여 훈련을 모니터링할 수 있습니다.

신경망 배포

훈련된 RNN을 임베디드 시스템, 엔터프라이즈 시스템, FPGA 소자 또는 클라우드배포할 수 있습니다. Intel®, NVIDIA® 및 ARM® 라이브러리로부터 코드를 생성하여 고성능 추론 속도를 갖춘 배포 가능한 RNN을 만들 수도 있습니다.

심층 신경망 디자이너 앱을 사용하여 대화형 방식으로 구축된 단순 BiLST 신경망의 스크린샷.

RNN 신경망을 대화형 방식으로 구축, 시각화 및 편집하는 심층 신경망 디자이너 앱.

코더 제품을 통해 딥러닝 신경망을 Intel, NVIDIA, ARM 같은 임베디드 타겟에 연결하는 다이어그램.

훈련된 딥러닝 신경망을 프로덕션으로 신속히 배포.