관리 메뉴

너와 나의 스토리

RNN & LSTM & GRU 완벽 정리 본문

Data Analysis/Machine learning

RNN & LSTM & GRU 완벽 정리

노는게제일좋아! 2019. 7. 25. 14:45
반응형

Terry TaeWoong Um님의 영상과 Colah의 블로그를 기반으로 정리하였습니다. (+ 추가 자료)

 

 

 

 

 

기본 NN 구조         

 

 

 

 

 

RNN 구조

 

 

1. RNN은 상당히 deep한 구조이다

$x_{0}$가 $h_{t}$를 출력하는데 영향을 미치려면 굉장히 많은 단계를 거치게된다.

 

2. exploding and vanishing gradient problem

여기서 $x_{0}$를 통해 나온 결과 A의 가중치를 작게 하면 이는 점점 작아져 나중에는 거의 영향력이 사라진다

반대로 가중치를 처음에 크게 잡으면 나중에 이 값이 너무 커지게 된다.

즉, 너무 예전 결과를 가져와 쓰는게 힘들다 

하지만 LSTM는 이런 문제가 발생하지 않는다!

 

즉, 기존 RNN의 경우 정보와 정보 사이의 거리가 멀면 초기의 weight 값이 유지되지 않아 학습 능력이 저하된다.

LSTM은 과거의 데이터를 계속해서 업데이트하므로, RNN보다 지속적이다.

 

 

LSTM Networks(Long Short Term Memory networks)

 

LSTM은 RNN의 특별한 형태이다.

long-term dependency problem 을 피하도록 디자인되었다.

LSTM 구조

 

표준 RNN은 A 부분이 하나의 layer(tanh)만 있다.

반면에 LSTM은 상호작용하는 4개의 layer가 있다.

 

 

 

 

                                [LSTM 구조]

 

A 부분을 하나의 네트워크라고 생각할 수 있다.

여기서 옛날 정보(memory)를 다음에 넘길지, 없앨지 컨트롤 한다.

 

 

 

LSTM에서 제일 중요한 것은 cell이다.

 

Cell: long term memory를 기억하는 것이다.

long term memory: 적절한 시점 t-1과 t의 적절한 조합에 의해 만들어진 memory이다.

                           long term memory를 이용해서 output을 낼 수 있다.

 

 

$f_{t}$: forget gate

$i_{t}$: input gate

$o_{t}$: output gate

 

gate 범위: 0≤$f_{t}$,$i_{t}$,$o_{t}$≤1

gate에 의해서 이전 데이터를 기억할지 말지 결정된다 -> gate가 학습되는 것

 

원래 RNN은 파란색 파라미터만 있었는데, MSTM에는 4가지 파라미터를 사용한다.

 

 

 

 

 

$h_{t}$: output

$\tilde{C}$: 현재 상태의 cell

 

 

 

forget gate $f_{t}$

$h_{t-1}$(hidden unit)과 $x_{t}$를 입력 받아 0~1 사이의 값을 내놓아 얼마나 forget할지 결정한다 -> $f_{t}$ 생성

 

input gate $i_{t}$

$h_{t-1}$(hidden unit)과 $x_{t}$를 입력 받아서 $i_{t}$를 생성하고,

tanh를 통해 현재 상태의 cell인 $\tilde{C}$을 만든다.

위에서 만들어진 $\tilde{C}$를 X,+ 연산을 통해 $C_{t}$를 만든다.

 

output gate $o_{t}$

tanh($C_{t}$)를 바로 $h_{t}$로 내보내는 것이 아니라

$h_{t}$ = $o_{t}$*tanh($C_{t}$)

이렇게 $o_{t}$로 어느정도 배출할지 조절을 해서 내보낸다.

 

 

 

요약

$C_{t}$ - 장기 상태 (long-term state)

$h_{t}$ - 단기 상태 (short-term stae)

 

$C_{t}$가 forget gate(X)를 지나가면서 일부 필요없는 데이터를 잃고,

input gate(+)를 지나가면서 새로운 데이터를 추가한다.  => $y_{t}$로 출력됨

 

그 후, $C_{t}$는 복사되어 output gate의 tanh 함수로 전달되어 $h_{t}$와 $y_{t}$를 만든다

 

 

LSTM 장점

- 각각의 메모리와 결과값이 컨트롤이 가능하다

 

LSTM 단점

- 메모리가 덮어씌워질 가능성이 있다

- 연산속도가 느리다

 

 

 

LSTM에 핍홀 연결

Felix Gers와 Jurgen Schmidhuber가

게이트 제어기에 장기 상태도 조금 노출시켜 좀 더 많은 문맥을 감지하게 만들면 좋을 수 있다는 아이디어 제안

 

 

 

GRU(Gated Recurrent Unit)

LSTM에 핍홀 연결한 모델에서 hidden state를 업데이트하는 계산을 간소화한 것이 GRU이다.

GRU에는 cell과 output gate가 없는 대신 update gate와 reset gate가 있다.

output gaterk 없어서 상태 백터인 $h_{t}$가 현재 step의 output으로도 다음 입력으로도 똑같이 들어가는 대신 

$r_{t}$(reset gate)가 $h_{t-1}$의 영향력을 제어한다.

 

LSTM은 초기의 weight가 계속 지속적으로 업데이트되었지만, GRUs는 update gate와 reset gate를 추가하여, 과거의 정보를 어떻게 반영할 것인지 결정한다.

Update Gate: 과거의 상태를 반영

Reset Gate: 현시점 정보와 과거시점 정보의 반영 여부를 결정

 

GRU 장점

- 연산 속도가 빠르다

- 메모리가 LSTM처럼 덮여 씌여질 가능성이 없다

 

GRU 단점

- 메모리와 결과값의 컨트롤이 불가능하다.

 

 

반응형
Comments