딥러닝

오차역전파법 - 배치용 Affine 계층

남마허 2020. 2. 1. 00:06

바로 계산 그래프 보시죠.

 

 

 

입력 하나짜리와 차이점은 X(N, 2) 이 부분밖에 없군요.

 

하지만 주의할 게 있습니다.

덧셈의 역전파는 오른쪽의 값을 왼쪽으로 그대로 전달하면 되는 것으로 배웠습니다.

여기에서 편향의 역전파는 단순히 그렇게 생각하고 값을 넘기면 안됩니다.

 

 

책에서는 이렇게 나옵니다.

 

순전파의 편향 덧셈은 각각의 데이터(1번째 데이터, 2번째 데이터...)에 더해집니다. ---- 1

그래서 역전파 때는 각 데이터의 역전파 값이 편향의 원소에 모여야 합니다.         ---- 2

 

 

1번의 의미 입니다.

 

2번의 의미를 코드로 표현했습니다.

import numpy as np

dY = np.array([[1, 2, 3], [4, 5, 6]])
print(dY)

print("------------")

dB = np.sum(dY, axis=0) # 같은 열에 있는 원소들끼리 더함
print(dB)

 

 

수식상으로는 잘모르겠습니다.

상식적으로 이해하자면 서로 다른 데이터에 대한 값을 반영하기 위함인 거 같습니다.

 

 

 

최종적으로 Affine계층을 구현해보겠습니다.

class Affine:
    def __init(self, W, b):
        self.W = W
        self.b = b
        self.x = None
        self.dW = None
        self.db = None

    def forward(self, x):
        self.x = x
        out = np.dot(x, self.W) + self.b
        return out

    def backward(self, dout):
        dx = np.dot(dout, self.W.T)
        self.dW = np.dot(self.x.T, dout)
        self.db = np.sum(dout, axis=0)

        return dx

 

 

 

 

 

 

[참고]

-밑바닥부터 시작하는 딥러닝

반응형