1 분 소요

1.4 Basic Derivation

미분

우리가 수학시간에 많이 들어봤던 단어로 말 그대로 작게 나누는 것이다. X라는 값이 들어갔을 때 해당 값을 나누는 것이다.

미분을 파이썬으로 구현하는 방법은 대표적으로 2가지가 있다.

  • 직접 구현하는 경우
    def numerical_diff(f, x):
      delta = 0.001 # 매우 작은 값
    
      return (f(x+delta) - f(x)) / delta
    
  • Scipy 라이브러리를 이용한 경우 ```python from scipy.misc import derivative

## 편미분

다변수 함수의 특정 변수를 제외한 나머지 변수를 상수로 간주하고 미분하는 방법이다.
머신러닝에서는 파라미터가 2개 이상인 Error 함수에서 우선 1개의 파라미터에 대해 미분하는 방법으로 사용된다.

sympy 라이브러리를 통해 구현이 가능하다.

```python
import sympy as sym
from sympy.abc import x, y, e

sym.diff(함수, 원하는 미분만큼의 변수)

Chain Rule

함수의 함수를 미분하는 방법으로 합성함수라고 부르기도 한다. 마치 양파를 깔 때 바깥면에서부터 껍질을 까야하는 것처럼 Chain Rule 역시 미분을 할 때 바깥 함수부터 미분하여 안의 함수를 미분한다.

머신러닝에서의 실사용

경사 하강법

  • Gradient Descent, 경사하강법은 오차 함수인 e을 최소화하는 a, b값을 찾을 수 있는 최적화 알고리즘중 하나이다.

사진 출처 : Kdbuggets

  • 파이썬으로 구현 ```python def gradient_descent(X, y, lr = 0.05, epoch = 10):

    a, b = 0.21, 0.49 # 임의의 파라미터를 넣는다. N = len(X)

    for _ in range(epoch):
    f = y - (a*X + b)

      # a와 b를 업데이트
      a -= lr * (-2 * X.dot(f).sum() / N)
      b -= lr * (-2 * f.sum() / N)        
    

```

위의 epoch는 돌아가는 횟수를 말하는데 해당 수를 변경하여 경사하강을 몇 번 진행할 것인지 정하면 된다.