<이전 글>
[딥러닝] 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]}$이 나온다.
이렇게 모든 변수에 대한 미분을 역전파를 사용해 구할 수 있다.
'CS > 딥러닝' 카테고리의 다른 글
| [딥러닝] 6. 최적화 (0) | 2026.04.13 |
|---|---|
| [딥러닝] 5. Mini batch와 Batch Normalization (0) | 2026.04.01 |
| [딥러닝] 4. Deep Neural Network (0) | 2026.03.30 |
| [딥러닝] 2. Shallow Neural Network / Activation function (0) | 2026.03.19 |
| [딥러닝] 1. Logistic Regression (3) | 2026.03.11 |