본문 바로가기
Study/Deep learning

[Deep Learning] RNN, LSTM, GRU 차이점 (순환 신경망 모델들)

by 후이 (hui) 2022. 1. 28.
728x90
반응형

Q. RNN, LSTM, GRU 각각의 차이는 뭔가요 ?

각 모델들이 서로의 어떤 점을 보완하면서 등장했는지 이해하면 쉽다. 먼저 RNN부터 

 

1. RNN - recurrent neural network

1) 핵심 개념  

입력 갯수 출력 갯수에 따라서 one to many, many to one, many to many 로 나눠지지만 

핵심은 이전 hidden state 의 아웃풋과 현시점의 인풋이 함께 연산 된다는 것

 

 

2) 문제  입력 시퀀스의 길이가 너무 길면 (Long sequence)

-->  그레디언트 주는 편미분 과정에서 (Back Propagation Through Time)

       그레디언트가 사라지거나 폭발하는 문제가 생김 (Gradient Vanishing , Gradient Exploding) 

 

 

결국 다른 딥러닝 모델들과 마찬가지로 Back propagation 과정을 통해 Gradient 를 편미분하는데, 

문제는 RNN 의 구조상 입력 데이터의 길이가 길어지면 에러 값 계산 후

처음 hidden state 까지 back propagation 하며 gradient 주는 과정이 너무 길기 때문에,, 

gradient 값이 연산 과정에서 아주 작아져 버림 결국 gradient가 전달이 잘 안된다는것  ==> 이를 Gradient Vanishing 이라 한다. 

 

*** 정말 쉽게 비유하자면, 내가 시험 문제를 겁나게 풀고있는데, 마지막에 채점을 해

      하지만 그 문제가 너무 예전에 푼 문제라 채점을 해도 기억이 안나는 그런 느낌. 

      학습이 안되는 상황.. 

 

 

하지만 문제점은 many to many 와 같은 구조에서 초반부에 입력된 것이 후반부에 잊혀지는 것이다. (마치 사람같구나) 

이러한 문제를 Gradient vanishing 이라 한다. 학습에 영향을 미치는 gradient 가 점점 소멸되는 것 

 

따라서 예전 기억도 계속 리마인드 시켜주는 학습 방법이 필요해짐 !!!! 그것ㅇl LSTM ! 

 

 

2. LSTM 

따라서 우측처럼 계속 기억을 유지시켜 줄 수 있게 하는 LSTM 이 등장했다. 

LSTM의 구조는 아래와 같고,

특징은 2개의 벡터 ( 단기 상태 ht / 장기 상태 Ct ) 3개의 게이트 ( input gate, output gate 그리고 forget gate )

를 가지고 있다는 점이다

LSTM 셀에서는 상태(state)가 두 개의 벡터 ​와 ​로 나누어 진다는 것을 알 수 있다. 

ht ​를 단기 상태(short-term state), ​Ct를 장기 상태(long-term state)라고 볼 수 있다.각 게이트를 정말 간단하게만 정리하자면 컨셉은 이렇다

input gate : 이번 입력을 얼마나 반영할지 

output gate : 이번 정보를 얼마나 내보낼지 

forget gate : 과거 정보를 얼마나 까먹을지 

 

그리고 이 모든 장기기억이 ct에 담김으로써 RNN의 문제를 해결함 

 

 

3. GRU

위의 복잡한 구조를 간단히 시킨게 GRU

차이점 ! 

 

  • GRU는 게이트가 2개, LSTM은 3개
  • GRU는 내부 메모리 값 ( ct )이 외부에서 보게되는 hidden state 값과 다르지 않음. LSTM에 있는 출력 게이트가 없음 ! 
  • 입력 게이트와 까먹음 게이트가 업데이트 게이트 z로 합쳐졌고, 리셋 게이트 r은 이전 hidden state 값에 바로 적용
  • 따라서, LSTM의 까먹음 게이트의 역할이 r과 z 둘 다에 나눠졌다고 생각할 수 있음
  • 출력값을 계산할 때 추가적인 비선형 함수를 적용하지 않음 

 

1) Rt : reset gate (지난 정보를 얼마나 버릴지) 

현재 시점의 입력값 (xt)가 입력되면 그 시점의 가중치 Wr 와 내적 

전 시점의 hiddenstate ht-1는 그시점의 가중치 Ur 와 내적 

마지막으로 두 계산이 더해져 sigmoid 함수에 입력 --> 결과는 0~1사이값 

 

 

2) Zt : update gate  (이번 정보를 얼마나 반영할지) 

현재 시점의 입력값 (xt)가 입력되면 그 시점의 가중치 Wz 와 내적 

전 시점의 hiddenstate ht-1는 그시점의 가중치 Uz 와 내적 

마지막으로 두 계산이 더해져 sigmoid 함수에 입력 --> 결과는 0~1사이값 

 

 

3) ~h : 현재 시점에 과거의 메모리를 얼마나 사용할거냐 

현재 시점의 입력값 (xt)가 입력되면 그 시점의 가중치 Wh 와 내적 

전 시점의 hiddenstate ht-1는 그시점의 가중치 Uh 와 내적하고 Rt(지난 정보 버림값)와 성분 곱

마지막으로 두 계산이 더해져 tanh 함수에 입력

 

--> 결국 Rt, Zt 각각 현시점 인풋 Xt와 이전시점 hidden state ht-1 을 weight와 곱한뒤 sigmoid 통과 시키는 구조

       다른 점은 연산되는 weight matrix 값이 다르다는 것. 

 

4) h : 최종 메모리 정보 

update gate 출력값 Zt (이전정보 얼마나 반영) 와 이전시점 hidden state  ht-1를 성분 곱

update gate 에서 버리는 값인 1-Zt (이전정보 얼마나 안반영) 와 현재시점 hidden state ht 을 성분 곱 

 

 

 

 

 

참고 link : 

 

https://conanmoon.medium.com/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99-%EC%9C%A0%EB%A7%9D%EC%A3%BC%EC%9D%98-%EB%A7%A4%EC%9D%BC-%EA%B8%80%EC%93%B0%EA%B8%B0-%EC%97%B4-%EC%9D%BC%EA%B3%B1-%EB%B2%88%EC%A7%B8-%ED%86%A0%EC%9A%94%EC%9D%BC-a72099824dae

 

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

GRU(Gated Recurrent Unit)

conanmoon.medium.com

 

 

 

aikorea.org/blog/rnn-tutorial-4/

 

RNN Tutorial Part 4 - GRU/LSTM RNN 구조를 Python과 Theano를 이용하여 구현하기

WildML의 네 번째 (마지막!) RNN 튜토리얼입니다. 마지막 포스트에서는 최근에 가장 널리 쓰이는 RNN의 변형 구조인 LSTM과 GRU의 구조와 구현에 대해 다룰 예정입니다. 이전 번역 포스트들과 마찬가지

aikorea.org

wikidocs.net/22889

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

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

 

RNN과 LSTM을 이해해보자! · ratsgo's blog

이번 포스팅에서는 Recurrent Neural Networks(RNN)과 RNN의 일종인 Long Short-Term Memory models(LSTM)에 대해 알아보도록 하겠습니다. 우선 두 알고리즘의 개요를 간략히 언급한 뒤 foward, backward compute pass를 천천

ratsgo.github.io

 

728x90
반응형

댓글