CS/딥러닝

[딥러닝] 3. multi layer network에서의 gradient 계산과 차원

CSE 2026. 3. 25. 14:41

 

<이전 글>

[딥러닝] 2. Shallow Neural Network / Activation function

 

[딥러닝] 2. Shallow Neural Network / Activation function

Neural Network 이전 글에서 알아봤던 logistic regression을 아래처럼 표시해보자.이런 작은 층을 여러 개 쌓으면 Neural Network가 된다.대괄호 [ ] 는 층을 얘기한다.computation graph를 그리면 아래와 같다. 보

april2901.tistory.com

 

 

이번 글에서는 이전 글들에서 계속 다뤘던 두 개의 층을 가진 신경망에서 역전파를 사용해 gradient를 계산해보자.

 

먼저 각 층의 unit의 개수를 각각 $n^{[0]}, n^{[1]}, n^{[2]}$라고 하자.

그러면 $n^{[0]}$은 입력의 개수가 되고, $n^{[2]}=1$은 출력의 개수이다.

 

파라미터로는 총 4가지가 있을 것이다.

1. 0층 → 1층 시 적용되는 가중치 : $W^{[1]}$  /  차원 : ($n^{[1]}, n^{[0]}$)

2. 0층 → 1층 시 적용되는 편향    : $b^{[1]}$   /  차원 : ($n^{[1]}, 1$)

3. 1층 → 2층 시 적용되는 가중치 : $W^{[2]}$   /  차원 : ($n^{[2]}, n^{[1]}$)

4. 1층 → 2층 시 적용되는 편향    : $b^{[2]}$   /  차원 : ($n^{[2]}, 1$)

 

cost function은 다음과 같이 각 테스트케이스의 loss를 평균 낸 것이다.

$J(W^{[1]}, b^{[1]},  W^{[2]}, b^{[2]})= \frac{1}{m} \Sigma_{i=1}^m L(\hat{y},y)$

여기서 $m$은 테스트 케이스의 개수이다.

 

먼저 

순전파(forward propagation)의 식을 먼저 봐야한다.

아래처럼 쓸 수 있다.

$Z$는 activation function을 통과하기전 중간 값, $A$는 통과하고 나온 각 층의 최종 출력이라고 보면된다.

(식 1) : $Z^{[1]} = W^{[1]} X + b^ {[1]}$

(식 2) : $A^ {[1]} = g^ {[1]} (Z ^{[1]} )$

(식 3) : $Z^ {[2]} = W^ {[2]} A^ {[1]} + b^{[2]} $

(식 4) : $A^ {[2]}= g^ {[2]} (Z^ {[2]}) = \sigma(Z^ {[2]} )$

 

vectorization을 통해 $m$개의 샘플에 대해 한번에 계산한다.

따라서 입력 데이터 $X$의 차원은 $(n^ {[0]},m )$이다.

나머지 기호들의 차원을 보면 아래와 같다.

$Z^ {[1]},A^ {[1]} : (n^ {[1]}, m) $

$Z^ {[2]},A^ {[2]} : (n^ {[2]}, m) $

여기서 $b$들은 원래 $(n^{[1]}, 1)$이지만 차원을 맞추기 위해 값이 복사되어 $(n^{[1]}, m)$이 된다.

 

이제 역전파를 통해 gradient를 계산해보자.

기본적으로 Loss값을 각 변수에 대해 미분한 값을 구하는 것이 목표이다.

먼저 $dZ^{[2]}$를 구하자.

두 번째 층은 activation function이 sigmoid로 정해져 있다.

sigmoid함수를 통과한 값이 Loss함수의 예측값으로 들어가는데, 이 [sigmoid + cross entropy loss] 구조는 미분하면 매우 간단해진다.

미분하면 바로 예측값 - 정답값의 꼴로 나온다.

따라서 

(식 5) : $dZ^{[2]}=A^{[2]}-Y$이다.

각 항의 차원은 모두 $(1,m)$이다.

 

(식 3)를 $dW^{[2]}$에 대해 미분하면,

$\frac{dZ^{[2]}}{dW^{[2]}} = A^{[1]}$이다.

이를 (식 5)의 양변에 곱하면 

(식 6) : $dW^{[2]} = \frac{1}{m} dZ^{[2]} A^{[1]T}$이다.

$m$으로 나눈 이유는 손실함수 자체를 $m$개의 평균으로 정했기 때문이다.

차원은 $(1, n^{[1]})$이다.

 

(식 3)을 $db^{[2]}$로 미분하면 1이 나온다.

이를 (식 5)에 곱하면

(식 7) : $db^{[2]} = \frac{1}{m} np.sum(dZ^{[2]})$이 된다.

차원은 $(1,1)$ 또는 $(1,m)$이다.

확장을 하는지 마는지에 따라 다르지만 의미는 동일하다.

 

$\frac{dA^{[1]}}{dZ^{[1]}}$과 $\frac{dZ^{[2]}}{dA^{[1]}}$를 비슷하게 계산한 후 (식 5)에 모두 곱해주면

(식 8) : $dZ^{[1]} = W^{[2]T} dZ^{[2]} * {g^{[1]}}' (Z^{[1]})$

차원은 $(n^{[1]},m)$이다.

 

(식 1)을 $dW^{[1]}$으로 미분한 결과를 (식 8)에 곱하면,

(식 9) : $dW^{[1]} = \frac{1}{m} dZ^{[1]}X^T$ 가 나온다.

차원은 $(n^{[1]},n^{[0]})$이다.

 

마지막으로 $db^{[2]}$를 구한 것과 같은 방식으로 $db^{[1]}$을 구하면

마지막 식 (식 10) : $\frac{1}{m} np.sum(dZ^{[1]}$이 나온다.

 

이렇게 모든 변수에 대한 미분을 역전파를 사용해 구할 수 있다.