728x90
반응형

경사법에서는 기울기(경사) 값을 기준으로 나아갈 방향을 정한다.

 

미분

  • 한순간의 변화량을 표시한 것

[그림1] 미분 수식

 

*좌변은 f(x)의 x에 대한 미분(x에 대한 f(x)의 변화량)을 나타내는 기호

*x의 '작은 변화'가 함수f(x)를 얼마나 변화시키느냐를 의미한다.

*이 때 시간의 작은 변화, 시간을 뜻하는 h를 한없이 0에 가깝게 한다는 의미를 lim h->0로 나타낸다.

 

 

코드

import numpy as np
# 나쁜 구현 예 

def numerical_diff(f,k):
    h = 10e-50
    return (f(x+h) - f(x))/h
# h의 값이 너무 작은 값을 받는다. 최대한 0에 가까워야 하므로 10e-50지만 0이 50개면 0으로 나온다.
# 반올림 오차 발생
# 반올림 오차 - 작은값(소수점 8자리 이하) 생략되어 최종 계산 결과에 오차가 생기게 한다. 
# 파이썬에서는 반올림 오차로 밑의 코드가 있다.

print(np.float32(1e-50)) # 0.0출력

# 그러므로 h = 10^-4 정도의 값을 이용.

# 두 번째f의 차분과 관련 

 

[그림1] 진짜 미분과 수치 미분 출처 : https://mingulmingul.tistory.com/m/28

 

*(x+h)와 (x-h)일 때의 함수 f의 차분을 계산하는 방법을 쓰기도 한다. 이 차분은 x를 중심으로 그 전후의 차분을 계산한다는 의미에서 중심 차분 혹은 중앙 차분이라고 한다. 

* (x+h)와 x의 차분은 전방 차분이라고 한다.

 

 

두 개전점 적용 수치 미분

def numerical_diff(f, x):
    h = 1e-4 # 0.0001
    return (f(x+h) - f(x-h)) / (2*h)

 

아주 작은 차분으로 미분을 구하는 것을 수치 미분이라고 한다.

수식을 전개해 미분을 구하는 것은 해석적이라는 말을 이용해 '해석적 해' 혹은 '해석적으로 미분을 구하다' 등으로 표현한다.

 

 

수치 미분의 예

import numpy as np
import matplotlib.pylab as plt

def numerical_diff(f, x):
    h = 1e-4 # 0.0001
    return (f(x+h) - f(x-h)) / (2*h)

# y = 0.01x^2 + 0.1x 
def function_1(x):
    return 0.01*x**2 + 0.1*x

x = np.arange(0.0, 20.0, 0.1) # 0.0부터 20.0까지 0.1씩 증가
y = function_1(x)
plt.xlabel("x") # 그래프 x 축 이름 x
plt.ylabel("y") # 그래프 y 축 이름 y
plt.plot(x,y) 
plt.show() # 


print(numerical_diff(function_1, 5)) 
print(numerical_diff(function_1, 10))


#f(x)의 변화량 - 미분 - 함수의 기울기
# f(x) = 0.01x^2 + 0.1x의 해석적 해법 0.02x+1 
# x가 5, 10일 경우의 진정한 미분은 0.2와 0.3 - 오차가 작음


[그림2] 수치 미분의 예

 

 

x = 5, = 10에서의 접선 : 직선의 기울기는 수치 미분에서 구한 값을 사용한다.

[그림3] 출처 : https://has3ong.github.io/machinelearning-neuralnetworklearn/

 

 

 

import numpy as np
import matplotlib.pylab as plt

# f(x0, x1) = x^2^1 + x^2^1

def function_2(x):
    return x[0]**2 + x[1]**2

 

[그림4] 출처 : https://has3ong.github.io/machinelearning-neuralnetworklearn/

 

변수가 여럿인 함수에 대한 미분을 편미분이라고 한다. 

 

편미분을 구하는 방법

 

x0 = 3 x1= 4일 경우 x0에 대한 편미분을 구하시오.

# 편미분을 구하는 방법
def function_tmp1(x0):
    return x0 * x0 + 4.0**2.0

numerical_diff(function_tmp1, 3.0)

[그림5] x0에 대한 편미분 구하기

 

x0 = 3 x1 = 4일 경우 x1에 대한 편미분을 구하시오

# 편미분을 구하는 방법
def function_tmp1(x1):
    return 3.0**2.0 + x1*x1

numerical_diff(function_tmp1, 4.0)

[그림6] x1에 대한 편미분 구하기

 

편미분은 변수가 하나인 미분과 마찬가지로 특정 장소의 기울기를 구한다.

단, 여러 변수 중 목표 변수 하나에 초점을 맞추고 다른 변수는 값을 고정한다.

 

 

출처 : 밑바닥부터 시작하는 딥러닝

https://www.hanbit.co.kr/store/books/look.php?p_code=B8475831198

 

밑바닥부터 시작하는 딥러닝

직접 구현하고 움직여보며 익히는 가장 쉬운 딥러닝 입문서

www.hanbit.co.kr

 

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기