Post

[AI Day 09] 역전파를 이해하기 위한 편미분과 체인룰

[AI Day 09] 역전파를 이해하기 위한 편미분과 체인룰

[AI 수학] Day 9 - 역전파를 이해하기 위한 편미분과 체인룰

들어가며

지난 시간에는 Gradient Descent(경사하강법)를 공부했다.

경사하강법에서는 다음과 같이 가중치를 수정한다.

1
2
3
4
5
새로운 가중치
=
기존 가중치
-
학습률 × Gradient

그런데 여기서 한 가지 의문이 생긴다.

Gradient는 어떻게 계산할까?

이를 이해하기 위해서는 편미분과 체인룰을 정확하게 이해해야 한다.

오늘은 이 개념들을 다시 정리하고, 최종적으로 Backpropagation(역전파)과 어떻게 연결되는지 공부했다.


1. 곱의 미분

먼저 곱의 미분과 체인룰을 구분할 필요가 있다.

두 함수가 곱해져 있다면 곱의 미분법을 사용한다.

예를 들어

1
f(x) = x²(x+1)

처럼

1
함수 × 함수

형태라면 다음 공식을 사용한다.

1
2
3
앞미분 × 뒤그대로
+
앞그대로 × 뒤미분

따라서

1
2
3
f'(x)
=
2x(x+1) + x²(1)

정리하면

1
2
3
f'(x)
=
3x² + 2x

이다.

즉, 두 함수가 서로 곱해져 있다면 곱의 미분을 생각하면 된다.


2. 편미분

편미분은 변수가 여러 개 있을 때 특정 변수 하나를 선택하여 미분하는 것이다.

예를 들어

1
z = x² + y²

라는 함수가 있다고 하자.

x에 대해 편미분한다면

1
∂z/∂x

로 표현한다.

이때 중요한 규칙은

x를 제외한 다른 변수는 상수로 생각한다.

따라서

1
2
x² → 2x
y² → 0

이므로

1
∂z/∂x = 2x

이다.

반대로 y에 대해 편미분하면 x를 상수로 생각한다.

1
∂z/∂y = 2y

3. wx를 w로 편미분하면 왜 x일까?

역전파를 공부하면서 다음 식이 처음에는 이해하기 어려웠다.

1
∂(wx-y)/∂w = x

하지만 편미분의 규칙을 적용하면 간단하다.

현재 w에 대해 편미분하고 있기 때문에

1
2
3
w → 변수
x → 상수
y → 상수

로 생각한다.

예를 들어 x=2, y=8이라고 생각하면

1
wx-y

는

1
2w-8

과 같다.

이를 w로 미분하면

1
2
2w → 2
-8 → 0

이므로 결과는 2이다.

원래 식에서는 2의 자리에 x가 있었기 때문에

1
∂(wx-y)/∂w = x

가 된다.

즉,

1
2
3
3w → 3
5w → 5
xw → x

와 같은 원리이다.


4. 체인룰

체인룰은 함수 안에 또 다른 함수가 들어 있을 때 사용한다.

예를 들어

1
y = (3x+1)²

을 보자.

이 함수는 사실 두 단계로 이루어져 있다.

1
2
3
4
5
6
7
x
↓
3x+1
↓
제곱
↓
y

안쪽 함수를

1
u = 3x+1

이라고 하면

1
y = u²

로 바꿀 수 있다.

체인룰은

1
바깥 미분 × 안쪽 미분

이라고 생각할 수 있다.

먼저 바깥을 미분하면

1
2
3
y = u²

dy/du = 2u

안쪽을 미분하면

1
2
3
u = 3x+1

du/dx = 3

따라서

1
2
3
dy/dx
=
dy/du × du/dx

이므로

1
= 2u × 3

u를 다시 원래 식으로 바꾸면

1
= 2(3x+1) × 3

따라서

1
y' = 6(3x+1)

이다.


5. 체인룰의 핵심

체인룰은 단순히 공식을 외우는 것보다 변화가 전달되는 과정을 이해하는 것이 중요하다.

1
x → u → y

라는 관계가 있다면

1
2
3
x가 u에 미치는 영향
×
u가 y에 미치는 영향

을 계산하여

1
x가 최종적으로 y에 미치는 영향

을 알 수 있다.

수식으로는

1
2
3
dy/dx
=
dy/du × du/dx

이다.

즉, 각 단계의 변화율을 곱하여 전체 변화율을 구하는 것이 체인룰이다.


6. 곱의 미분과 체인룰의 차이

두 개는 모두 계산 중 곱하기가 등장하기 때문에 헷갈릴 수 있다.

하지만 시작하는 식의 구조가 다르다.

곱의 미분

1
x²(x+1)

처럼

1
함수 × 함수

형태일 때 사용한다.

1
2
3
앞미분 × 뒤그대로
+
앞그대로 × 뒤미분

체인룰

1
(x²+1)³

처럼

1
함수 안에 함수

