자연어처리(NLP) RNN, LSTM, GRU 그리고 attention

생각하는 마리오네트·2021년 8월 23일
0

딥러닝

목록 보기
5/5
post-thumbnail

순환 신경망(RNN, Recurrent Neural Network)

연속형 데이터(Sequential Data)

  • 어떤 순서로 오느냐에 따라서 단위의 의미가 달라지는 데이터(Ex.시계열데이터, 문장)

RNN의 구조

RNN은 연속형(Sequential)데이터를 잘 처리하기 위해 고안된 신경망입니다.

위의 그림에서 맨 왼쪽 그림을 보면 3개의 화살표가 있습니다. 첫 번째는 입력벡터가 은닉층에들어가는 것을 나타내는 화살표 입니다. 두 번째는 은닉층으로부터 출력 벡터가 생성되는 것을 나타내는 화살표입니다. 마지막 세번째 화살표는 은닉층에서 나와 다시 은닉층으로 입력되는 것을 나타내는 화살표 입니다.

빨간색동그라미가 입력을 나타내고 초록색 상자가 은닉층, 파란색 원이 출력이라고 보면된다.

앞서 설명한 세번째 화살표인 은닉층에서 나와서 다시 은닉층으로 들어가는것은 이전까지 볼 수 없었던 형태입니다. 이렇게 출력 벡터가 다시 입력되는 특성을 가지고 있어서 "순환(Recurrent)신경망" 이라는 이름이 붙었습니다.

그리고 부등호 뒤에 나오는 그림은 이렇게 순환되는 과정을 옆으로 펼쳐 놓은 것입니다. 은닉층에서 출력된벡터가 x2라는 입력층에서 나온 벡터와 함께 연산되어 h2라는 새로운 은닉층에 합쳐집니다. 그리고 이 과정이 계속 반복되는 형태입니다.

좀 더 수식적으로 적어보면

ht=tanh(ht1Wh+xtWx+b)h_t = \tanh(h_{t-1}W_h + x_tW_x + b) 이렇게 이전 은닉층에서 나온 벡터와 가중치를 곱하고, 입력벡터와 가중치를 곱한뒤 이를 더하고 마지막으로 바이어스를 더해주는 모습입니다.

이 과정을 확대해서 그림으로 아래에 표현해 봤습니다

이렇게 하면 t시점에서 생성된 hidden-state벡터인 hth_{t}는 해당 시점까지 입력된 벡터 x1,x2,,xt1,xtx_1, x_2, \cdots, x_{t-1}, x_t의 정보를 모두 가지고 있습니다.
Sequential데이터의 순서 정보를 모두 기억하기 때문에 Sequential 데이터를 다룰 때 RNN을 많이 사용한다.

위의 그림을 보면 tanh라는 활성화 함수가 들어갔는데 이는 딥러닝의 비선형성을 위해 넣어준 활성화 함수라고 보면됩니다.

RNN간단 예시

RNN의 간단한 예시를 들어보겠습니다.

"I work at Naver" 라는 문장이 있습니다. 하지만 우리는 이렇게 문장을 봤을때 Work가 명사가 아닌 동사라는것을, Naver가 동사가 아닌 명사라는것을 어떻게 알까요?? 그것은 구조를 전체적으로 보기 때문입니다. 이것을 RNN과 연결 지어 보겠습니다.

첫번째, Input으로 I가 들어갔을때 출력 벡터로 주어가 출력이 됩니다.
두번째, Input으로 work가 들어가고 첫번째 은닉층에서 출력된 I가 두번째 은닉층으로 정보를 전달하면서 이전에 I가 주어라는 정보가 들어갔기때문에 work가 명사가 아닌 동사일 확률이 높은것으로 전달이 되어 Work는 동사라는 출력이 나오게 됩니다.
세번째, at 이 입력이 되고 "I work"가 이전 은닉층으로부터 전달받아 at은 전치사로 올 확률이 높아져서 전치사로서 at이 출력이 됩니다.
마지막, Input으로 Naver가 전달이 되는데 이때 만약 첫번째로 받은것이라면 출력에 주어로 출력이 될 확률이 높습니다. 하지만 이전 은닉층에서부터 저장된정보인 "I work at"이 마지막 은닉층에 그대로 전달이 되어 명사로 출력이 되어버리는 원리입니다.

