Recurrent Neural Network (RNN)

2018. 11. 14. 16:52·코드와 오류 기록

순환신경망(RNN: Recurrent Neural Network)은 자연어 처리(NLP: Natural Language Processing) 문제에 높은 성능을 가지는 인기있는 신경망 모델이다. RNN은 기본적으로는 순차적으로 쌓여있는 정보를 처리한다는 아이디어에서 출발한다. 기존의 신경망 구조에서 입출력 각각이 독립적이라고 가정해왔는데 이는 일반적으로 옳지 않다고 여겨진다. 이에 동일한 태스크를 하나의 시퀀스의 모든 요소마다 적용하고 출력 결과는 이전의 계산 결과에 영향을 받게끔 구성한 것이 RNN이다. 이 말을 보다 쉽게 사람이 생각하는 방식에 적용해볼 수 있다. 예를 들어 어떤 사람이 하나의 생각을 말하기 위해 말하는 순간 순간 다시 방금 전의 생각을 지우고 다시 생각해내면서 말하지 않는다. 즉 이 말은 사람의 생각은 매 순간마다 초기화를 하고 다시 처음부터 생각하지 않는다는 의미이다. 또 다른 말로는 사람의 생각에는 지속성이 있다고 볼 수 있다. 근데 전통적인 신경망 구조에서는 이렇게 처리하지 못하고 순간 순간을 초기화하게 구성된다. 이러한 문제를 해결하기 위해 RNN이 등장하게 된다. RNN은 내부에 반복적인 루프를 가진 네트워크로 이 루프는 정보가 지속될 수 있게끔 하는 기능을 한다.



RNN의 단일 루프 모형


위 그림에서 신경망 A는 입력값인 $x_t$를 확인하고 $h_t$를 출력한다. 루프는 정보가 네트워크의 지금의 단계에서 다음 단계로 전달될 수 있는 기능을 한다. 그리고 이러한 신경망 A를 여러 개를 복사하는 것으로 각 네트워크는 자신의 다음 단계의 네트워크에 메세지를 전달하게 된다. 이러한 사슬 같은 특성은 RNN이 시퀀스, 리스트와 밀접하게 관련이 있음을 보여준다. 



펼쳐진 RNN 구조



그리고 이를 recurrent하다고 부르는 이유는 동일한 태스크를 한 시퀀스의 모든 요소마다 적용하고 출력 결과는 이전의 계산 결과에 영향을 받기 때문이다. 다른 말로 RNN은 현재까지 계산된 결과의 메모리 정보를 갖고 있다고 볼 수 있다. 이론적으로 RNN은 임의의 길이의 시퀀스 정보를 처리할 수 있지만, 실제로는 짧은 시퀀스만 효과적으로 처리할 수 있다. 위 그림을 조금 더 세분화해서 설명하기 위해 아래의 그림처럼 그릴 수 있고 이는 RNN의 recurrent한 연결을 펼쳐진 것으로 확인할 수 있다. RNN 네트워크를 "펼친다"는 말은 간단히 말해서 네트워크를 전체 시퀀스에 대해 그려놓았다고 보면 된다. 즉, 우리가 관심있는 시퀀스 정보가 5개의 단어로 이루어진 문장이라면, RNN 네트워크는 한 단어당 하나의 layer씩 (recurrent 연결이 없는, 또는 사이클이 없는) 5-layer 신경망 구조로 펼쳐질 것이다. RNN 구조에서 일어나는 계산에 대한 식은 아래와 같다.


