implement_ml_models/RNN
implement_rnn(result_w)
명징직조지훈
2022. 12. 5. 12:15
2022.12.05 - [implement_ml_models] - implement_rnn(delta2)
implement_rnn(delta2)
2022.12.04 - [implement_ml_models] - implement_rnn(delta) implement_rnn(delta) 2022.12.03 - [implement_ml_models] - implement_RNN(hidden_activation) implement_RNN(hidden_activation) 2022.12.03 - [implement_ml_models] - implement_RNN(first_step) implement_R
teach-meaning.tistory.com
이러한 delta 값을 구한 이유는 delta가 노드의 입력값의 변화에 따른 오차 함수의 변화를 뜻하고, 이를 통해 가중치 변화량을 계산할 수 있기 때문이다.
rnn 에는 가중치의 종류가 3개가 존재,
- result_w : 은닉층의 출력에서 예측값과 연결되는 가중치
- input_w : 입력값에서 은닉층의 입력으로 연결되는 가중치
- before_w : 이전 은닉층의 출력에서 현재 은닉층의 입력으로 연결되는 가중치
t 층의 순환 신경망의 경우 result_w, input_w 는 t 번의 반복, before_w 는 t-1 번의 반복이 있지만, 첫 번째 층의 before_w 를 0이라고 임의로 지정하여 모두 t번의 반복을 수행할 수 있도록 할 수 있다.
result_w
오차 제곱합의 사용
"""
예측 노드의 델타,
오차 함수의 미분값과 동일하다.(활성화 함수로 항등 함수를 사용했기 때문)
"""
err = Error()
result_delta = err.d_RMSE(target, rnn_result)
result_delta
>>>
array([[-6.34645513718887],
[-11.4274288618395],
[-12.7238757992856],
[-13.7852011357702]], dtype=object)
#예측 노드의 델타를 사용한 result_w 값 업데이트
rnn_hidden_output
>>>
array([[0.999999999999453],
[0.999999997388096],
[0.999999990932234],
[0.999999999999768]], dtype=object)
d_result_w = result_delta * rnn_hidden_output
d_result_w
>>>
array([[-6.34645513718540],
[-11.4274288319922],
[-12.7238756839085],
[-13.7852011357670]], dtype=object)