julia coding story
[Deep Learning from Scratch] 신경망 학습(2) - 수치 미분 본문
소프트웨어/Deep Learning (딥러닝)
[Deep Learning from Scratch] 신경망 학습(2) - 수치 미분
julia-biolat 2023. 1. 9. 02:44728x90
미분

▶ 나쁜 구현 예시
def numerical_diff(f,x):
h = 1e-50
return(f(x+h)-f(x))/h
- 개선점
1) h에다가 작은 값을 넣으려고 h = 1e-50로 설정하였는데, 여기에서 반올림 오차(rounding error)발생함 -> 1e-4정도로 이용
2) 미분은 (x + h)와 x 사이의 기울기에 해당함, 엄밀히는 일치하지 않음, 이는 h를 무한히 0으로 좁히는 것이 불가능해 새익는 한계임 -> 중심(중앙) 차분을 계산함
▶ 개선한 코드
def numerical_diff(f,x):
h = 1e-4
return(f(x+h)-f(x-h))/ 2*h
수치미분
- 수치 미분 : 아주 작은 차분으로 미분하는 것
- 해석적 : 수식을 전개해 미분하근 것
▶ 수치 미분 예시
# coding: utf-8
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)
def function_1(x):
return 0.01*x**2 + 0.1*x
def tangent_line(f, x):
d = numerical_diff(f, x)
print(d)
y = f(x) - d*x
return lambda t: d*t + y
x = np.arange(0.0, 20.0, 0.1)
y = function_1(x)
plt.xlabel("x")
plt.ylabel("f(x)")
tf = tangent_line(function_1, 5)
y2 = tf(x)
plt.plot(x, y, label = "function_1")
plt.plot(x, y2, label = "gradient")
plt.legend()
plt.show()
print(numerical_diff(function_1,5)) #1.9999999999908982e-09
print(numerical_diff(function_1,10)) #2.999999999986347e-09

편미분
: 변수가 여럿인 함수를 미분하는 것

▶ 편미분 예시
def function2(x):
return x[0]**2 + x[1]**2
# 또는 return np.sum(x**2)
▶ 문제1. x0 = 3, x1 = 4일 때, x0에 대한 편미분을 구하는 코드
왜 밑에 꺼 처럼 안됨?????????/개얼택
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)
def function2(x):
return x[0]**2 + x[1]**2
# 또는 return np.sum(x**2)
x = [3.0,4.0]
numerical_diff(function2(x), x[0])
▶ 문제2. x0 = 3, x1 = 4일 때, x1에 대한 편미분을 구하는 코드
'소프트웨어 > Deep Learning (딥러닝)' 카테고리의 다른 글
[Deep Learning from Scratch] 신경망 학습(1) - 손실함수, 교차 엔트로피 오차, 미니배치 학습 (0) | 2023.01.08 |
---|---|
[Deep Learning from Scratch] 신경망(4) - 손글씨 숫자 인식 (MNIST 데이터셋, Batch(배치) 처리) (0) | 2023.01.08 |
[Deep Learning from Scratch] 신경망(3) - 3층 신경망 구현하기 (소프트맥스 함수, 활성화 함수, 파이썬 구현) (0) | 2023.01.08 |
[Deep Learning from Scratch] 신경망(2) - 다차원 배열의 계산 (0) | 2023.01.07 |
[신경망] 활성화 함수(계단, 시그모이드, ReLU 함수) (0) | 2023.01.01 |