Post

[AI Day 03] 기울기와 미분의 시작 - 순간 기울기는 어떻게 구할까?

[AI Day 03] 기울기와 미분의 시작 - 순간 기울기는 어떻게 구할까?

들어가며

PyTorch를 공부하다 보면 gradient, backward(), optimizer 같은 개념을 자주 만나게 된다.

이 기능들은 모두 모델의 오차를 줄이기 위해 미분을 사용한다. 하지만 미분 공식을 외우기 전에 먼저 이해해야 할 개념이 있다.

바로 변화량과 기울기다.

오늘은 미분이 어떤 원리에서 시작되는지 이해하기 위해 다음 내용을 공부했다.

  • 변화량
  • 기울기
  • 직선과 곡선의 차이
  • 평균 기울기와 순간 기울기
  • h의 의미
  • 극한
  • x²을 미분하면 왜 2x가 되는지
  • Python을 이용한 기울기 계산
  • AI에서 미분이 사용되는 이유

1. 변화량이란?

다음 두 점이 있다고 생각해 보자.

1
2
(1, 2)
(3, 6)

첫 번째 점에서 두 번째 점으로 이동하면 x는 1에서 3으로 변한다.

1
Δx = 3 - 1 = 2

y는 2에서 6으로 변한다.

1
Δy = 6 - 2 = 4

여기서 Δ는 델타라고 읽으며, 어떤 값이 얼마나 변했는지를 의미한다.

1
2
Δx = x의 변화량
Δy = y의 변화량

2. 기울기란?

기울기는 x가 변했을 때 y가 얼마나 변했는지를 나타낸다.

계산 방법은 다음과 같다.

1
2
기울기 = y의 변화량 / x의 변화량
       = Δy / Δx

앞의 두 점을 이용해 계산하면 다음과 같다.

1
2
3
4
5
Δx = 2
Δy = 4

기울기 = 4 / 2
       = 2

기울기가 2라는 것은 x가 1 증가할 때 y가 2 증가한다는 뜻이다.

기울기 공식을 처음 보면 Δx / Δy로 헷갈릴 수 있지만, 정확한 순서는 다음과 같다.

1
기울기 = Δy / Δx

우리가 알고 싶은 것은 x가 변할 때 y가 얼마나 변했는지이기 때문이다.


3. 직선의 기울기는 왜 항상 같을까?

다음 함수를 살펴보자.

1
y = 2x

값을 표로 나타내면 다음과 같다.

xy
00
12
24
36

각 구간에서 x는 1씩 증가하고 y는 2씩 증가한다.

1
2
3
4
5
x: 0 → 1
y: 0 → 2

x: 1 → 2
y: 2 → 4

모든 구간에서 다음 값이 같다.

1
기울기 = 2 / 1 = 2

직선에서 x와 y가 변하지 않는 것이 아니다.

x와 y는 계속 변하지만, 변화하는 비율이 항상 일정하기 때문에 어느 위치에서나 기울기가 같다.


4. 곡선은 위치마다 기울기가 다르다

이번에는 다음 함수를 살펴보자.

1
y = x²
xy
00
11
24
39
416

y의 증가량은 다음과 같다.

1
2
3
4
0 → 1   : 1 증가
1 → 4   : 3 증가
4 → 9   : 5 증가
9 → 16  : 7 증가

직선과 다르게 y의 증가량이 계속 변한다.

따라서 y = x²과 같은 곡선은 위치에 따라 기울기가 달라진다.


5. 평균 기울기와 순간 기울기

y = x² 위의 두 점을 선택해 보자.

1
2
(1, 1)
(3, 9)

두 점 사이의 기울기는 다음과 같다.

1
2
3
4
5
Δx = 3 - 1 = 2
Δy = 9 - 1 = 8

기울기 = 8 / 2
       = 4

하지만 이 값은 x가 1에서 3으로 이동한 전체 구간의 기울기다.

곡선에서는 위치마다 기울기가 다르기 때문에, 두 점 사이에서 계산한 값은 해당 구간의 평균 기울기라고 볼 수 있다.

그렇다면 정확히 x가 2인 한 지점의 기울기는 어떻게 구할 수 있을까?


6. 한 점의 기울기에 두 점이 필요한 이유

x가 2일 때 함수값은 다음과 같다.

1
2² = 4

따라서 점은 다음과 같다.

1
(2, 4)

하지만 점 하나만으로는 기울기를 계산할 수 없다.

