본문 바로가기
Study/DL

RNN - 1편 (RNN구조, RNN의 Backpropagation)

by 까망우동 2023. 7. 1.
반응형

Index

     

    TDNN (Time Delayed Neural Network)

    RNN이 개발되기 전에는 temporal pattern을 갖는 문제를 해결하기 위해 기존의 DNN 구조에 input 으로 시계열 데이터를 시퀀스를 가지고 투입하는 TDNN 이 활용되었다. 

    • 특정 사이즈(n)의 window를 sliding 시켜가며 시계열 input data를 받는다. (마치 1stride 1D Convolution 같이) 
    • Input 데이터 안에 window size 만큼의 데이터간에는 순서,dependency가 있을 수 있지만, Input끼리는 independent하다. 즉 input(t) 와 input(t-1)은 shuffle 가능하다. 

    단점

    • window size 가 너무 작으면 longer dependency 포착을 못하고, 너무크면 noise 와 parameter가 과하게 많아진다. 
    • 과거 데이터(이전 window)에 대한 기억이 없다 (input끼리 i.i.d하기때문). window size만큼씩의 정보에 대해서만 학습한다. 따라서 long memory에 대해 취약하다.
    • window size는 상수로 fix되어있다. 따라서 variable length problem 예를들어 NLP문제는 해결 불가능하다. 

     

    RNN (Recurrent Neural Network)

    • TDNN을 포함한 기존의 DNN구조는 current input에 대해서만 작동한다. 반면 RNN 은 Current + Previous Input에 대해 Recurrent 하게 학습 및 예측하는 구조이다. 
    • x(t)로 current input data를 받고, h(t)라는 hidden state vector를 통해 past memory (previous input)를 기억한다. 
    • window size에 대한 제한이 없다. 
    • W_xh, W_hh, W_hy 는 time step에 무관하게 항상 같은 값 (sharing weight) 즉, 3개 파라미터만 학습하면 된다. 

    Backpropagation Through Time (BPTT) 

    • RNN 에서 Backpropagation 을 통한 gradient 계산은 W_xh(U), W_hh(V), W_hy(W)를 구하는 것이다.
    • 아래 그림과 같이 RNN을 unfold 시켜 생각했을때, 각 time step 마다의 U,V(0,1,...t)를 각기 다른 가중치로 감안하여 gradient를 계산하고, 각 timestep 에서 계산한 값들의 평균을 U,V의 최종 gradient로 사용한다. 

    Truncated BPTT (TBPTT) 

    • BPTT는 timestep이 길어지면 계산속도가 너무 느려지고, gradient 최종값이 vanish/explode 할 수 있는 문제가 있다.
    • 그래서 TBPTT는 backpropagation 계산 대상이 되는 time step(=lookback)의 개수를 제한하는 기법이다. 얼만큼의 look back 만큼을 볼지는 truncation length 파라미터 만들어서 설정한다. (lookback ≠ truncation length 다른것이다)
    • lookback size는 window size와 비슷한 개념으로 보면되는데, 보통 200까지는 적당한 사이즈이다. 
    • 요약하면, lookback 은 우리가 현재나 미래를 예측하기 위해 필요한 과거 데이터의 길이, 즉 window size 의 개념이고, truncation lengh 는 그 길이 안에서 gradient 계산할때는 몇step까지 볼지를 의미한다. (따라서, lookback length > truncation length) 
    • 아래 그림과 같이 lookback 의 크기에 맞춰서 서로 overlap되게 input을 split한걸 subsequence라고 하고, 이러한 subsequence를 batch size 만큼 묶으면 1개의 batch가 된다. 
    • 다시말해 RNN의 input data는 3D tensor 모양이고, (batch_size, timesteps, input_dim) 이되고, 아래 예시에서는 (5,5,3) 이다. 

    • minibatch 안에 5개의 subsequence 끼리는 shuffle이 가능한다. (subsequence 안에 데이터끼리는 불가능)
    • 다만 stateful = true 로 설정하면 shuffle이 안되는데, statful은 각 subseq의 initial state를 이전 batch 의 같은 순번 subseq로 부터 가져오겠다는 뜻이다. 
    • 자세히 설명하면 그림에서 두번째 batch에 있는 첫번째 subseq (6번)의 첫번째 데이터 x_t+1 의 W_hh를 계산하려면 직전 timestep 의 input data가 있어야 하는데 없다. 이 경우 stateful 을 사용하지 않으면 random한 값을 사용하지만, stateful = true로 켜두면 직전 batch의 첫번째 subseq(1번)의 final hidden state (h_t)를 사용한다. 
    • 이렇게 batch 안에서의 subseq의 순번이 중요해 지기 때문에 subseq 간에 더이상 i.i.d하지 않고 shuffle도 불가하다. 

     

     

     

    반응형

    'Study > DL' 카테고리의 다른 글

    Attention Mechanism  (0) 2023.07.01
    RNN - 2편 (LSTM)  (0) 2023.07.01
    CNN - 3편 (Up-sampling, U-Net)  (0) 2023.06.30
    CNN - 2편 (Bottleneck, ResNet,Dropout)  (0) 2023.06.29
    CNN - 1편 (CNN의 구조)  (0) 2023.06.29

    댓글