형태일 때 사용한다.

1
바깥 미분 × 안쪽 미분

따라서 식을 보자마자 계산하기보다는 먼저 식의 구조를 확인하는 것이 중요하다.


7. 이제 역전파와 연결해보자

간단한 AI 모델을 생각해보자.

예측값을

1
ŷ = wx

라고 하고 손실 함수를

1
L = (ŷ-y)²

라고 하자.

계산 과정은 다음과 같다.

1
2
3
4
5
w
↓
ŷ
↓
L

AI가 학습하려면

w가 변했을 때 최종 Loss가 얼마나 변하는가?

를 알아야 한다.

즉,

1
∂L/∂w

를 구해야 한다.

그런데 w와 L 사이에는 ŷ라는 중간 단계가 있다.

그래서 체인룰을 사용한다.

1
2
3
4
5
∂L/∂w
=
∂L/∂ŷ
×
∂ŷ/∂w

8. 실제로 Gradient를 계산해보자

다음 값을 사용해보자.

1
2
3
w = 3
x = 2
y = 8

먼저 예측한다.

1
2
3
4
5
ŷ = wx

= 3 × 2

= 6

손실은

1
2
3
4
5
L = (ŷ-y)²

= (6-8)²

= 4

이다.

이제 뒤에서부터 미분한다.

먼저

1
L = (ŷ-y)²

을 ŷ에 대해 미분하면

1
2
3
∂L/∂ŷ
=
2(ŷ-y)

이므로

1
2
3
= 2(6-8)

= -4

이다.

다음으로

1
ŷ = wx

를 w에 대해 편미분한다.

x는 상수이므로

1
∂ŷ/∂w = x

현재 x=2이므로

1
∂ŷ/∂w = 2

이다.

체인룰로 두 변화율을 연결하면

1
2
3
∂L/∂w
=
∂L/∂ŷ × ∂ŷ/∂w

따라서

1
2
3
= -4 × 2

= -8

이다.

결국

1
Gradient = -8

을 구할 수 있다.


9. Backpropagation이란?

순전파에서는 입력부터 Loss까지 앞으로 계산한다.

1
2
3
입력
→ 예측
→ Loss

반대로 역전파에서는 Loss에서 시작하여 뒤로 이동하면서 Gradient를 계산한다.

1
2
3
Loss
→ 예측값
→ 가중치

각 단계의 변화율을 계산하고 체인룰을 이용하여 연결한다.

따라서 역전파를 간단하게 정리하면

Loss에서부터 뒤로 이동하면서 체인룰을 이용해 각 가중치의 Gradient를 계산하는 과정

이라고 할 수 있다.


10. 역전파와 경사하강법은 다르다

처음에는 두 개가 같은 과정처럼 느껴질 수 있지만 역할이 다르다.

1
2
3
Backpropagation
↓
Gradient 계산

그리고

1
2
3
Gradient Descent
↓
계산된 Gradient를 이용해 가중치 수정

이다.

즉,

1
2
3
4
5
6
7
8
9
10
11
12
13
예측
↓
Loss 계산
↓
Backpropagation
↓
Gradient 계산
↓
Gradient Descent
↓
가중치 수정
↓
다시 예측

과정을 반복하면서 AI가 학습한다.


오늘 배운 내용 정리

오늘 가장 중요하게 정리한 내용은 다음과 같다.

  • 곱의 미분은 함수 × 함수 형태에서 사용한다.
  • 편미분은 여러 변수 중 하나를 선택하고 나머지를 상수로 생각한다.
  • 체인룰은 함수 안에 함수가 있을 때 사용한다.
  • 체인룰은 각 단계의 변화율을 곱하여 전체 변화율을 구한다.
  • 역전파에서는 체인룰을 이용해 각 가중치가 Loss에 미치는 영향을 계산한다.
  • 역전파는 Gradient를 계산하고, 경사하강법은 그 Gradient를 이용해 가중치를 수정한다.

특히 다음 세 가지를 구분하는 것이 중요하다.

1
2
3
4
5
6
7
8
함수 × 함수
→ 곱의 미분

함수 안에 함수
→ 체인룰

여러 변수 중 하나를 선택
→ 편미분

마무리

역전파를 처음 공부하면서 체인룰과 편미분이 동시에 등장해 생각보다 헷갈리는 부분이 많았다.

하지만 하나씩 분리해서 보면 새로운 미분법을 배우는 것은 아니었다.

편미분을 이용해 특정 가중치에 대한 변화율을 계산하고, 여러 계산 단계가 연결되어 있다면 체인룰을 이용해 그 변화율들을 연결한다.

결국 역전파의 핵심은

체인룰을 이용해 Loss가 각 가중치에 얼마나 영향을 받는지 계산하는 것

이라고 이해할 수 있었다.

다음에는 이 원리가 PyTorch의 backward()에서 실제로 어떻게 사용되는지 공부해볼 예정이다.

This post is licensed under CC BY 4.0 by the author.