Vision Transformer를 보면서 NLP에 대한 지식이 한참 모자른것 같아서 처음부터 다시 공부하려고 작성했습니다.

 

 

RNN (Recurrent Neural Network)

 

RNN(Recurrent Neural Network)은 순차적으로 처리하는 시퀀스(Sequence) 모델입니다.

 

번역기를 생각해보면 입력은 번역하고자 하는 단어로 이루어진 순차적인 문장입니다.

 

출력에 해당되는 번역된 문장 또한 단어의 시퀀스입니다.

 

이와 같이 순차적인 데이터들을 처리하기 위해 고안된 모델들을 시퀀스 모델이라고 합니다.

 

그 중 RNN은 가장 기본적인 인공 신경망 시퀀스 모델입니다.

 

은닉층에서 활성화 함수를 지난 값은 오직 출력층 방향으로만 향하는 신경망들을 피드 포워드 신경망(Feed Forward Neural Network)이라고 합니다.

 

하지만 RNN은 피드 포워드 신경망과는 다르게 출력층의 방향으로도 나아가면서, 다른 은닉층의 input 값으로도 나아갑니다.

 

RNN

위 사진은 RNN을 간단히 나타낸 그림입니다.

 

현 시점을 \(t\) 라고 한다면, \(t\) 는 \(t+1\) 에 영향을 주고, \(t+1\) 는 \(t+2\) 에 영향을 주는 Sequence 형태 입니다.

 

RNN 종류

또한, RNN은 입력과 출력을 다양하게 설계 할 수 있습니다.

 

RNN layer를 2개 쌓는 다면 위와 같은 구조로 됩니다. (깊은 순환 신경망 (Deep Recurrent Neural Network))

 

 

RNN 내부 구조

 

RNN 내부 구조

RNN의 내부 구조는 위 사진과 같습니다.

 

레이어를 수식으로 표현하면 순차적으로 아래와 같습니다.

 

\( y1 = tanh(W_{xh} * x1 + b) \)

\( y2 = tanh(W_{xh} * x2 + W_{hh} * h_{t - 1} + b) \)

\( y3 = tanh(W_{xh} * x3 + W_{hh} * h_{t} + b) \)

\( y4 = tanh(W_{xh} * x4 + W_{hh} * h_{t + 1} + b) \)

 

여기서, \( h \) 는 각각

 

\( h_{t - 1} = tanh(W_{xh} * x1 + b) \)

\( h_{t} = tanh(W_{xh} * x2 + W_{hh} * h_{t - 1} + b) \)

\( h_{t + 1} = tanh(W_{xh} * x1 + W_{hh} * h_{t} + b) \)

 

입니다.

 

각 변수들의 크기는 위와 같습니다.

 

즉, 위와 같이 이전 값들을 더해줌으로써 순차적인 데이터들을 처리할 수 있습니다.

 

여기서 \( tanh \) 는 비선형성을 주기 위해 추가해주었습니다.

 

 

tanh

 

tanh

tanh 는 sigmoid 와 매우 비슷해 보이지만,

 

sigmoid 는 0 ~ 1 사이의 값을 갖고, tanh 는 -1 ~ 1 사이의 값을 가지게 됩니다.

 

또한, sigmoid의 최대 기울기 값이 0.25이지만 tanh는 그보다 큰 값을 가지기 때문에 Gradient Vanishing 현상이 쬐~끔 나아졌다고 생각합니다. - 제 개인적인 생각.

 

tanh 공식

 

 

 

양방향 순환 신경망 ( Bidirectional Recurrent Neural Network )

 

 

양방향 RNN은 하나의 출력값을 예측하기 위해 기본적으로 두 개의 메모리 셀을 사용합니다.

 

첫번째 메모리 셀은 앞에서 배운 것처럼 앞 시점의 은닉 상태(Forward States) 를 전달받아 현재의 은닉 상태를 계산합니다.

 

위의 그림에서는 주황색 메모리 셀에 해당됩니다.

 

두번째 메모리 셀은 앞에서 배운 것과는 다릅니다.

 

앞 시점의 은닉 상태가 아니라 뒤 시점의 은닉 상태(Backward States) 를 전달 받아 현재의 은닉 상태를 계산합니다.

 

입력 시퀀스를 반대 방향으로 읽는 것입니다. 

 

 


LSTM ( Long Short-Term Memory )

 

RNN의 발전한 형태인 LSTM 입니다.

 

RNN은 비교적 짧은 시퀀스(sequence)에 대해서만 효과를 보이는 단점이 있습니다.

 

바닐라 RNN의 시점(time step)이 길어질 수록 앞의 정보가 뒤로 충분히 전달되지 못하는 현상이 발생합니다.

 

