기계 학습 알고리즘의 디버깅 - 그라디언트 체크(Gradient Checking)

3393 단어 machinelearning
역방향 전파 알고리즘은 정확한 결과를 디버깅하기 어려울 뿐만 아니라, 특히 실현 프로그램에 발견하기 어려운 버그가 많이 존재할 때도 그렇다.예를 들어 색인의 부족 오류(off-by-one error)는 일부 층의 권중만 훈련(for(i=1; i<=m; ++i)에 누락될 수 있다for(i=1; i), 。 ( )。 , , 。 , , 。 , , 。

수학 원리


저희가 최소화를 하고 싶어요.θ인수의 대상 함수 J(θ)(θNumpy의 프로그래밍 환경에서 처리가 같은 벡터와 스칼라 업데이트 공식은 다음과 같습니다.
θ:=θ−αddθJ(θ)
Sigmoid 함수를 예로 들면 다음과 같습니다.
f(z)=11+exp(−z)
도수 형식은
f′(z)=g(z)=f(z)(1−f(z))
, 우리는 쉽게 프로그래밍을 실천할 수 있고, 이어서 우리는 사용할 수 있다
θ:=θ−αddθJ(θ)
사다리꼴 하강 알고리즘을 실현하려면 우리가 어떻게 알아야 하는가
g(z)
사다리의 정확성은요?
회상 도수의 수학적 정의:
ddθJ=limϵ→0J(θ+ϵ)−J(θ−ϵ)2ϵ
이로써 우리는 사다리꼴 검사의 수치 검사 공식을 얻을 수 있다.
g(θ)≈J(θ+ϵ)−J(θ−ϵ)2ϵ
이것이 바로 계단 검사의 원리다.실제 응용에서 우리는 항상ϵ예를 들어 10 ~ 4 수량급을 아주 작은 상량으로 설정하면, 우리는 그것을 너무 작게 설정하지 않을 것이다. 예를 들어 10 ~ 20. 왜냐하면 그것은 수치의 오차를 초래하기 때문이다.사실 상단 양쪽 값의 접근 정도는 J의 구체적인 형식에 달려 있지만 가정하면ϵ=10-4의 경우 보통 좌우 양쪽에서 적어도 네 개의 유효한 숫자가 일치하는 것을 발견할 수 있다(또는 정밀도는 적어도 0.0001급이다).

프로그래밍 실현

import numpy as np

def sigmoid(z):
    return 1./(1+np.exp(-z))
def sigmoid_prime(z):
    return sigmoid(z)*(1-sigmoid(z))
def check_gradient(f, x0, epsilon):
    return (f(x0+epsilon) - f(x0-epsilon))/2/epsilon

if __name__ == '__main__':
    x0 = np.array([1, 2, 3])
    epsilon = 1e-4
    print(sigmoid_prime(x0))
            # [ 0.19661193  0.10499359  0.04517666]
    print(check_gradient(sigmoid, x0, epsilon))
            # [ 0.19661193  0.10499359  0.04517666]

좋은 웹페이지 즐겨찾기