Add関数を実装。
class AddLayer: def forward(self, x, y): return x + y def backward(self, dLda): dLdx = dLda * 1 dLdy = dLda * 1 return dLdx, dLdy
足し算の関数です。
forwardはただ加算して値を返すだけ。
x + y = a
で、最終結果Lに対するxの勾配、yの勾配を求めます。
dL/dx = dL/da x da/dx = dL/da x 1
dL/dy = dL/da x da/dy = dL/da x 1
なので、一つ上流の勾配であるdL/daをそのまま伝播させれば良いという事になります。
では試してみましょう。
add = AddLayer() x = np.array([[1],[2]]) y = np.array([[3],[4]]) dLda = np.array([5]) print("forward = ", add.forward(x, y)) dLdx , dLdy = add.backward(dLda) print("dLdx = ", dLdx) print("dLdy = ", dLdy) >> forward = [[4] [6]] dLdx = [5] dLdy = [5]
できた。