ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • RNN(recurrent neural network)
    개발 이야기/TIL 2023. 8. 7. 14:13

    Transformer: Attention is all you need를 읽기 전에 그 전에 나왔던 NLP 아키텍쳐 구조인 Recurrent Neural Networks(RNN)과 RNN의 일종인 Long Short-Term Memory models(LSTM)에 관해 간단히 리뷰해보려고 한다. 

     

    First Order System

    현재 시간의 상태는 이전 시간의 상태와만 관련이 있다. 

    x: 상태(시세, 날씨, 숫자 등)

    t: 시간 

    u: 현재의 입력

    이라고 하면 

    $$ x_t = f(x_{t-1},u_t) $$

    1차 마르코프 체인과 같다

    해당 시스템은 어떤 외부 입력 없이(초기조건을 제외하고), 잘 돌아간다, 즉, autonomus system이다

     

    Q) 모든 시간 대 t에서 모든 상태 $ x_t $가 관측 가능한가? 

    보이지 않는 변수가 있을 수 있기 때문에, 상태에 관해 일부만 관측 가능하다 

    따라서 관측 가능한 상태의 모음을 output $ y_t $라고 하고, 이를 state space model이라 한다. 

    즉, 

    $$ y_t = h(x_t) $$

     

    이는 NN모델에서 

    Input: $ u_t $ 

    Hiddenstate(weight part): $ x_t $

    output: $ y_t $

     로 표현된다. 

     

    그럼 이를 변형하면 RNN 모델이 된다(시계열 데이터를 처리하기 위해)

     

    RNN(Recurrent Neural Network)

    RNN의 배경

    우리는 단어, 혹은 문장을 처리할 때 앞의 단어, 문장을 바탕으로 끊임없이 데이터를 업데이트하는 지속성을(persistence) 지닌다. 이는 대다수의 시계열 데이터의 특징이다. 즉, 과거가 현재에 영향을 미치는 것이다. 

    문제는 전통적인 뉴럴 네트워크는 이러한 지속성을 가지는 데이터를 처리할 수 없었는데, 이는 모든 입력값들은 서로 독립적이라고 가정했기 때문이다. 따라서 이를 해결하기 위해 네트워크 안에 feedback loop, 혹은 recurrent loop을 만들어 정보가 지속되도록 하였다. 

     

     

    RNN이란?

    RNN은 이름에서 알 수 있듯이 재귀적 뉴럴 네트워크이다. 

    이런 재귀적인 루프를 만든 이유는 출력값이 이전 결과에 의존하기 때문인데, 이런 특성을 memory, 기억을 가지고 있다고 표현하기도 한다. 이는 지금까지 어떤 정보가 들어왔고, 어떻게 계산했었는지에 관한 것이다. 

    RNN은 히든 노드가 방향을 가진 edge로 연결되어 재귀(순환구조)를 이루는 신경망으로 시간에 따라 같은 weight(가중치)를 사용한다(CNN과 비교시, CNN은 이미지 구역별로 같은 weight를 공유한다)

    recurent한 부분을 고려하여 이전의 상태 h_t-1을 사용한다(https://wikidocs.net/22886)

    그러면 이를 시간에 따른 state-space  model로 다시 표현하면 아래 그림과 같다. 이는 loop를 펼쳐서 생각하는 것이다. 즉, 이는 시간축으로 deep neural network를 만든 것과 같다. 

    중간 cell부분(x)에 self feed back loop을 확인할 수 있다  [출처:wikidocs 딥러닝을 이용한 자연어처리입문]

     이 부분에서 cell에서 전달해주는 $ h_t $는 이전까지의 상태와 이전까지의 입력을 모두 대표하는 압축본이라고 할 수 있기에, 시계열 데이터를 처리한다고 할 수 있는 것이다. 

    즉, f는 self feed back loop의 함수, h는 output함수라고 할 수 있다.

    따라서 $ h_t $는 시계열로 들어오는 입력들을 최대한 상세히 표현할 수 있어야 한다.  

     

    NLP에서의 목적은 주어진 문장에서 다음 단어로 나올 단어를 최대한 유추하는 것이다. 

    원래는 문제에서 Input과 ouput을 1-1로 direct하게 연결해줘야했지만, 

    Hiddent state를 통해 전의 상태들을 받아서 사용가능하기에, 마지막 state만 이용해도 충분하다. 

    즉, 아래와 같은 문제를 푸는 것으로 바뀐다. 

    RNN is equal to First order Markov Model

    RNN 유형 

    RNN은 입력과 출력의 길이를 다르게 설계할 수 있기에 다양한 구조로 변형가능하다. 

    각 변형 구조는 아래와 같고 아래와 같은 예시에 사용된다

     

    Many to many: 번역

    Many to one: 예측 

    one-to-many: 생성

    RNN의 수식

    RNN 기본구조(출처:https://ratsgo.github.io/natural%20language%20processing/2017/03/09/rnnlstm/ )

    RNN의 기본구조는 위 그림과 같은데, 녹색박스가 hidden state, x가 input, y가 ouput을 의미한다. 

    수식을 보면 알 수 있듯이 히든 state의 활성화 함수는 비선형 함수인 tanh이다.

    이때 tanh이, 비선형 함수를 사용하는 이유는 아래와 같다.

     선형 함수인 $ h(x)=cx $를 활성 함수로 사용한 3층 네트워크를 떠올려 보세요.
    이를 식으로 나타내면  $ y(x) = h(h(h(x))) $ 가 됩니다. 이 계산은 
    y(x)= c*c*c*x 처럼 세번의 곱셈을 수행하지만 실은 y(x) = ax와 동일한 식입니디ㅏ. 
    $ a=c^3 $이라고만 하면 끝이죠. 즉 히든레이어가 없는 네트워크로 표현할 수 있습니다. 그래서 층을 쌓는 혜택을 얻고 싶다면 활성함수로는 반드시 비선형함수를 사용해야 합니다.

     

    참고자료

    https://hyen4110.tistory.com/25

    https://www.youtube.com/watch?v=Hn3GHHOXKCE 

    https://ratsgo.github.io/natural%20language%20processing/2017/03/09/rnnlstm/

    https://wikidocs.net/22886

    http://www.incodom.kr/LSTM

Designed by Tistory.