경사법에서는 기울기(경사) 값을 기준으로 나아갈 방향을 정한다.
미분
- 한순간의 변화량을 표시한 것
*좌변은 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의 차분과 관련
*(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 - 오차가 작음
x = 5, = 10에서의 접선 : 직선의 기울기는 수치 미분에서 구한 값을 사용한다.
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
변수가 여럿인 함수에 대한 미분을 편미분이라고 한다.
편미분을 구하는 방법
x0 = 3 x1= 4일 경우 x0에 대한 편미분을 구하시오.
# 편미분을 구하는 방법
def function_tmp1(x0):
return x0 * x0 + 4.0**2.0
numerical_diff(function_tmp1, 3.0)
x0 = 3 x1 = 4일 경우 x1에 대한 편미분을 구하시오
# 편미분을 구하는 방법
def function_tmp1(x1):
return 3.0**2.0 + x1*x1
numerical_diff(function_tmp1, 4.0)
편미분은 변수가 하나인 미분과 마찬가지로 특정 장소의 기울기를 구한다.
단, 여러 변수 중 목표 변수 하나에 초점을 맞추고 다른 변수는 값을 고정한다.
출처 : 밑바닥부터 시작하는 딥러닝
https://www.hanbit.co.kr/store/books/look.php?p_code=B8475831198
최근댓글