brunch

자연어를 처리하는 신경망 어떤 모습일까?(ft.RNN)

RNN(순환 신경망) 알아보기

by 별똥별 shooting star


들어가며

지금까지는 자연어를 어떻게 전처리할지에 중점을 두고 공부를 해왔다. 그래서 텍스트를 분포로 벡터화 시키는 방법과 다양한 워드 임베딩 기법에 대해서 배워왔다. 이제는 이렇게 처리된 자연어를 바탕으로 신경망 학습을 하는 방법을 살펴보고자 한다. 그중 가장 기본이 되는 RNN 신경망부터 살펴보도록 하겠다.


1. RNN이란?

RNN이란 Recurrent라는 라틴에서 파생된 뜻으로, ' 몇 번이나 반복해서 일어나는 일'을 뜻한다. 직역을 하면 '순환하는 신경망'이라는 뜻을 가지고 있다.

image.png

출처 : 밑바닥부터 시작하는 딥러닝2

RNN의 특징은 순환하는 경로 즉 닫힌 경로가 있다. 이 순환 경로를 따라 데이터는 끊임없이 순환할 수 있다. 그렇다면 왜? 순환을 해야 할까? 바로 과거의 정보를 기억하는 동시 최신 데이터로 갱신하기 위해서이다. 이러한 RNN은 그냥 사용하지 않고 주로 펼쳐진 형태로 사용이 된다. 아래의 그림을 통해서 확인하도록 하겠다.


image.png


이렇게 펼쳐진 RNN은 다양하게 활용될 수 있는데 다음 스텝에서 확인해 보도록 하겠다.


2. 다양한 RNN

image.png

출처 : http://karpathy.github.io/2015/05/21/rnn-effectiveness/


RNN은 다양하게 적용할 수 있는데 가장 기본이 되는 방법이 첫 번째 그림인 one to one은 일반적인 피드 포워드 신경망으로 RNN은 아니다. RNN은 두 번째 그림부터 시작된다.


두 번째 그림인 one to many는 하나의 입력으로 다수의 출력을 내는 RNN(그림을 보면 순환하고 있는 것을 확인할 수 있다)이다. 주로 하나의 이미지를 받아서 이미지의 제목을 출력하는 이미지 캡셔닝(image captioning) 작업에 사용한다.


세 번째 그림은 many to one이다. 여러 개를 입력받아 하나의 결과를 내는 RNN이며 주로 텍스트 분류로 스팸 인지 정상인지를 판단하거나 긍정인지 부정인지를 판단한다.


네 번째 그림은 many to many이다. 입력을 받을 동안 출력을 내지 않다가 일정 time step부터 출력을 시작한다.


다섯 번째 그림 또한 네 번째 그림과 같은 many to many이다. 차이점이 있다면 시퀀스를 입력받아 매 time step마다 시퀀스를 바로 출력하는 구조이다. 주로 개체명 인식, 품사 태킹에 사용한다.


3. RNN의 한계

image.png

출처 : https://towardsdatascience.com/illustrated-guide-to-recurrent-neural-networks-79e5eb8049c9


RNN은 기울기 소실(Vanishing Gradient) 문제라는 치명적인 한계가 있다. 입력의 앞부분이 뒤로 갈수록 옅어져 손실이 발생한다. 즉 시간적으로 멀리 떨어진 장기(long term) 의존 관계를 잘 학습할 수 없다는 것이다.


이러한 한계를 극복하기 위해서 고안된 것이 바로 게이트를 추가한 RNN 즉, LSTM, GRU이다. 다음 시간에는 이 LSTM에 대해서 공부해 보도록 하겠다.
keyword
매거진의 이전글문장에서 다음에 나오게 될 단어를 예측하려면?