Skip to main content

미적분 핵심

미적분(Calculus)은 변화율을 다루는 수학으로, 경사 하강법과 역전파 알고리즘의 수학적 기반입니다.

학습 목표

  • 미분(Derivative)의 직관적 의미를 이해합니다.
  • 편미분(Partial Derivative)을 사용하여 다변수 함수의 변화를 분석할 수 있습니다.
  • 체인 룰(Chain Rule)의 원리를 이해합니다.
  • 그래디언트(Gradient)가 경사 하강법에서 어떻게 사용되는지 파악합니다.

왜 중요한가

경사 하강법에서 “기울기를 따라 내려간다”는 것이 수학적으로 어떤 의미인지 이해해야 학습률 설정, 수렴 문제 진단, 그래디언트 소실 등의 현상을 올바르게 해석할 수 있습니다.

핵심 개념

미분 (Derivative)

함수의 순간 변화율을 나타냅니다. 기하학적으로는 곡선의 접선 기울기입니다.
import numpy as np

# 수치 미분: f(x) = x^2의 도함수
def numerical_derivative(f, x, h=1e-7):
    """수치 미분으로 기울기를 근사합니다."""
    return (f(x + h) - f(x - h)) / (2 * h)

f = lambda x: x ** 2  # f(x) = x^2
# 해석적 도함수: f'(x) = 2x

x = 3.0
approx = numerical_derivative(f, x)
exact = 2 * x
print(f"수치 미분: {approx:.6f}")   # 6.000000
print(f"해석적 미분: {exact:.6f}")   # 6.000000

편미분 (Partial Derivative)

여러 변수를 가진 함수에서 하나의 변수에 대한 변화율을 구합니다.
# f(x, y) = x^2 + 3xy + y^2
# 편미분: df/dx = 2x + 3y,  df/dy = 3x + 2y

def partial_x(x, y):
    """x에 대한 편미분"""
    return 2 * x + 3 * y

def partial_y(x, y):
    """y에 대한 편미분"""
    return 3 * x + 2 * y

x, y = 1.0, 2.0
print(f"df/dx at (1,2): {partial_x(x, y)}")  # 8.0
print(f"df/dy at (1,2): {partial_y(x, y)}")  # 7.0
ML 활용: 선형 회귀의 손실 함수 L = (1/n)sum((y - (wx + b))^2)에서 가중치(w)와 편향(b)에 대한 편미분으로 그래디언트를 구합니다.

그래디언트 (Gradient)

모든 편미분을 벡터로 묶은 것이 그래디언트입니다. 함수가 가장 빠르게 증가하는 방향을 가리킵니다.
# 2변수 함수의 그래디언트
def gradient(x, y):
    """f(x,y) = x^2 + y^2의 그래디언트"""
    return np.array([2*x, 2*y])  # [df/dx, df/dy]

# 경사 하강법: 그래디언트의 반대 방향으로 이동
point = np.array([4.0, 3.0])
lr = 0.1

for step in range(20):
    grad = gradient(point[0], point[1])
    point = point - lr * grad  # 그래디언트 반대 방향

print(f"최종 위치: ({point[0]:.4f}, {point[1]:.4f})")  # (0, 0)에 수렴

체인 룰 (Chain Rule)

합성 함수의 미분을 구하는 규칙입니다. 역전파(Backpropagation)의 수학적 기반입니다.
f(g(x))의 미분 = f'(g(x)) * g'(x)
# 체인 룰 예시: f(x) = (3x + 2)^2
# g(x) = 3x + 2, f(u) = u^2
# df/dx = f'(g(x)) * g'(x) = 2(3x+2) * 3 = 6(3x+2)

x = 1.0
# 해석적 계산
exact = 6 * (3 * x + 2)  # 30.0

# 수치 미분으로 검증
f = lambda x: (3 * x + 2) ** 2
approx = numerical_derivative(f, x)

print(f"체인 룰 결과: {exact:.4f}")   # 30.0000
print(f"수치 미분 검증: {approx:.4f}")  # 30.0000

선형 회귀에서의 실전 적용

# 선형 회귀를 경사 하강법으로 직접 구현
np.random.seed(42)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1) * 0.5

# 파라미터 초기화
w = np.random.randn(1, 1)  # 가중치
b = np.zeros((1, 1))       # 편향
lr = 0.1
n = len(X)

for epoch in range(100):
    # 예측
    y_pred = X @ w + b

    # 손실 (MSE)
    loss = np.mean((y - y_pred) ** 2)

    # 그래디언트 계산 (편미분)
    dw = (-2/n) * X.T @ (y - y_pred)  # dL/dw
    db = (-2/n) * np.sum(y - y_pred)  # dL/db

    # 파라미터 갱신
    w = w - lr * dw
    b = b - lr * db

print(f"학습된 가중치: {w[0,0]:.4f} (실제: 3)")
print(f"학습된 편향: {b[0,0]:.4f} (실제: 4)")

AI/ML에서의 활용

개념ML 활용
미분손실 함수의 최솟값 탐색
편미분각 파라미터에 대한 그래디언트 계산
그래디언트경사 하강법의 방향 결정
체인 룰신경망의 역전파 (DL)
scikit-learn 사용에는 필수가 아닙니다. 그러나 학습이 수렴하지 않는 이유, 학습률 조정, 그래디언트 기반 알고리즘(SGD 등)의 동작을 이해하려면 기본적인 미적분 지식이 도움이 됩니다.
딥러닝의 역전파(Backpropagation) 알고리즘은 체인 룰의 직접적인 적용입니다. 딥러닝 프레임워크(PyTorch, TensorFlow)가 자동 미분을 처리하지만, 원리를 이해하면 디버깅과 아키텍처 설계에 큰 도움이 됩니다.

체크리스트

  • 미분의 기하학적 의미를 설명할 수 있다
  • 편미분을 계산할 수 있다
  • 그래디언트의 방향과 크기의 의미를 이해한다
  • 체인 룰을 적용하여 합성 함수를 미분할 수 있다

다음 문서