미분 규칙과 함수의 모양 읽기

거듭제곱, 상수배, 합, 곱, 몫의 미분 규칙과 지수 함수, 로그 함수, 삼각 함수의 도함수를 익히고, 연쇄 법칙을 처음 맛봐요. 도함수로 증가와 감소, 극댓값과 극솟값, 볼록함을 읽고, 시그모이드 함수의 미분까지 직접 구해요.

초급강의 2 / 6약 7분

지난 강의에서 도함수를 극한으로 구했어요. 매번 그렇게 하면 너무 번거롭죠. 다행히 자주 쓰는 함수들의 도함수는 이미 규칙으로 정리돼 있어요. 이번 강의에서는 그 규칙들을 익히고, 도함수로 함수의 모양을 읽어 가장 크고 작은 값을 찾는 법을 배워요. 머신러닝에서 손실이 가장 작은 지점을 찾는 일의 기초예요.

기본 규칙

거듭제곱 규칙

ddxxn=nxn−1\frac{d}{dx} x^n = n x^{n-1}

지수를 앞으로 내리고 하나 줄여요. nn이 정수가 아니어도 성립해요.

함수도함수
x3x^33x23x^2
xx11
55 (상수)00
x=x1/2\sqrt{x} = x^{1/2}12x−1/2=12x\frac{1}{2}x^{-1/2} = \frac{1}{2\sqrt{x}}
1x=x−1\frac{1}{x} = x^{-1}−x−2=−1x2-x^{-2} = -\frac{1}{x^2}

상수의 도함수가 0인 건 당연해요. 변하지 않으니 변화율이 0이죠.

상수배와 합

ddx[cf(x)]=cf′(x),ddx[f(x)+g(x)]=f′(x)+g′(x)\frac{d}{dx}\big[c f(x)\big] = c f'(x), \qquad \frac{d}{dx}\big[f(x) + g(x)\big] = f'(x) + g'(x)

그래서 다항식은 항마다 따로 미분하면 돼요.

ddx(4x3−2x2+7x−5)=12x2−4x+7\frac{d}{dx}(4x^3 - 2x^2 + 7x - 5) = 12x^2 - 4x + 7

미분이 덧셈과 상수배를 그대로 통과시킨다는 건, 미분 자체가 선형 연산이라는 뜻이에요. 선형대수에서 배운 "선형"이 여기서도 나와요.

곱의 규칙

두 함수의 곱은 각자의 미분을 그냥 곱하는 게 아니에요.

ddx[f(x)g(x)]=f′(x)g(x)+f(x)g′(x)\frac{d}{dx}\big[f(x)g(x)\big] = f'(x)g(x) + f(x)g'(x)

직사각형의 가로 ff와 세로 gg가 동시에 조금씩 늘어날 때 넓이가 얼마나 늘어나는지 생각하면 이해돼요. 가로가 늘어난 만큼의 띠(f′gf' g)와 세로가 늘어난 만큼의 띠(fg′f g')가 더해져요.

몫의 규칙

ddx[f(x)g(x)]=f′(x)g(x)−f(x)g′(x)g(x)2\frac{d}{dx}\left[\frac{f(x)}{g(x)}\right] = \frac{f'(x)g(x) - f(x)g'(x)}{g(x)^2}

외우기보다는 fg=f⋅g−1\frac{f}{g} = f \cdot g^{-1}로 보고 곱의 규칙과 아래의 연쇄 법칙을 쓰면 같은 결과가 나와요.

꼭 알아야 할 함수들의 도함수

함수도함수비고
exe^xexe^x미분해도 자기 자신. 그래서 ee가 특별해요
axa^xaxln⁡aa^x \ln a
ln⁡x\ln x1x\frac{1}{x}
sin⁡x\sin xcos⁡x\cos x
cos⁡x\cos x−sin⁡x-\sin x

exe^x는 미분해도 변하지 않는 유일한(상수배 제외) 함수예요. "지금 값에 비례해서 자라는" 성장을 정확히 표현해서, 인구 증가, 연속 복리, 방사성 붕괴, 그리고 머신러닝의 확률 계산에 모두 나와요.

연쇄 법칙 맛보기

함수 안에 함수가 들어 있으면 어떻게 미분할까요? h(x)=(3x+1)2h(x) = (3x + 1)^2을 예로 들어요. 바깥 함수는 "제곱", 안쪽 함수는 u=3x+1u = 3x + 1이에요.

