문제를 해결하기에 앞서, Affine layer가 어떤 식으로 구성되어 있는지 확인해보자.
위 사진에서 볼 수 있는 것처럼, Affine 계층은 여러개의 input값을 받아서, 여러개의 output값을 출력하는 양상을 띄고 있다. 해당 layer를는 intput, weight, bias로 구성되어있고 각각이 선형결합된 결과로 output이 출력된다.
수식으로 나타내면 다음과 같다.
$$Y = XW + b$$
이때 $X$는 input으로 N x D matrix, $W$는 weight로 D x M matrix, $b$는 bias로 dimension이 M인 vector로 가정하자.
foward path의 경우는 단순하게 행렬 곱을 수행해주면 된다.
이 부분에서는 X의 각 행이 input data 1개에 해당한다는 것만 유의해 주면 된다. 따라서 np.dot(X, W) + b를 수행해주면 쉽게 output값을 구할 수 있다.
이때, Backpropagation을 활용하면 Upstream gradient 와 local gradient의 곱을 통해 해당 변수에 의한 L(loss function)의 변화를 관찰할 수 있게 된다.
결과적으로 Upstream gradient는 local gradient 간의 연산이므로, partial derivative를 수행하기 위해서는 각 변수에 대해서 local gradient를 구하는 것이 중요한 작업이 된다.
따라서 $Y = XW + b$ 이므로 $X$, $W$, $b$ 각각에 대해서 $Y$를 partial derivative을 수행한 결과에 대해서 검토할 필요성이 존재한다. $X$와 $W$에 대해서 증명한 결과는 https://calofmijuck.tistory.com/17#recentEntries 를 참고해주면 된다. 물론 가정한 차원을 보고 행렬 곱이 수행되기 위해서는 Transpose처리해야한다는 식의 논리를 펴서 끼워맞출수는 있으나, 정확하게 증명을 할 줄 알아야하므로 잘 정리해두도록 하자.
그러면, 이 포스팅에서는 $b$에 대해 partial derivative을 수행한 결과에 대해서 분석해보도록 하겠다. 위 포스팅에서의 결론과 비슷하게 진행해주면 된다.
$\frac{\partial Y_{\alpha\beta}}{\partial b_i}$은 내부 sigma에서 $\beta = i$ 일때만 1이고 나머지는 0이다. 왜냐하면 가중치는 출력층의 각 class에 작용하는 것이므로 $\beta$와 관련이 있기때문이다. ($X$와 $W$는 $b$와 무관한 변수이므로 partial derivative을 수행할 때 고려하지 않는다.)