데이터과학 유망주의 매일 글쓰기 — 열 일곱 번째 토요일

배우는 자(Learner Of Life)
9 min readJan 2, 2021

--

GRU(Gated Recurrent Unit)

#GRU, #RNN

RNN, LSTM, GRU를 비교하는 그림 (1)

오늘 한일:

어제는 RNN의 발전된 모델의 한 종류인 LSTM에 대해 리뷰했다. RNN의 치명적인 결함인 gradient vanishing의 위험을, 가중치의 업데이트를 조절할 수 있는 Gate를 활용하여 해결한 모델이다. 이제는 RNN이라고 하면 대부분 LSTM을 동반해 생각할 정도로, ‘기본적인 형태의 RNN’만을 사용하는 경우는 거의 없다고 할 수 있다.

하지만 LSTM은 신경망속에 신경망이 3가지 더 있는 형태이다. 최신의 입력값을 얼마나 유지할지 결정하는 Input Gate, 지난 정보를 얼마나 유지할지 결정하는 Forget Gate, 마지막으로 이 두 Gate의 정보를 바탕으로 어떤 값을 출력할지 결정하는 Output Gate등이 그것이다. 이 Gate들은 출력값을 조절하는데 있어 매우 유용하지만, 그만큼 모든 Gate의 작업을 처리하기에 시간이 더 걸릴 수 있다. 조금 더 신경망의 구조를 단순화하고, 더 빠른 모델링을 위해 찾은 대안이 바로 GRU(Gated Recurrent Unit)이라는 또다른 형태의 RNN이다.

GRU(Gated Recurrent Unit)

쉽게 이야기해서 LSTM의 구조를 조금 더 단순화한 형태의 모델이라고 볼 수 있다. GRU는 아래와 같은 그림의 구조를 가지고있다.

GRU에서는 LSTM에 존재했던 Cell이라는 개념이 없다. 기존 LSTM에서 (Ct)가 은닉층(ht)에 합쳐졌다고 할 수 있다. LSTM과 비교해 output gate가 존재하지 않는 형태이다. 현재 은닉층의 상태를 보여주는 (ht)가 출력정보를 결정하기 때문이다. 아래 나타난 (zt)가 update gate 및 reset gate에 대한 조정을 담당한다. (rt)는 이전의 은닉층 상태인 (ht-1)이 어떻게 출력될지 조정하는 역할을 한다.

GRU를 조금 더 자세하게 나타낸 그림 (3)

GRU의 구성

Update Gate

LSTM에서 forget gate 및 input gate와 비슷한 역할을 한다. 어떤 정보를 얼만큼 유지하고 어떤 정보를 추가할지를 결정하는 역할을 한다.

Reset Gate

지난 정보를 얼마나 버릴지 조정하는 Gate라고 할 수 있다.

GRU의 작동 과정

1. Update Gate에서의 동작

Update Gate인 (z_t)를 아래와 같이 계산한다.

update gate에서의 계산 (4)

현재 시점의 입력값인 (xt)가 입력되면, 그 시점의 가중치(W(z))와 곱해진다. 이전 시점의 은닉층 정보인 (ht-1)와 그 시점의 은닉층 가중치인 (U(z))와 곱해진다. 마지막으로 이 두 가지 계산이 더해져 sigmoid 함수에 입력되고, 결과는 0과 1사이의 값으로 출력된다.

Update Gate의 구조 (5)

결국 update gate는 이전 시점의 정보가 다음 시점에서 얼마나 유지될지를 결정하는 부분이다. 과거의 정보를 얼마나 유지하여 gradient vanishing 문제를 해결할지를 결정하기 때문에, 매우 유용한 기능이라고 할 수 있다.

2. Reset Gate에서의 동작

이 부분은 지난 정보를 얼마나 버릴지를 결정하는 부분이다. 아래와 같은 수식으로 연산이 이루어진다.

Reset Gate에서의 연산 (6)

