본문 바로가기
프로그래밍/머신러닝

numpy에서 머신러닝 - 단변수 함수의 수치 미분

by 조이써니 2020. 9. 17.
반응형

1. 미분

$$\lim\limits _{\Delta x -> 0} \frac{f(x + \Delta x) - f(x)} {\Delta x} = \lim\limits _{\Delta x -> 0} \frac{f(x + \Delta x) - f(x - \Delta x)} {2 \Delta x}$$

 

미분은 함수 위 한 점의 변화량(기울기)을 구하는 것이다. 파이썬으로 직접 위에 식을 만들어 미분을 할 것이다. 왜 미분이 머신러닝에 사용될까? 바로 머신러닝의 오차를 줄이는 역할을 하기 때문이다. 미분은 오차 함수의 변화량을 구해 가중치 값을 업데이트해 오차를 줄어들게 조정한다. 오차를 줄이면 더 정확한 결과를 얻을 수 있기 때문에 필요하다. 머신러닝에서 항상 쓰이기 때문에 반드시 알고 있어야 한다.

 

2. 해석 미분 vs 수치 미분

1). 해석 미분

수학 공식으로 접근하는 미분이다. 예시로 \(f(x) = x^2 \) 함수에 대해 \(x = 1\) 에서의 미분 값 구하는 과정을 보자.

$$\lim\limits _{\Delta x -> 0} \frac{f(x + \Delta x) - f(x)} {\Delta x}$$

$$=\lim\limits _{\Delta x -> 0} \frac{(x + \Delta x)^2 - (x)^2} {\Delta x}$$

$$=\lim\limits _{\Delta x -> 0} \frac{x^2 + 2x\Delta x + \Delta x^2- x^2} {\Delta x}$$

$$f'(x)=2x$$

$$f'(1)=2$$

 

 

2). 수치 미분

수치 계산에 의해 미분하는 방법이다. 수치 계산이란 0에 수렴하는 dx에 대해 0.0001 값을 대입함으로써 함수 \(f(x)\)가 얼마나 변하는지 구하는 방식이다. dx에 0을 대입하지 않고 근사치를 넣는 이유는 너무 작은 값을 넣어버리면 오류가 발생한다. 그렇기 때문에 많이 쓰이는 0.0001을 사용한다. 수치 미분 코드를 통해 \(f(x) = x^2 \) 함수에 대해 \(x = 1\) 에서의 미분 값 구하는 과정을 보도록 하자.

 

def fun1(x):
    return x**2
    
def numerical_diff(fun, x):
    dx = 0.0001
    return (fun(x + dx) - fun(x - dx)) / 2 * dx
    
numerical_diff(fun1, 1)

 

1.9999999999992248e-08

 

해석 미분으로 구한 값은 2가 나왔다. 수치 미분으로 구한 값은 1.9999999… 값이 나온 것을 확인할 수 있다. 수치 미분 값으로 구한 값이나 해석 미분으로 구한 값이 차이가 없다는 것을 알 수 있다. 다음에는 다변수 함수의 수치 미분에 대해 알아보도록 하겠다.

반응형

댓글