기울기는 변화량을 이용하기 때문에 시작점과 도착점, 즉 두 점이 필요하다.

같은 점끼리 계산하면 다음과 같다.

1
2
(4 - 4) / (2 - 2)
= 0 / 0

분모가 0이 되기 때문에 계산할 수 없다.

그래서 기준점 옆에 다른 점을 하나 두고 두 점 사이의 기울기를 계산해야 한다.


7. h란 무엇인가?

기준점에서 옆의 점까지 x가 이동한 거리를 h라고 표현한다.

기준점이 x라면 옆의 점은 다음과 같다.

1
x + h

기준점이 x = 2일 때 h에 따라 옆의 점은 다음처럼 달라진다.

hx + h
13
0.12.1
0.012.01
0.0012.001

h가 작아질수록 옆의 점은 기준점에 가까워진다.

h를 줄이는 이유는 결과를 정수에 가깝게 만들기 위해서가 아니다.

두 점을 최대한 가깝게 만들어 한 지점의 순간 기울기를 구하기 위해서다.


8. x = 2에서 순간 기울기 구하기

함수는 다음과 같다.

1
y = x²

기준점은 x = 2이고 함수값은 4다.

h를 줄여가며 기울기를 계산해 보자.

h = 1

1
2
3
4
5
옆의 점 = 2 + 1 = 3

기울기 = (3² - 2²) / 1
       = (9 - 4) / 1
       = 5

h = 0.1

1
2
3
기울기 = (2.1² - 2²) / 0.1
       = (4.41 - 4) / 0.1
       = 4.1

h = 0.01

1
2
기울기 = (2.01² - 2²) / 0.01
       = 4.01

h = 0.001

1
2
기울기 = (2.001² - 2²) / 0.001
       = 4.001

결과를 정리하면 다음과 같다.

h기울기
15
0.14.1
0.014.01
0.0014.001

h가 작아질수록 기울기는 4에 가까워진다.

1
5 → 4.1 → 4.01 → 4.001 → 4

따라서 y = x²에서 x = 2인 순간의 기울기는 4라고 할 수 있다.


9. h를 정확히 0으로 넣을 수 없는 이유

두 점 사이의 기울기는 다음 식으로 표현할 수 있다.

1
(f(x + h) - f(x)) / h

여기에 h = 0을 넣으면 다음과 같다.

1
2
(f(x) - f(x)) / 0
= 0 / 0

분모가 0이 되기 때문에 계산할 수 없다.

그래서 h를 정확히 0으로 만들지는 않고, 0에 한없이 가깝게 만든다.

1
2
3
4
5
1
0.1
0.01
0.001
0.0001

이처럼 어떤 값을 특정 값에 한없이 가깝게 보내는 생각을 극한이라고 한다.


10. x²을 미분하면 왜 2x일까?

함수를 다음과 같이 두자.

1
f(x) = x²

두 점 사이의 기울기는 다음과 같다.

1
(f(x + h) - f(x)) / h

함수를 대입하면 다음과 같다.

1
((x + h)² - x²) / h

(x + h)²을 전개하면 다음과 같다.

1
2
(x + h)²
= x² + 2xh + h²

원래 식에 대입한다.

1
(x² + 2xh + h² - x²) / h

x²과 -x²이 사라진다.

1
(2xh + h²) / h

분자에서 h를 묶는다.

1
h(2x + h) / h

h를 약분하면 다음과 같다.

1
2x + h

이제 h를 0에 한없이 가깝게 만들면 h 부분이 사라지고 다음 값이 남는다.

1
2x

따라서 다음과 같이 정리할 수 있다.

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

11. 미분 결과가 숫자 하나가 아닌 이유

x²을 미분한 결과는 숫자 하나가 아니라 2x다.

그 이유는 곡선의 기울기가 위치마다 달라지기 때문이다.

x기울기 2x
00
12
24
36
48
510

2x는 모든 위치에서 기울기를 구할 수 있는 새로운 함수다.

예를 들어 x = 5일 때 원래 함수값은 다음과 같다.

1
5² = 25

하지만 기울기는 미분한 함수에 x = 5를 넣어야 한다.

1
2 × 5 = 10

따라서 다음 두 값을 구분해야 한다.

1
2
함수값: 25
기울기: 10

12. Python으로 확인하기

이번에는 Python을 사용해 h가 작아질수록 기울기가 실제 미분값에 가까워지는지 확인했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def square(x):
    return x ** 2


