미적분은 머신러닝 학습 알고리즘의 핵심 수학 도구다. 경사하강법이 손실 함수의 그레이디언트를 기반으로 동작하며, 역전파(Backpropagation)는 연쇄 법칙의 직접 응용이다.
경사하강법의 수학
손실 함수: L(θ)
그레이디언트: ∇L(θ) = ∂L/∂θ
파라미터 갱신:
θ ← θ - α · ∇L(θ)
α: 학습률 (step size)
수렴 조건:
∇L(θ*) = 0 (극소점, 안장점, 전역 최솟값)
연쇄 법칙과 역전파
python
import numpy as np
# 단순 신경망 수동 역전파
def forward_backward(x, y, w1, w2):
"""1은닉층 신경망의 순전파/역전파"""
# 순전파
z1 = x @ w1 # (batch, hidden)
a1 = np.tanh(z1) # 활성화
z2 = a1 @ w2 # (batch, output)
loss = np.mean((z2 - y) ** 2) # MSE 손실
# 역전파 (연쇄 법칙)
dL_dz2 = 2 * (z2 - y) / len(y) # ∂L/∂z2
dL_dw2 = a1.T @ dL_dz2 # ∂L/∂w2
dL_da1 = dL_dz2 @ w2.T # ∂L/∂a1
dL_dz1 = dL_da1 * (1 - a1**2) # tanh 미분
dL_dw1 = x.T @ dL_dz1 # ∂L/∂w1
return loss, dL_dw1, dL_dw2
# 학습 루프
np.random.seed(42)
x = np.random.randn(100, 4)
y = np.random.randn(100, 1)
w1 = np.random.randn(4, 8) * 0.1
w2 = np.random.randn(8, 1) * 0.1
lr = 0.01
for epoch in range(100):
loss, dw1, dw2 = forward_backward(x, y, w1, w2)
w1 -= lr * dw1
w2 -= lr * dw2
if epoch % 10 == 0:
print(f"Epoch {epoch}: Loss = {loss:.4f}")
야코비안과 헤시안
야코비안 (Jacobian) J:
벡터 함수 f: R^n → R^m의 1차 편미분 행렬
J_ij = ∂f_i / ∂x_j
헤시안 (Hessian) H:
스칼라 함수 f: R^n → R의 2차 편미분 행렬
H_ij = ∂²f / (∂x_i ∂x_j)
양의 정부호(PD) → 극소점
음의 정부호(ND) → 극대점
부정부호(indefinite) → 안장점
python
import torch
x = torch.tensor([2.0], requires_grad=True)
y = x**3 + 2*x**2 - x # y = x^3 + 2x^2 - x
y.backward() # dy/dx 자동 계산
print(x.grad) # dy/dx = 3x^2 + 4x - 1 = 3(4) + 4(2) - 1 = 19
관련 문서