[밑바닥부터 시작하는 딥러닝] #4 수치미분과 gradient

Clay Ryu's sound lab·2022년 3월 3일
0

Note for 2022

목록 보기
14/47

수치미분

딥러닝은 실용학문이기 때문에 1e-4정도의 작은 값을 사용한다.

2h를 사용하는 이유


일변수 미분과 다변수 미분

다변수 함수의 경우에는 미분에 방향을 고려해야한다.
순간적인 변화율, 온도는 v방향에 대해서 h만큼의 시간만큼 움직인 값이다.


1,0일때 순간변화율은 4, 0,1일때 순간변화율은 2, 1,1일때 순간변화율은 6이다.

방향미분

편미분


각 축방향으로 미분

Gradient

여러 방향으로의 순간 변화율은 gradient와 출발점을 내적해주면 된다.

접평면의 방정식은 gradient가 미분계수자리에 온다. g(t) = f'(x)(t-x) + f(x)

방향미분계수의 최대, 최소


등위선, 등위면

가장 빨리 증가하는 방향은 gradient방향이다.
gradient방향은 등위선과 항상 수직이다.


코드 구현

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

def _numerical_gradient_no_batch(f,x):
    h = 1e-4
    grad  = np.zeros_like(x)
    
    for idx in range(x.size):
        tmp_val = x[idx]
        
        x[idx] = float(tmp_val) + h
        fxh1 = f(x)
        
        x[idx] = tmp_val - h
        fxh2 = f(x)
        
        grad[idx] = (fxh1 - fxh2) / (2*h)
        x[idx] = tmp_val
        
    return grad

def numerical_gradient(f,X):
    if X.ndim == 1:
        return _numerical_gradient_no_batch(f,x)
    else:
        grad = np.zeros_like(X)
        
        for idx, x in enumerate(X):
            grad[idx] = _numerical_gradient_no_batch(f,x)
            
        return grad
profile
chords & code // harmony with structure

0개의 댓글