이번 문서의 목표: 이 파일을 다 읽으면 2-2-1 구조의 작은 신경망에서 순전파로 예측값과 손실을 계산하고, 연쇄법칙(chain rule)을 이용한 역전파로 모든 가중치의 기울기를 손으로 구한 뒤, 경사하강법으로 가중치를 한 번 갱신하는 전 과정을 숫자 하나 빠짐없이 재현할 수 있다.
왜 이 계산을 손으로 직접 해봐야 하는가
06편까지 활성화 함수와 손실 함수를 각각 따로 살펴봤다. 이 편에서는 그 둘을 하나의 신경망 안에서 실제로 연결해, 입력이 들어가서 예측이 나오기까지의 순전파(forward propagation), 그리고 그 예측이 얼마나 틀렸는지를 거슬러 올라가며 모든 가중치의 책임을 나누는 역전파(backpropagation)를 숫자로 직접 계산한다. 독학사 시험에서는 작은 신경망을 주고 “은닉층 h1의 가중치 갱신량은?”처럼 중간 계산 단계 하나를 콕 집어 묻는 문제가 나오는데, 공식만 암기하고 실제로 손으로 계산해 본 적이 없으면 첫 단계부터 막힌다. 이 편의 목표는 계산기 없이도(또는 계산기로 검산하며) 대입부터 답까지 한 줄도 건너뛰지 않고 전체 과정을 따라갈 수 있게 하는 것이다.
신경망 구조와 초기값 설정
쉽게 말하면: 입력 2개, 은닉 노드 2개, 출력 노드 1개짜리 아주 작은 신경망 하나를 만들고, 모든 가중치·편향에 구체적인 숫자를 미리 정해 넣는다.
05편에서 소개한 2-2-1 구조(입력 2개, 은닉층 노드 2개, 출력 노드 1개)를 그대로 쓴다. 모든 노드의 활성화 함수는 시그모이드 로 통일한다.
이 그림에 대응하는 값을 표로 정리하면 다음과 같다.
| 기호 | 뜻 | 값 |
|---|---|---|
| 입력값 | ||
| 가중치 | ||
| 가중치 | ||
| 은닉 노드 의 편향 | ||
| 출력 가중치 | ||
| 출력 노드의 편향 | ||
| 실제 정답(목표값) | ||
| (에타) | 학습률 |
이 값들은 계산 과정을 보여주기 위해 임의로 정한 작은 숫자이며, 실제 학습에서는 가중치를 이렇게 손으로 정하지 않고 무작위로 초기화한다(초기화 방법은 10편에서 다룬다).
1단계 — 순전파: 은닉층 계산
쉽게 말하면: 입력에서 출력까지 화살표 방향대로 가중합을 구하고 활성화 함수를 씌우는 것을 순서대로 반복하면 된다.
먼저 은닉 노드 의 가중합을 구한다.
이 값을 시그모이드에 통과시켜 의 활성화 값을 얻는다.
같은 방식으로 은닉 노드 를 계산한다.
2단계 — 순전파: 출력층 계산
은닉 노드의 출력 를 다시 입력으로 삼아 출력 노드의 가중합을 구한다.
이 값을 시그모이드에 통과시켜 최종 예측값을 얻는다.
여기까지가 순전파다. 입력 에 대해 이 신경망은 이라는 예측을 내놓았다.
3단계 — 손실 계산
쉽게 말하면: 예측과 정답의 차이를 제곱해 절반으로 나눈 값이 이번 예측이 “얼마나 틀렸는지”를 나타내는 손실이다.
06편에서 다룬 평균제곱오차(MSE)를 샘플 하나에 대해 쓰면 다음과 같다(2로 나누는 것은 나중에 미분했을 때 계수를 깔끔하게 만들기 위한 관례다).
- : 손실(loss) 값. 이 신경망이 이번 샘플을 얼마나 틀리게 예측했는지 나타내는 하나의 숫자.
- : 실제 정답.
- : 방금 순전파로 구한 예측값.
이 손실 을 줄이는 방향으로 모든 가중치를 조금씩 바꾸는 것이 역전파와 경사하강법이 하는 일이다.
4단계 — 역전파: 연쇄법칙으로 출력층 기울기 구하기
쉽게 말하면: 손실을 각 가중치로 미분한 값(기울기)을 구해야 하는데, 가중치가 손실에 미치는 영향은 여러 함수를 거쳐 간접적으로 전달되므로, 그 경로를 하나씩 따라가며 미분값을 곱해 나간다. 이것이 연쇄법칙이다.
연쇄법칙(chain rule)은 이 의 함수이고, 가 의 함수이고, 가 의 함수일 때, 을 로 직접 미분하는 대신 이 사슬을 따라 미분값을 곱해서 구할 수 있다는 미적분의 정리다.
- (편미분, partial derivative): 다른 모든 값은 고정한 채 만 아주 조금 바꿨을 때 이 얼마나 바뀌는지 나타내는 기울기.
- 이 기울기를 세 개의 “국소 기울기”(local gradient, 한 단계씩만 떼어서 본 미분값)의 곱으로 나눈 것이 연쇄법칙의 핵심이다.
세 항을 하나씩 계산한다. 첫째, 손실을 예측값으로 미분한다.
둘째, 예측값을 출력층 가중합으로 미분한다. 시그모이드의 도함수 공식 을 그대로 적용한다.
이 두 항을 미리 곱해 둔 것을 출력층 델타(delta, 그 노드가 손실에 대해 갖는 책임의 크기)라 부르고 로 표기한다.
셋째, 출력층 가중합을 가중치 , 편향 로 각각 미분한다. 이므로 미분은 계수만 남긴다.
이제 델타에 이 값들을 곱해 최종 기울기를 완성한다.
5단계 — 역전파: 은닉층까지 거슬러 올라가기
쉽게 말하면: 출력층의 책임(델타)을 가중치를 거슬러 은닉 노드에 나누어 주고, 거기에 각 은닉 노드 자신의 활성화 함수 기울기를 다시 곱하면 은닉층의 델타가 된다.
은닉 노드 은 출력 노드로 가는 경로 하나만 가지고 있으므로, 가 가중치 를 거쳐 에 얼마나 전달되는지부터 구한다.
여기에 자신의 활성화 함수(시그모이드) 도함수를 곱하면 은닉층 델타 이 된다.
같은 방식으로 의 델타를 구한다.
이제 을 로 미분하면 각각 이 남으므로, 델타에 곱해 입력층 쪽 가중치의 기울기를 완성한다.
여기서 “역전파”라는 이름의 의미가 뚜렷이 드러난다. 손실 이 출력층에서 계산되었지만, 그 책임(기울기)은 순서로 출력에서 입력 방향으로 거슬러 흐르며 각 층의 가중치에 나누어 전달된다. 순전파가 입력에서 출력으로 가는 흐름이라면, 역전파는 정확히 그 반대 방향으로 기울기가 전파되는 흐름이다.
6단계 — 경사하강법으로 가중치 한 번 갱신하기
쉽게 말하면: 기울기가 양수면 그 가중치를 줄이고, 음수면 늘리는 방향으로 학습률만큼 이동시킨다. 이 방향이 손실을 가장 가파르게 줄이는 방향이다.
경사하강법(gradient descent)의 갱신 규칙은 다음과 같다.
- : 이 예제에서 정한 학습률.
- 기울기가 음수이면 는 양수가 되어 가중치가 커지는 방향으로, 기울기가 양수이면 가중치가 작아지는 방향으로 움직인다.
여덟 개 파라미터를 모두 갱신한 결과는 다음과 같다.
| 파라미터 | 기존 값 | 기울기 | 갱신 계산 | 갱신 후 값 |
|---|---|---|---|---|
모든 기울기가 음수였으므로 모든 파라미터가 아주 조금씩 커지는 방향으로 갱신되었다. 이 방향이 맞는지는 새 가중치로 다시 순전파를 해보면 확인할 수 있다. 예를 들어 가 로 커지면, 계산에서 에 곱해지는 가중치가 커지므로 와 가 조금 커져 정답 쪽으로 한 걸음 다가가게 된다. 실제로 새 파라미터로 다시 순전파를 하면 가 보다 커져 손실 이 보다 작아진다는 것을 확인할 수 있다(정확한 재계산은 다음 스텝에서 반복하면 된다).
자주 틀리는 점: 갱신 규칙이 라는 것을 로 부호를 반대로 외우는 실수가 잦다. 기울기는 “손실이 증가하는 방향”을 가리키므로, 손실을 줄이려면 반드시 기울기의 반대 방향(빼기)으로 이동해야 한다.
핵심 정리
- 순전파는 입력에서 출력 방향으로 가중합(z)과 활성화(σ(z))를 층마다 반복해 예측값을 얻는 과정이다.
- 손실은 예측과 정답의 차이를 하나의 숫자로 나타내며, 이 편의 예제에서는 MSE 를 썼다.
- 역전파는 연쇄법칙으로 손실을 각 가중치에 대해 미분한 기울기를 출력층에서 입력층 방향으로 거슬러 계산하며, 각 노드의 델타(δ)를 다음 층으로 전달해 재사용한다.
- 경사하강법은 각 가중치를 기울기의 반대 방향으로 학습률만큼 이동시켜 손실을 줄인다.
- 시그모이드 도함수 가 역전파 전 구간에서 반복적으로 쓰이므로 반드시 암기해 둔다.
마무리 복습
참고 자료
- Ian Goodfellow 외, Deep Learning — 순전파·역전파 알고리즘과 연쇄법칙의 수학적 근거
- 국가평생교육진흥원 독학학위제 — 독학사 3단계 딥러닝 과목 출제기준 확인