implement_RNN (delta-to-sequence, delta2)
2023.02.26 - [분류 전체보기] - implement_RNN (delta-to-sequence 2)
implement_RNN (delta-to-sequence 2)
2023.02.24 - [분류 전체보기] - implement_RNN (delta-to-sequence 1) implement_RNN (delta-to-sequence 1) 2023.02.21 - [분류 전체보기] - implement_RNN implement_RNN 가중치의 종류 W_xh : 입력 값에 대한 가중치, 가중치 연산 결과
teach-meaning.tistory.com
RNN 의 각 노드들의 delta 값 계산,
먼저 delta to sequence RNN 에서는 result_w 가 한 번만 사용된다.
# 노드 출력에 대한 변화량 계산, 델타 투 시퀀스 RNN 에서는 result_w 가중치가 한 번만 사용된다.
node_output_diff = (delta @ self.result_w)
node_output_diff 는 출력층 이전 노드 출력의 변화량에 대한 비용 함수의 변화량이다.
활성화 함수값 연산에 따른 변화량도 계산한다.
# 활성화 함수 변화량 적용
node_output_diff_activation = node_output_diff * self.activation.sigmoid_diff(self.node_input[self.input.shape[1] - 1])
해당 활성화 함수에 입력되는 값은 (이전 노드의 출력 * before_w + 데이터 입력 * input_w) 이다.
이전 델타 값을 구하기 위해 필요한 값으로는 before_w 가 사용되는 이전 노드의 출력이다.
이전 노 출력의 변화량에 대한 비용 함수의 변화량은 before_w 의 값이다.
# 노드 입력에 대한 비용 함수의 변화량
node_input_diff = self.node_output[self.input.shape[1] - 2] @ node_output_diff_activation
이제 해당 과정을 반복하면서 최초 입력 데이터에 대한 노드, RNN 의 처음 노드에 대한 delta 값을 구할 수 있고,
해당 delta 값을 통해 input_w 의 변화량에 대한 비용 함수의 변화량, before_w 의 변화량에 대한 비용 함수의 변화량을 계산할 수 있다.