AI Basic

Recurrent Neural Network에서의 Backpropagation 살펴보기(From scratch)

2로 접어듦 2023. 3. 8. 09:40

RNN 네트워크의 구조(간단 버전, 시그모이드 생략)

Recurrent 하게 나타낼 수 있다. 아주 간단하게(LSTM, GRU 가 아닌) 표현하면, Hidden State를 저장하는 weight matrix W_h 가 Sequential input X_t에 recurrent 하게 적용되며, 해당 t time별로 Hidden State H_t가 기록된다. 아래와 같이 간단히 나타낼 수 있다.

 

 

RNN 네트워크 함수로의 표현

 

H를 Hidden State로 표현하면 위와 같이 간단하게 표현할 수 있다.

마지막 Hidden state H_n의 경우, 그리고 RNN 이 Many-to-one classification에 사용된다면 H_n은 시그모이드 함수를 거친 뒤 predicted output Y_hat으로 계산되어 나온다(하지만 여기선 계산의 편의를 위해 시그모이드를 생략하겠다)

 

각 변수의 Gradient 계산방법

각 변수 W_h와 W_x를 우리는 '학습'이라는 과정을 통해(backpropagation) 마지막 H_n이 target Y 와 같은 값을 가질 수 있도록 해야 한다. 즉, cost_function의 값이 최소가 되게 해야 하는 것이며, 이는 loss fucntion의 값을 최소화하는 것과 같다.

loss function을 MSE, RMSE ... 등으로 설정할 수 있는데, MSE Loss 를 기준으로 한다면, 각 변수의 gradient는 아래와 같이 계산이 가능하다.

이 때 H_n의 경우 H_(n-1) , H_(n-2), ... 으로부터 계산되어 나온 결과 값이다.

각 n번째 Hidden state의 값들에 W_h의 값이 multiply되어 H_n 의 값이 도출되는 것이기 때문에, H_k 번째에 대해서도 편미분이 이루어져야 한다(W_x 에 대한 편미분도 마찬가지). 아래와 같이 연쇄법칙을 적용하여 계산 식을 도출할 수 있다.

여기서 loss에 대한 H_n으로의 편미분 값은 아래와 같다.

 

 

 

Pseudo code

 

// Pseudo Code for gradient of "W_h"

// Backpropagation은 n -> 0 순서로 계산된다.
partial_deriv_Loss_of_H_k = partial_deriv_loss_of_H_(k+1) * partial_deriv_H_(k+1)_of_H_k

// 여기서 partial_deriv_loss_of_H_(k+1) 값은 계속 기억되며 전달
// partial_deriv_H_(k+1)_of_H_k = W_h

 

 

출처

1. https://en.wikipedia.org/wiki/Mean_squared_error