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]
できた。