dhdx=dhdu⋅dudx=2u⋅3=6(3x+1)\frac{dh}{dx} = \frac{dh}{du} \cdot \frac{du}{dx} = 2u \cdot 3 = 6(3x + 1)

바깥을 미분하고, 안쪽의 미분을 곱해요. 톱니바퀴로 생각하면 쉬워요. 안쪽 톱니가 xx보다 3배 빠르게 돌고, 바깥 톱니가 안쪽보다 2u2u배 빠르게 돌면, 바깥은 xx보다 2u×32u \times 3배 빠르게 돌아요.

ddxe2x=2e2x,ddxln⁡(x2+1)=2xx2+1\frac{d}{dx} e^{2x} = 2e^{2x}, \qquad \frac{d}{dx} \ln(x^2 + 1) = \frac{2x}{x^2 + 1}

연쇄 법칙은 딥러닝 학습(역전파)의 심장이라서, 다음 다음 강의에서 통째로 다뤄요. 지금은 "겉미분 곱하기 속미분"만 기억하세요.

시그모이드 함수의 미분

머신러닝에서 확률을 출력할 때 쓰는 시그모이드 함수예요.

σ(x)=11+e−x\sigma(x) = \frac{1}{1 + e^{-x}}

어떤 실수를 넣어도 0과 1 사이의 값이 나와서 확률처럼 쓸 수 있어요. 연쇄 법칙으로 미분하면

σ′(x)=e−x(1+e−x)2=σ(x)(1−σ(x))\sigma'(x) = \frac{e^{-x}}{(1 + e^{-x})^2} = \sigma(x)\big(1 - \sigma(x)\big)

도함수를 함수 자기 자신의 값으로 쓸 수 있다는 게 아주 편리해요. 앞에서 계산해 둔 σ(x)\sigma(x)를 재사용하면 미분이 거의 공짜예요. 또 하나, 이 값은 x=0x = 0에서 최대 0.250.25이고 xx가 크거나 작으면 0에 가까워져요. 이 사실이 딥러닝에서 "기울기 소실" 문제로 이어지는데, 역전파 강의에서 확인할게요.

import numpy as np

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

x = np.array([-6.0, -2.0, 0.0, 2.0, 6.0])
s = sigmoid(x)
print(np.round(s, 4))            # [0.0025 0.1192 0.5    0.8808 0.9975]
print(np.round(s * (1 - s), 4))  # [0.0025 0.105  0.25   0.105  0.0025]

도함수로 함수의 모양 읽기

증가와 감소

도함수의 부호가 바뀌는 곳을 찾으면 함수의 모양이 보여요. f(x)=x3−6x2+9x+1f(x) = x^3 - 6x^2 + 9x + 1을 분석해 볼게요.

f′(x)=3x2−12x+9=3(x−1)(x−3)f'(x) = 3x^2 - 12x + 9 = 3(x - 1)(x - 3)
구간x<1x < 1x=1x = 11<x<31 < x < 3x=3x = 3x>3x > 3
f′(x)f'(x)+0-0+
f(x)f(x)증가극대 (5)감소극소 (1)증가

x=1x = 1에서 올라가다 내려가니 극댓값 f(1)=5f(1) = 5, x=3x = 3에서 내려가다 올라가니 극솟값 f(3)=1f(3) = 1이에요.

임계점

f′(x)=0f'(x) = 0인 점을 임계점이라고 해요. 극대, 극소, 그리고 잠시 평평해졌다가 같은 방향으로 계속 가는 점(예: x3x^3의 x=0x = 0)이 모두 임계점이에요. 그래서 f′=0f' = 0은 극값이 되기 위한 필요조건일 뿐이에요.

이계도함수: 굽은 방향

도함수를 한 번 더 미분한 것이 이계도함수 f′′(x)f''(x)예요. 기울기가 어떻게 변하는지, 즉 곡선이 어느 쪽으로 굽었는지 알려 줘요.

  • f′′(x)>0f''(x) > 0: 아래로 볼록(웃는 모양 ∪). 기울기가 점점 커져요.
  • f′′(x)<0f''(x) < 0: 위로 볼록(찡그린 모양 ∩).

