본문 바로가기

개발/NLP

NLP Load : 맨땅에 헤딩하는 NLP 공부일지 (12)

워드임베딩까지 공부했으니 NLP의 가장 기본이 되는 모델을 알아보도록 하자.
바로 RNN(Recurrent Neural Network)이다.

우리는 인공 신경망을 행렬과 벡터 연산으로 이해할 수 있다면 더 이해하기 용이하다는 것을 이미 알고있다.

이제부터는 신경망을 Matrix와 Vector연산으로 이해하도록 하자!!

Ⅰ. RNN (Recurrent Neural Network)

요 신경망은 연속적인 시퀀스를 처리하기 위한 신경망이다. 사람은 글을 읽을 때, 이전 단어들에 대한 이해를 바탕으로 다음 단어를 이해하게 된다. 즉, 우리가 소통하는데 사용하는 언어(Language)는 시퀀스적인 데이터라는 말이다. 기존의 MLP에 비해 RNN은 이러한 이슈를 다루며, 내부에 정보를 지속하기 위해 루프과정을 통해 구성한다.

Recurrent Neural Network의 다이어그램

RNN은 입력의 길이만큼 신경망이 펼쳐진다(=unrolled).
이때 입력받는 각 순간을 시점(time step)이라고 한다.
`x_t`는 `t`시점의 입력을 의미한다. 예를들어 `x_2`는 2번째 시점의 입력을 의미하는 것이다.

unrolled RNN Structure

우리가 이전에 알아본 피드포워드 신경망(=FeedForward Neural Network)에서 시점(=time step)을 도입한것이 RNN이라고 할 수 있다. 기본적으로 입력과 출력이 모두 벡터 단위를 가정하게 되고 RNN역시 유형에 따라 다양하게 나뉜다.

Types of Recurrent Neural Network

한국어 자연어처리에서 각 시점(time step)의 입력은 주로 단어 벡터 또는 형태소(한국어) 벡터가 된다.

Ⅱ. Basic Architecture of RNN

은닉층에 있는 RNN의 처리 단위를 셀(Cell)이라고 부르며, 셀의 출력을 은닉 상태(hidden state)라고 한다.
RNN은 시점(time step)에 따라 입력을 받는데 현재 시점의 hidden state인 `h_t`연산을 위해 직전 시점의 hidden state인 `h_{t-1}`을 입력받는다. 요것이 RNN 모델이 과거의 정보를 기억하는 이유이다.

Basic Architecture of RNN

은닉층에 해당하는 수식을 조금 더 자세히 알아보자.
$$h_t = tanh(W_h h_{t-1} + W_x x_t + b)$$
위 수식을 해석하면 다음과 같다. 현재 시점의 `h` = tanh(.현재시점의 `h`가 가지는 가중치 `\times` 이전시점의 `h` + 현재 시점의 입력값 `\times` 현재 입력의 가중치 + 편향 )

hidden state

이론적인 부분과 원리를 이해하는데 크게 어려움은 없었을 것이다. 다만 필자는 항상 실전응용에 대한 중요성을 강조하고 싶다.
다음 포스팅에선 pytorch를 활용해 직접 RNN을 가지고 놀아보자!!