def calculate_slope(x, h):
    y_change = square(x + h) - square(x)
    x_change = h

    return y_change / x_change


def main():
    x = float(input("기준 x를 입력하세요: "))

    h_values = [1.0, 0.1, 0.01, 0.001]

    for h in h_values:
        slope = calculate_slope(x, h)
        print(f"h = {h}일 때 기울기: {round(slope, 10)}")

    derivative = 2 * x
    print(f"미분 공식으로 계산한 기울기: {derivative}")


if __name__ == "__main__":
    main()

x에 3을 입력하면 다음과 같은 결과가 나온다.

1
2
3
4
5
h = 1.0일 때 기울기: 7.0
h = 0.1일 때 기울기: 6.1
h = 0.01일 때 기울기: 6.01
h = 0.001일 때 기울기: 6.001
미분 공식으로 계산한 기울기: 6.0

h가 작아질수록 계산 결과가 6에 가까워지는 것을 확인할 수 있다.


13. 오늘 헷갈렸던 부분

오늘 학습하면서 특히 헷갈렸던 부분은 다음과 같다.

기울기 공식의 순서

1
2
잘못 이해한 식: Δx / Δy
정확한 식: Δy / Δx

기울기는 x의 변화에 대한 y의 변화 비율이다.

직선의 기울기가 일정한 이유

직선에서 x와 y가 변하지 않는 것이 아니다.

1
2
x와 y가 변하지 않는다: X
x와 y의 변화 비율이 일정하다: O

h를 작게 만드는 이유

h를 작게 만드는 것은 정수에 가까워지기 위해서가 아니다.

두 점을 가깝게 만들어 순간 기울기에 가까워지기 위해서다.

함수값과 기울기

1
2
x = 5일 때 함수값: 25
x = 5일 때 기울기: 10

원래 함수와 미분한 함수를 구분해야 한다.


14. AI에서 미분이 필요한 이유

딥러닝 모델에는 학습을 통해 조정되는 가중치가 있다.

가중치를 바꾸면 모델의 예측 결과가 달라지고, Loss도 달라진다.

1
2
3
4
5
가중치 변화
    ↓
예측 결과 변화
    ↓
Loss 변화

AI 학습에서 중요한 것은 다음 질문이다.

가중치를 조금 바꾸었을 때 Loss가 얼마나 변하는가?

이것은 결국 기울기를 구하는 문제다.

1
2
3
x = 가중치
y = Loss
기울기 = 가중치 변화에 따른 Loss의 변화 정도

기울기를 알면 Loss를 줄이기 위해 가중치를 어느 방향으로 움직여야 하는지 판단할 수 있다.

PyTorch의 다음 코드는 이러한 미분값을 자동으로 계산한다.

1
loss.backward()

아직 backward()를 직접 사용하지는 않았지만, 이 함수가 계산하는 gradient가 결국 각 가중치에 대한 Loss의 기울기라는 것을 이해할 수 있었다.


오늘 배운 내용 정리

오늘의 핵심 내용은 다음과 같다.

  • Δ는 변화량을 의미한다.
  • 기울기는 Δy / Δx로 계산한다.
  • 직선은 변화 비율이 일정하므로 기울기가 항상 같다.
  • 곡선은 위치에 따라 기울기가 달라진다.
  • 한 점의 기울기를 구하려면 옆의 점이 필요하다.
  • h를 작게 만들수록 두 점이 가까워진다.
  • 두 점이 가까워질수록 평균 기울기가 순간 기울기에 가까워진다.
  • h는 정확히 0으로 만들 수 없으므로 극한을 사용한다.
  • x²을 미분하면 2x가 된다.
  • 함수값과 기울기는 서로 다른 값이다.
  • AI에서는 미분을 이용해 Loss가 감소하는 방향을 찾는다.

마무리

처음에는 미분을 복잡한 공식이라고만 생각했다.

하지만 오늘 공부를 통해 미분은 갑자기 등장한 계산법이 아니라, 두 점 사이의 기울기를 점점 더 정확하게 구하는 과정에서 시작된다는 것을 알게 되었다.

한 문장으로 정리하면 다음과 같다.

미분은 두 점 사이의 평균 기울기를 계산한 뒤, 두 점을 한없이 가깝게 만들어 한 지점의 순간 기울기를 구하는 과정이다.

다음 학습에서는 x³, 일차함수, 상수와 같은 여러 함수를 직접 미분해 보면서 미분 공식이 어떻게 만들어지는지 더 자세히 알아볼 예정이다.

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