그렇다면 왜 확률이라고 사용을 한 것일까요??

위에서 그린 모델의 위에는 softmax가 있습니다. softmax는 확률값으로 전달해 주기 때문에 높은 확률을 출력하게 됩니다.

RNN의 장점과 단점

  • 장점
    모델이 간단하고 어떤길이의 sequential데이터라도 처리할 수 있다는 장점이 있다.

  • 단점

  1. 병렬화 불가능
    RNN이 가지고 있는 단점 중 하나는 벡터가 순차적으로 입력된다는 점이다. 이는 sequential데이터 처리를 가능하게 해주는 요인이 되지만, 이러한 구조는 GPU연산의 장점인 병렬화를 불가능하게 만듭니다. 이러한 이유 때문에 RNN기반의 모델은 GPU연산을 하였을 때 이점이 거의 없다는 단점을 가지고 있다.

  2. 기울기 폭발(Exploding Gradient), 기울기 소실(Vanishing Gradient)
    단순 RNN의 치명적인 문제점은 역전파 과정에서 발생한다.
    역전파 과정에서 RNN의 활성화 함수인 tanh의 미분값을 전달하게 된다.

    -4와 4에서는 거의 0에 가까운 값을 가지고 있기 때문에 기울기가 소실되어 진다.
    반대로 1일경우는 기울기가 폭발하게 되는 모습을 볼 수 있다.

이런 기울기 정보의 크기를 조정해주면 어떨까 라는 생각으로 발전된 것이 다음에 나올 LSTM이다.


LSTM(Long Term Short Memory, 장단기기억망)

  • lstm은 기울기 소실 문제를 해결하기 위해서 등장한 모델이다. 이를 위해 3가지 게이트(gate)를 추가하게된다.
    1. forget gate : 과거 정보를 얼마나 유지할 것인가?
    1. input gate : 새로 입력된 정보는 얼마만큼 활용할 것인가?
    1. ouput gate : 두 정보를 계산하여 나온 출력 정보를 얼마만큼 넘겨줄 것인가?

위의 그림으로 함께 설명해보겠습니다.

  • 먼저 처음에 Forget gate가 있습니다. 이 게이트에는 sigmoid함수가 있습니다. 즉 0 ~ 1사이의 확률값입니다. 즉 이전에 있던정보의 x%만 기억해라 라고 전해주는 구간이라고 볼 수 있습니다.

  • 두번째로 input gate에서 새로운 정보고 들어와 sigmoid와 tanh함수를 거쳐 이전에 x%만 기억된정보와 더해집니다.

  • 메모리 셀에 있는 정보가 tanh를 통해 들어오고, 히든스테이트의 현재의 정보고 시그모이드를 통해들어온뒤 서로 곱해지고 output으로 출력이 되고 이값이 다음 히든스테이트로 가는 것이 최종 구조이다.

위에서 hidden-state말고 cell-state가 추가되어있는것을 볼 수 있습니다. cell-state는 역전파 과정에서 활성화 함수를 거치지 않아서 정보손실이 없기때문에 뒷쪽에 있는 시퀀스 정보에 비중을 결정할 수 있으면서 동시에 앞쪽 시퀀스의 정보를 완전히 잃지 않을 수 있습니다.


GRU(Gated Recurrent Unit)

LSTM의 간소버전인 GRU에대해 알아보겠습니다.

  • LSTM에서 새로 등장했던 cell-state가 사라졌습니다. cell-state벡터 CtC_{t}와 hidden gate의 벡터 hth_{t}가 하나의 벡터 hth_{t}로 통일이 되었다.

  • 하나의 Gate ztz_{t}가 forget, input gate를 모두 제어한다. 만약 ztz_{t}가 0이면 input게이트만 열린다

  • GRU셀에서는 outpt게이트가 없어져서 전체상태 벡터 hth_{t}가 각time-step에서 출력되며, 이전 상태의 ht1h_{t-1} 의 어느 부분이 출력될 지 새롭게 제어하는 Gate인 rtr_t 가 추가되었습니다.

profile
문제를해결하는도구로서의"데이터"

0개의 댓글