순환 신경망(Recurrent Neural Network, RNN)은 「시간 순서가 중요한 데이터(문장·음성·시계열)」를 다루기 위해 설계된 신경망입니다.
CNN이 공간(2D 이미지)에 특화됐다면 RNN은 시간(1D 시퀀스)에 특화된 구조입니다.
RNN의 핵심 아이디어는 「자기 자신의 출력을 다음 입력에 다시 넣는」 순환 구조입니다.
한 단어씩 차례로 받으면서 「지금까지의 정보를 기억하는 내부 상태(hidden state)」를 업데이트해 갑니다.
다음 시점에서는 새 입력과 기억한 상태를 함께 보고 다음 출력을 결정합니다.
비유하자면 RNN은 「소설을 한 단어씩 읽으면서 머릿속에 줄거리 메모를 계속 갱신하는 독자」와 같습니다.
매 단어를 읽을 때마다 새로운 단어와 「지금까지의 줄거리」를 함께 고려해 다음 의미를 이해합니다.
RNN은 2010년대 초반까지 음성 인식, 기계 번역, 텍스트 생성의 주류였습니다.
구글 번역의 첫 신경망 버전(GNMT, 2016)도 RNN 기반이었고, 음성 인식의 Deep Speech도 RNN 변종이었습니다.
그러나 RNN은 두 가지 큰 한계가 있었습니다.
첫째, 「긴 시퀀스에서 앞쪽 정보가 잊혀지는」 그래디언트 소실 문제.
둘째, 「한 단어씩 차례로 처리해야 해서 GPU 병렬화가 어려운」 속도 문제.
이 두 한계를 LSTM·GRU(첫 번째)와 Transformer(두 번째)가 차례로 극복했습니다.
한 줄 요약
RNN은 자기 출력을 다음 입력에 다시 넣는 순환 구조로 시간 순서의 데이터를 다룹니다.
그러나 긴 시퀀스에서의 망각과 GPU 병렬화 어려움 때문에 LSTM·Transformer로 발전해 왔습니다.
더 알아볼 것
- RNN의 BPTT(시간 역전파)
- 양방향 RNN(BiRNN)
- RNN의 학습 불안정성과 그래디언트 클리핑