본문 바로가기
Research/Deep Learning & Application

TDNN, RNN, LSTM, ESN

by IMCOMKING 2015. 4. 15.

TDNN(Time Delay Neural Network) : 그냥 일반적인 MLP인데, input 데이터로 시간에 대해 (t, t-1, t-2)  인 데이터를 한 번에 넣는 방법. 시간을 고려한 모델이 아닌 데에 discrete 한 시간 데이터를 다룰 때 쓰는 가장 간단하고 대표적인 방법.
Continuous 한 시간 데이터의 경우는 위 방법으로 할 수가 없다. 그래서 sliding windowing 방식으로 일정한 길이의 데이터를 일정 부분씩 겹치도록(보통 50%) 전처리 한 뒤 사용한다.(강제로 discrete하게 나누고, 대신 50%씩 겹치도록)


그러나 TDNN 방법은 한정된 데이터의 time sequence만 학습할 수 있기 때문에(예를 들면 t, t-1,t-2 면 third order) 시간데이터에서 가장 중요한 long term dependency를 학습하기 어렵다는 문제가 있다. 만약 딱 3개 항간의 시간 의존성이 있다면 학습이 잘 될 수도 있다


또한 sliding windowing 방식은 long term 하게 데이터를 넣으면 넣을 수록 dimension이 한없이 높아져 마찬가지로 학습이 힘들다는 문제가 있다. 또한 시간에 대한 학습과 데이터 자체에 대한 학습이 같은 공간에서 한 번에 풀어져야 해서 더욱 더 어려운 문제가 되어버린다.


* TDNN은 1D-Convolution과 동치이다.(stride=1)
https://www.quora.com/Is-a-TDNN-Time-Delay-Neural-Network-same-as-a-1-d-CNN-Convolutional-Neural-Net



RNN(Recurrent Neural Network) : RNN은 일반 MLP 모델의 hidden node 에 자기 자신을 향하는 edge를 추가하여 시간에 대해 학습하는 weight를 새롭게 추가한 모델이다.
단점은 위의 방법들 보다는 긴 time dependency를 학습할 수는 있지만, 아주아주 긴 시간 정보는 학습이 어렵다는 문제가 있다. 왜냐하면 오래전에 학습한 정보가 최근 정보를 학습하면서 덮어씌워져 희미해지기 때문이다.

즉 최근 데이터가 더 강하게 학습되고, 과거에 학습한 데이터는 희미해진 다는 문제가 있다.(모든 뉴럴넷에서 일어나는 문제)

일반적으로 RNN은 직전 상태에서만 영향을 받는 조건으로 학습시킨다. 따라서 Markovian NN으로 볼 수 있다. 그리고 Bidirectional RNN의 경우 직전 상태와 미래 상태로의 edge가 하나씩 있어 양방향으로 학습한다.

RNN을 학습하는 방법은 기존의 Backpropagation을 시간축으로 뉴런을 unfold하여 BP한 것으로, Backpropagation Through Time이라고 한다.


LSTM(Long-Short Term Memory) : LSTM은 sparse DRNN의 특수한 케이스로 현재까지 나온 시간 모델 중 가장 성능이 좋고 많이 쓰이고 있다. 간단히 아이디어만 설명하면 gate라는 개념을 도입하고 이를 학습시켜, RNN유닛마다 학습하는 데이터의 시간 초점이 다르다. 즉 어떤 RNN유닛은 short term만 학습하고, 다른 RNN 유닛은 오직 long term만 학습한다.

LSTM은 RNN에서 input, output, forget gate가 추가되어 long term dependency를 잘 학습할 수 있는 모델. 이때 RNN에는 activation function이 없다. 그래서 recursive하게 Time Through Back Propagation 을 하여도 vanishing gradient 또는 exploding gradient이 일어나지 않는다.

(gradient의 eigen value가 1보다 작으면 vanising, 1보다 크면 exploding하며 time unfolding을 많이 할수록 심하게 된다고 한다. 그 이유는 time unfolding 하는 부분에서 bptt는 같은 weight에 대해 계속해서 에러를 전파하게되고 곱셈의 형태로 back-propagation이 일어나기 때문인 것 같다.

http://www.deeplearning.net/tutorial/lstm.html#lstm)


input gate : 데이터의 input을 받을지 말지 결정한다.
output gate : Hidden Neuron이 추론한 값을 사용할지 말지 결정한다.
forget gate : 한 주기마다 Hidden Neuron 의 weight를 초기화 시켜주어 긴 주기의 추론에서 weight가 발산하는 것을 regularization 해준다.

이때 input과 output gate가 모두 켜져 있을 때에만 에러를 학습하도록 weight의 식이 정의되어 선택적으로 학습한다.

다음을 참조(배포용)

20141110_RNN_LSTM_상웅_distributable.pdf



ESN(Echo State Network) : ESN은 독일 연구자들이 많이 연구한 모델로, RNN을 임의로 생성한 뒤 오직 output뉴런과 히든 뉴런사이의 weight만 학습하는 방법이다. 즉 input에서 hidden node로 가는 weight와 hidden에서 hidden으로 가는 weight를 학습하지 않고 최초 initialize된 weight를 그대로 학습한다. 그래서 최초의 weight를 initialize할 때 weight vector들이 서로 orthogonal 하도록 조건을 주는 것이 일반적으로 보인다.

장점은 학습속도가 느렸던 RNN에 비해 매우매우 빠른 것이고 성능도 의외로 잘나온다고 한다. 




댓글