Add関数

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]

できた。