뒤로 갈수록 \(x1\) 의 정보량은 손실되고, 시점이 충분히 긴 상황에서는 \(x1\) 의 전체 정보에 대한 영향력은 거의 의미가 없을 수도 있습니다.

 

LSTM

뭔가 굉장히 복잡해 보입니다.

 

LSTM은 은닉층의 메모리 셀에 입력 게이트, 삭제 게이트, 출력 게이트를 추가하여 불필요한 기억을 지우고, 기억해야할 것들을 정합니다.

 

위의 그림에서는 t시점의 셀 상태를 \(C_{t}\)로 표현되었습니다.

 

※ 변수 설명

  • 이하 식에서 \( \sigma \)는 시그모이드 함수를 의미합니다.
  • 이하 식에서 \( tanh \)는 하이퍼볼릭탄젠트 함수를 의미합니다.
  • \( W_{xi}, W_{xg}, W_{xf}, W_{xo} \) 는 \( x_{t} \) 와 함께 각 게이트에서 사용되는 4개의 가중치입니다.
  • \( W_{hi}, W_{hg}, W_{hf}, W_{ho} \) 는 \(h_{t - 1} \) 와 함께 각 게이트에서 사용되는 4개의 가중치입니다.
  • \( b_{i], b_{g}, b_{f}, b_{o} \) 는 각 게이트에서 사용되는 4개의 편향입니다.

 

 


1. 입력 게이트

 

입력 게이트

※ 사용하는 변수

  • \( W_{xi},    W_{hi},    b_{i} \)
  • \( W_{xg},    W_{hg},    b_{g} \)

 

입력 게이트는 현재 정보를 기억하기 위한 게이트입니다. 

 

\( \sigma \) 함수를 지나 0과 1사이의 값을 가지는 it과 \( tanh \) 함수를 지나 -1과 1사이의 값을 가지는 gt.

 

두 개의 값을 가지고 이번에 선택된 기억할 정보의 양을 정하는데,

 

구체적으로 어떻게 결정하는지는 아래에서 배우게 될 셀 상태 수식에서 보겠습니다.

 

 


2. 삭제 게이트

 

삭제 게이트

※ 사용하는 변수

  • \( W_{xf},    W_{hf},    b_{f} \)

 

삭제 게이트는 기억을 삭제하기 위한 게이트입니다.

 

0에 가까울수록 정보가 많이 삭제된 것이고 1에 가까울수록 정보를 온전히 기억한 것입니다.

 

 


3. 셀 상태

 

셀 상태

입력 게이트에서 구한 it, gt 이 두 개의 값에 대해서 원소별 곱(entrywise product)을 진행합니다.

 

여기서는 식으로 ∘ 로 표현합니다. 이것이 이번에 선택된 기억할 값입니다.

 

입력 게이트에서 선택된 기억을 삭제 게이트의 결과값과 더합니다.

 

이 값을 현재 시점 t의 셀 상태라고 하며, 이 값은 다음 t+1 시점의 LSTM 셀로 넘겨집니다.

 

삭제 게이트의 출력값인 ft가 0이 된다면,

 

이전 시점의 셀 상태의 값인 Ct−1은 현재 시점의 셀 상태의 값을 결정하기 위한 영향력이 0이 되면서,

 

오직 입력 게이트의 결과만이 현재 시점의 셀 상태의 값 Ct을 결정할 수 있습니다.

 

입력 게이트의 it값을 0이라고 한다면, 현재 시점의 셀 상태의 값 Ct는 오직 이전 시점의 셀 상태의 값 Ct−1의 값에만 의존합니다.

 

결과적으로 삭제 게이트는 이전 시점의 입력을 얼마나 반영할지를 의미하고, 입력 게이트는 현재 시점의 입력을 얼마나 반영할지를 결정합니다.

 

 

 

 


4. 출력 게이트

 

출력 게이트

 

출력 게이트는 현재 시점 t의 x값과 이전 시점 t-1의 은닉 상태가 시그모이드 함수를 지난 값입니다.

 

해당 값은 현재 시점 t의 은닉 상태를 결정하는 일에 쓰이게 됩니다.

 

셀 상태의 값이 하이퍼볼릭탄젠트 함수를 지나 -1과 1사이의 값이 되고,

 

해당 값은 출력 게이트의 값과 연산되면서, 값이 걸러지는 효과가 발생하여 은닉 상태가 됩니다.

 

은닉 상태의 값은 또한 출력층으로도 향합니다.

 

다음은 Transformer에 대해 포스팅 해보겠습니다.

 

 

 

 

 

 

 

출처 :

'Deep Learning > NLP' 카테고리의 다른 글

03. Transformer  (0) 2022.05.25
02. Attention  (0) 2022.05.24

+ Recent posts