출처 : 핸즈온 머신러닝

1. Finite difference approximation(유한차분근사)


Screenshot_20241125_133645_Samsung Notes.jpg

위와같은 도함수의 정의에서 매우작은 입실론 값을 통해 편도함수를 구하는 수치적 계산법이다.

파라미터 개수가 늘어남에 따라 호출 횟수가 증가하기 때문에 시간복잡도가 크다.

def f(x, y):
	return X**2*y + y + 2

def derivative(f, x, y, x_eps, y_eps):
	return ((f(x + x_eps, y + y_eps) - f(x,y))/(x_eps+y_eps))

df_dx - derivative(f, 3, 4, 0.00001, 0)
df_dy = derivative(f, 3, 4, 0, 0.00001)
#이변수 함수의 경우 편도함수를 구하기 위해 구번 호출해야함을 알 수 있다.
#다라서 신경망과 같이 파라미터가 많은 함수에 대해서는 호출 횟수가 기하급수적으로 증가한다.

2. Automatic Differentiation


어떤 함수든지 간에 가장 작은 단위들의 함수들의 함성으로 나타낼 수 있다.

따라서 여러가지 연산으로 이루어져 있는 함수를 합성 함수 형태로 바꾸고 이에 따른 미분을 chain rule 을 통해 연쇄적으로 계산하는 것이 자동 미분의 핵심 아이디어이다.

image.png

image.png

가장 바깥 껍질에 해당하는 y와

가장 안의 껍질에 해당하는 x간의 미분을 구한다면,

위와 같이 chain rule을 적용시켜 최종 미분값을 구할 수 있다.