신경망 학습2

Amps93·2024년 3월 13일
0

밑바닥 딥러닝

목록 보기
5/11

수치 미분

미분 - 특정 순간의 변화량

좌변은 f(x)의 x에 대한 미분을 나타내는 기호 → x의 ‘작은 변화’가 함수 f(x)를 얼마나 변화시키느냐를 의미

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

def numerical_diff(f, x):
  h = 10e-50
  return (f(x+h)-f(x))/h

위 함수는 문제가 없어 보이나 개선점 2개가 존재

  1. h의 값 : 위 값은 반올림 오차 문제를 일으킴 → 너무 작은 수라 컴퓨터가 0으로 인식
    • 위 문제를 개선하기 위해 h를 10^-4로 설정
  2. 함수 f의 차분(두 점에서 함수 값들의 차이) 문제 → 위 구현에서는 x+h와 x 사이의 함수 f의 차분을 계산하고 있음. 하지만 아래와 같이 진짜 접선은 x에서의 함수 기울기(접선)이지만, 위 구현은 x+h와 x 사이의 기울기임

이 오차를 극복하기 위해 x+h와 x-h사이의 함수 f의 차분을 계산
x를 중심으로 전후를 계산하므로 중심 차분 혹은 중앙 차분으로 불림

위 두가지 문제점을 개선한 함수

def numerical_diff(f,x):
    h = 1e-4
    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)
y = function_1(x)
plt.xlabel('x')
plt.ylabel('f(x)')
plt.plot(x, y)
plt.show()

x=5일 때와 10일 때 위 함수의 미분 계산

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

위처럼 계산한 미분 값이 x에 대한 f(x)의 변화량, 즉 함수의 기울기에 해당

편미분

f(x0, x1) = x0^2 + x1^2
앞의 예와 달리 변수가 2개인 함수의 미분

def function_2(x):
    return x[0]**2 + x[1]**2
  • ex1 : x0=3, x1=4일 때, x0에 대한 편미분
def function_tmp1(x0):
    return x0*x0 + 4.0**2.0
   
numerical_diff(function_tmp1, 3.0)
  • ex2 : x0=3, x1=4일 때, x1에 대한 편미분
def function_tmp2(x1):
    return 3.0**2.0 + x1*x1
    
numerical_diff(function_tmp2, 4.0)
profile
머신러닝 개발자

0개의 댓글