임계점에서 f′′>0f'' > 0이면 극소, f′′<0f'' < 0이면 극대예요. 위 예에서 f′′(x)=6x−12f''(x) = 6x - 12이니 f′′(1)=−6f''(1) = -6(극대), f′′(3)=6f''(3) = 6(극소)로 표와 맞아요.

볼록 함수가 좋은 이유

모든 곳에서 f′′≥0f'' \ge 0인 함수를 볼록 함수라고 해요. 볼록 함수는 극솟값이 곧 전체에서 가장 작은 값이에요. 골짜기가 하나뿐인 그릇 모양이라, 경사만 따라 내려가면 반드시 바닥에 닿아요.

선형 회귀의 손실 함수는 볼록이라 학습이 안정적이에요. 반면 딥러닝의 손실 함수는 볼록이 아니라서, 골짜기가 여러 개 있고 평평한 고원도 있어요. 그래도 실제로는 꽤 좋은 골짜기를 잘 찾는데, 그 이유는 최적화 강의에서 다뤄요.

실전: 최대 최소 문제

한 변이 30cm인 정사각형 종이의 네 귀퉁이에서 한 변이 xx인 정사각형을 잘라 내고 접어 뚜껑 없는 상자를 만들어요. 부피가 가장 크려면?

V(x)=x(30−2x)2,0<x<15V(x) = x(30 - 2x)^2, \qquad 0 < x < 15
V′(x)=(30−2x)2−4x(30−2x)=(30−2x)(30−6x)V'(x) = (30 - 2x)^2 - 4x(30 - 2x) = (30 - 2x)(30 - 6x)

V′(x)=0V'(x) = 0이면 x=15x = 15(상자가 사라짐) 또는 x=5x = 5예요. x=5x = 5일 때 부피 5×202=20005 \times 20^2 = 2000cm³가 최대예요.

x = np.linspace(0.1, 14.9, 1000)
V = x * (30 - 2 * x) ** 2
print(x[V.argmax()].round(2), V.max().round(1))   # 약 5.0, 2000.0

손으로 미분해 답을 구하고, 코드로 촘촘히 계산해 확인하는 습관을 들이세요. 둘이 맞으면 확신할 수 있어요.

컴퓨터에게 미분 시키기

수식 그대로 미분해 주는 라이브러리도 있어요.

import sympy as sp   # pip install sympy

x = sp.symbols("x")
print(sp.diff(x**3 - 6*x**2 + 9*x + 1, x))   # 3*x**2 - 12*x + 9
print(sp.diff(1 / (1 + sp.exp(-x)), x))      # exp(-x)/(1 + exp(-x))**2
print(sp.solve(sp.diff(x * (30 - 2*x)**2, x), x))   # [5, 15]

손 계산을 확인하는 데 아주 좋아요. 딥러닝 라이브러리는 이것과 또 다른 방식(자동 미분)으로 미분하는데, 역전파 강의에서 비교해 볼게요.

연습 문제

  1. ddx(2x5−3x2+x)\frac{d}{dx}(2x^5 - 3x^2 + x)
  2. ddx(x2ex)\frac{d}{dx}(x^2 e^x) (곱의 규칙)
  3. ddx(5x−2)3\frac{d}{dx}(5x - 2)^3 (연쇄 법칙)
  4. f(x)=x2−8x+3f(x) = x^2 - 8x + 3의 최솟값과 그때의 xx
  5. 시그모이드 함수의 도함수가 가장 큰 곳과 그 값은?

정답

  1. 10x4−6x+110x^4 - 6x + 1
  2. 2xex+x2ex=ex(x2+2x)2x e^x + x^2 e^x = e^x(x^2 + 2x)
  3. 3(5x−2)2×5=15(5x−2)23(5x - 2)^2 \times 5 = 15(5x - 2)^2
  4. f′(x)=2x−8=0f'(x) = 2x - 8 = 0에서 x=4x = 4, 최솟값 f(4)=−13f(4) = -13. f′′=2>0f'' = 2 > 0이라 최소가 맞아요.
  5. x=0x = 0에서 0.250.25예요.

다음 강의

지금까지는 변수가 하나인 함수만 다뤘어요. 하지만 머신러닝 모델은 파라미터가 수백만 개예요. 다음 강의에서는 변수가 여러 개인 함수의 미분, 즉 편미분과 그래디언트를 배워요. 산의 경사를 동서 방향과 남북 방향으로 따로 재고, 합쳐서 가장 가파른 방향을 찾는 이야기예요.