menu

딥러닝 순환 신경망(RNN)이란?

순환 신경망(RNN)이란?

RNN은 순차적인 데이터를 입력받아 결과값을 도출하는 데 사용하는 딥러닝 모델입니다. 대표적으로 자연어 처리에 상당히 많이 사용됩니다. 예를 들어, ’I work at google’과 ’I google at work’라는 문장을 보겠습니다. 각 문장의 단어들에 해당하는 품사는 어떤 것인가요? 

같은 단어임에도 ’google’이 첫 번째 문장에서는 명사, 두 번째 문장에서는 동사인 것을 확인할 수 있습니다. ’work’ 역시 첫 번째 문장에서는 동사, 두 번째 문장에서는 명사인 것을 확인할 수 있습니다. 같은 입력값임에도 다른 출력값이 나온 이유가 무엇일까요? 바로 이전 입력값들이 현재 입력값의 출력값에 영향을 주기 때문입니다. 

RNN은 이전 입력값들을 고려해서 현재 입력값의 출력값을 결정하는 딥러닝 모델입니다. 다음 그림을 통해 RNN의 구조 및 어떻게 이전 입력값들을 고려해서 현재 입력값의 출력값을 결정하는지 대략 알 수 있습니다. 

또한 위 그림을 통해 IT가 ’google’의 품사에 영향을 주었고, ’I google at’이 ’work’의 품사에 영향을 주는 것을 확인할 수 있습니다. 

RNN 구조 

RNN은 일반적으로 다음과 같은 구조를 가지고 있습니다. 

x는 입력값, y는 출력값은  상태값을 의미합니다. 네모난 박스는 셀(cell)이라고 하고, 셀 안에서 현재 셀의 입력값과 과거 셀의 상태값을 사용해 현재 셀의 상태값을 계산합니다. 현재 셀의 상태값은 현재 셀의 출력값과 동일하며, 다음 셀의 이전 상태값으로 사용됩니다. 

상태값을 결정하기 위해 다음 그림과 같이 두 가지의 가중치가 존재합니다. 현재 셀의 상태값은 tanh으로 결정됩니다. 가중치와 편향값은 최초 무작위로 부여하되, 학습 과정을 통해 가중치 및 편향값은 모델의 목적에 맞게 최적화됩니다. 

앞서 다뤘던 단어 품사 분류기 RNN 모델은 어떻게 학습할 수 있을까요? RNN의 각 셀은 고유의 출력값을 가지고 있습니다. 품사 분류기는 다음 그림과 같이 각 출력값에 소프트맥스 레이어를 연결해서 가능한 품사에 대한 확률을 구할 수 있습니다. 

또한 실제 품사와의 차이를 최소화하는 손실 함수를 설정해서 모델을 최적화할 수 있습니다. 

RNN으로 문장의 감정 분석하기 

RNN의 품사 분류기가 출력값을 사용한 분류기였다면 문장의 감정 분석하기는 최종 상태값을 사용한 분류기입니다. 

  • Traffic ticket fine: 교통 위반 벌금(불행함)
  • Traffic was fine: 교통이 원활했다(행복함) 

위의 두 문장을 보면 두 문장 모두 세 개의 단어로 구성돼 있고, 두 단어가 동일하지만 문장의 감정은 정반대인 것을 확인할 수 있습니다. 문장의 감정을 이해하기 위해서는 첫 단어부터 마지막 단어까지 읽어본 후 최종적으로 감정을 도출해야 할 것입니다. RNN은 이와 같은 문제에 상당히 적합한 구조를 가지고 있습니다. 다음 그림처럼 RNN의 최종 상태값은 첫 단어부 터 마지막 단어까지의 정보를 함축하고 있고, 이 최종 상태값을 활용해 문장의 감정을 분석할 수 있습니다. 

물론 최종 상태값을 활용하는 모델 역시 학습이 필요합니다. 손실 함수는 최종 상태값에 소프트맥스를 취한 값과 실제값의 거리를 최소화하는 것으로 설정해서 모델을 학습할 수 있습니다. 

지금까지 알아본 RNN 모델의 구조는 다음 그림과 같습니다. 

RNN 입력값의 개수에는 사실상 제한이 없으므로 위의 그림을 다음과 같이 요약해서 나타내면 많은 수의 입력값을 받는 RNN도 깔끔하게 표현할 수 있습니다.