RNN 구조도





  • $x_t$는 시간 스텝(time step) $t$에서의 입력값이다. 

  • $s_t$는 시간 스텝 $t$에서의 hidden state이다. 네트워크의 "메모리" 부분으로서, 이전 시간 스텝의 hiddent state 값과 현재 시간 스텝의 입력값에 의해 계산된다: $s_t=f(Ux_t+Ws_t-1)$. 비선형 함수 $f$는 보통 tanh나 ReLU가 사용되고, 첫 hidden state를 계산하기 위한 $s_-1$은 보통 0으로 초기화시킨다.

  • $o_t$는 시간 스텝 $t$에서의 출력값이다. 예를 들어, 문장에서 다음 단어를 추측하고 싶다면 단어 수만큼의 차원의 확률 벡터가 될 것이다. $o_t = softmax(Vs_t)$


  • Hidden state $s_t$는 네트워크의 메모리라고 생각할 수 있다. $s_t$는 과거의 시간 스텝들에서 일어난 일들에 대한 정보를 전부 담고 있고, 출력값 $o_t$는 오로지 현재 시간 스텝 $t$의 메모리에만 의존한다. 하지만 위에서 잠깐 언급했듯이, 실제 구현에서는 너무 먼 과거에 일어난 일들은 잘 기억하지 못한다.
  • 각 layer마다의 파라미터 값들이 전부 다 다른 기존의 deep한 신경망 구조와 달리, RNN은 모든 시간 스텝에 대해 파라미터 값을 전부 공유하고 있다 (위 그림의 $U$, $V$, $W$). 이는 RNN이 각 스텝마다 입력값만 다를 뿐 거의 똑같은 계산을 하고 있다는 것을 보여준다. 이는 학습해야 하는 파라미터 수를 많이 줄여준다. 
  • 위 다이어그램에서는 매 시간 스텝마다 출력값을 내지만, 문제에 따라 달라질 수도 있다. 예를 들어, 문장에서 긍정/부정적인 감정을 추측하고 싶다면 굳이 모든 단어 위치에 대해 추측값을 내지 않고 최종 추측값 하나만 내서 판단하는 것이 더 유용할 수도 있다. 마찬가지로, 입력값 역시 매 시간 스텝마다 꼭 다 필요한 것은 아니다. RNN에서의 핵심은 시퀀스 정보에 대해 어떠한 정보를 추출해 주는 hidden state이기 때문이다.


위와 같이 구성된 RNN은 많은 자연어처리 문제에서 성공적으로 적용되었다. 대표적으로 언어 모델링, 텍스트 생성에 많이 사용되었으며 기계번역과 음성 인식 등에서 많이 사용되고 있다. 특히 현재 전세계에서 RNN의 여러 종류 중에서 가장 많이 사용되는 것은 위에서 살펴본 기본 RNN 구조에 비해 더 긴 시퀀스를 효과적으로 잘 기억하는 LSTM이다. 이 밖에 시간 스텝 $t$에서의 출력값이 이전 시간의 스텝 외에 이후의 시간 스텝에서 들어오는 입력 값에도 영향을 받을 수 있다는 아이디어에 기반한 Bidirectional RNN과 이와 같은 구조에 매 시간 스텝마다 layer를 더 늘린 Deep (Bidirectional) RNN이 있다.


Bidirectional RNN


Deep Bidirectional RNN



이 글의 원문: http://colah.github.io/posts/2015-08-Understanding-LSTMs/


저작자표시 비영리 변경금지 (새창열림)

'코드와 오류 기록' 카테고리의 다른 글

활성화 함수(Activation Function)  (0) 2018.11.15
Long Short Terms Memory networks (LSTM)  (0) 2018.11.15
Transport Security has Blocked a cleartext HTTP 해결  (0) 2016.04.30
cocoapods swift  (0) 2016.04.28
(Swift) HTTP XMLRPC  (0) 2016.04.28
'코드와 오류 기록' 카테고리의 다른 글
  • 활성화 함수(Activation Function)
  • Long Short Terms Memory networks (LSTM)
  • Transport Security has Blocked a cleartext HTTP 해결
  • cocoapods swift
신사(SinSa)
신사(SinSa)
#취미 사진가 #IT 직장인 경험하고 배운 것들을 글로, 사진으로 기록하고 있어요
  • 신사(SinSa)
    신사(SinSa)
    신사(SinSa)
  • 전체
    오늘
    어제
    • View all (425)
      • 잡념과 생각 (104)
      • 코드와 오류 기록 (80)
      • 사진 이야기 (10)
      • 교육과 육아 (12)
      • Brand (2)
      • 자료 모음 (46)
      • 축구 이야기(deprecated) (171)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    k리그
    fc서울
    한국 축구
    PM
    Po
    Product Manager
    대한축구협회
    스타트업
    박주영
    대치키즈
    승강제
    프로덕트 매니저
    아이폰 축구게임
    맨유
    Product Owner
    한국축구
    경남FC
    프로덕트 오너
    김주영
    애자일
    국가대표팀 감독
    프로덕트오너
    홍명보호
    프로축구
    축구
    국가대표팀
    아이폰 게임
    축구협회
    쿠웨이트전
    아스날
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
신사(SinSa)
Recurrent Neural Network (RNN)
상단으로

티스토리툴바