Update Gate에서의 연산식과 매우 유사하다. Gate의 사용과 가중치에 있어 조금 다를 뿐이다. 이전 시점의 은닉층 정보인 (ht-1)과 현재 시점의 입력값인 (xt)가 각각 자신의 가중치(W(r), U(r))과 곱해진다. 마지막으로 두 가지 연산을 모두 더한 값을 sigmoid 함수에 입력하여 결과값을 0과 1사이의 값으로 출력한다.

Reset Gate의 구조만을 보여주는 그림 (7)

3. 현재 시점 사용할 메모리의 정보

Gate가 출력에 어떠한 영향을 주는지 살펴보자. 먼저, 과거의 정보와 관련이 있는 새로운 메모리의 정보가 reset gate를 이용하여 유지된다. 아래의 수식으로 계산이 된다.

현재 메모리에 저장될 정보 (8)

위 계산을 과정으로 표현하면 아래와 같다.

  1. 입력값인 (xt)와 가중치 W가 곱해지고, 이전 시점의 은닉층 정보인 (ht-1)이 가중치인 U와 곱해진다.
  2. (rt)와 (U*ht-1)가 Hadamard (element-wise) 과적으로 곱해진다. 이전 시점에서의 어떤 정보가 제거 될지를 결정한다.
  3. 1번과 2번의 결과를 더한다
  4. 결과 값을 tanh 활성화 함수에 입력한다.

여기서 위 2번 과정을 좀 더 예를 들어 설명할 수 있다. 예를 들어, 알라딘에서 구입한 도서에 대한 리뷰를 통해 감정 분석(sentiment analysis)를 진행한다고 가정하자. 한 리뷰는 “헤르만 헤세의 소설인 데미안은 한 인간의 성장과 진화, 때론 그 가운데서 거부하기 힘든 유혹에 빠질 수 있는 위험을 비유적으로 표현한 철학적인 소설로써..” 로 시작하여 “많은 것을 생각해보고 질문하게 하는 강력한 메시지를 지닌 작품으로 매우 흥미롭게 읽었다.” 등의 문장으로 끝을 맺을 수 있다. 결국 이 리뷰를 올린사람의 작품에 대한 만족도는 마지막 문장에서 찾을 수 있다. 신경망은 텍스트의 마지막 문장에서 (rt) 벡터를 0에 가까운 값으로 지정하게 될 것이다. 이는 신경망이 마지막 문장으로 갈수록 이전의 정보는 되도록 무시하고, 텍스트의 끝 부분의 정보를 최대한 유지한다는 의미다.

현재 정보를 연산하는 (h’t)에 대한 연산을 보여주는 그림 (9)

4. 출력할 최종 메모리 정보

마지막으로 현재 시점의 정보를 나타내는 (ht) 벡터를 계산해야 한다. 여기서 update gate가 다시 사용된다. 현재 시점에서 어떤 정보를 사용할지 결정하는 (h’t)와 이전 시점의 정보인 (ht-1)을 사용한다.

마지막 현재 시점의 최종 정보를 담는 (ht)의 연산 (10)

위 수식 과정은 아래와 같이 요약될 수 있다.

  1. update gate의 출력값인 z_t와 이전 시점의 정보 값인 ht-1을 hamamard (element-wise)과적한다.
  2. update gate가 버리는 값인 (1-zt)와 현재 시점에서 기억하는 정보인 h’t를 hamamard (element-wise)과적한다.
  3. 1번과 2번의 결과를 합한다.

위 수식을 자세히 보면 첫 번째 부분과 두 번째 부분이 각각 분명한 의미를 가지고 있음을 알 수 있다. 이전 도서 리뷰에 대한 예제로 돌아가보자. 만약 “헤르만 헤세의 전설적인 소설인 ‘데미안’을 너무 흥미롭게 시간가는 줄 모르고 읽었다.”라는 문장으로 리뷰가 시작된다면, 이번에는 감정이 텍스트의 첫 부분에서 드러난다고 볼 수 있다. 그렇다면 모델은 벡터 (zt)의 값을 1에 매우 가깝게 결정할 것이다. 이는 이전 시점의 정보를 최대한 유지한다는 의미다. 이전 시점의 정보를 최대한 유지하기 때문에, 시간이 갈수록 뒷 부분의 정보는 대부분 무시할 것이다. 그러므로, 현재 시점의 (1-zt)의 값은 0을 향하는 방향으로 결정되며, 시간이 갈수록 0에 가까워진다. 목적에 부합하지 않는 텍스트의 나머지 정보를 무시한다는 것이다.

마지막 최종 출력 정보인 ht의 연산을 보여주는 그림 (11)

앞으로 할일:

오늘은 RNN의 또 다른 상위 모델인 GRU에 대해 리뷰해 보았다. 사실 LSTM과 크게 다르지 않고, 거기서 Gate를 좀 더 단순화한 것으로써, LSTM보다 연산이 약간 더 빠를 수 있다는 장점이 있다. 하지만, LSTM과 GRU 중 어느 것이 더 나은지에 대해서는 딥러닝 전문가들도 확답을 할 수 없다. 상황에 따라 둘 중 하나가 더 나은 성능을 보일 수 있기 때문이다.

역시, “항상" 어떤 것이 더 좋다고 말할 수는 없는 것 같다. 적재 적소에 필요한 도구를 쓸 줄 아는 능력이 중요하다고 느낀다. 그러기 위해서는 내가 쓸 수 있는 도구들의 특성과 차이점을 잘 알아야 한다는 생각이 든다. 그래서 LSTM과 GRU의 구조 및 연산에 대해 어제와 오늘 조금 더 집중적으로 탐구해 보았다.

가끔은 이 모든 것을 알고 면접 때 잘 이야기 해야한다는 사실에 대해 부담스럽게 느껴지기도 한다. 면접 때 무엇을 물어볼지 예상할 수 없고, 너무 알아야할 것이 많기 때문이다. 하지만, 계속 공부하면서 느끼는 것은, 딥러닝 모델링에서도 공통된 특정 지식과 진리가 상당부분 존재한다는 것이다. 대부분 Backpropagation이라는 개념을 통해 학습을 하며, 에러를 최소화 하는 방향으로 가중치를 업데이트하는 모델링이 이루어 진다는 점이다. 공통된 진리라면, 가장 효율적인 방법으로 문제를 해결하는 것이 가장 좋으며, 그러기 위해서는 어떠한 딥러닝 개념들이 있는지 정확히 알고 적재적소에 적용할 줄 알아야 한다는 것이다.

결국 가장 기본적인 수학적 개념에 대한 분명한 이해와 문제 해결의 자세가 가장 중요하다는 생각이 든다. 사실, 수학적 능력을 바탕으로한 분석적인 태도와, 문제 해결에 접근하는 논리적인 자세는 인생의 그 어떤 문제를 해결할 때에도 필요한 덕목이기도 하다. 이 사실을 기억하며 앞으로도 나의 성장을 위해 계속 공부하고 노력하고 싶다.

올 한해도 끊임없이 자신만의 꾸준한 배움을 모두가 이어나가기를 바라며.

참조:

(1) RNN, LSTM, GRU

(2) https://towardsdatascience.com/illustrated-guide-to-lstms-and-gru-s-a-step-by-step-explanation-44e9eb85bf21

(3)~(11) https://towardsdatascience.com/understanding-gru-networks-2ef37df6c9be

--

--

배우는 자(Learner Of Life)
배우는 자(Learner Of Life)

Written by 배우는 자(Learner Of Life)

배움은 죽을 때까지 끝이 없다. 어쩌면 그게 우리가 살아있다는 증거일지도 모른다. 배움을 멈추는 순간, 혹은 배움의 기회가 더 이상 존재하지 않는 순간, 우리의 삶은 어쩌면 거기서 끝나는 것은 아닐까? 나는 배운다 그러므로 나는 존재한다. 배울 수 있음에, 그래서 살아 있음에 감사한다.

Responses (1)