2017-12-30 7 views
0

저는 다양한 리소스를 사용하여 파이썬으로 신경망 모델을 개발하고 있습니다. 모든 것이 작동하지만 몇 가지 수학에 대해 질문이 있습니다. 모델에는 다양한 숨겨진 레이어가 있으며 시그 모이 드를 사용하는 마지막 레이어를 제외한 모든 숨겨진 레이어에 relu 활성화가 사용됩니다.파이썬으로 백 프로퍼 그 레이션/numpy - 뉴럴 네트워크에서 웨이트와 바이어스 행렬의 미분 계산

비용 함수는 다음과 AL 지난 후 기동 시그 모이 확률 예측이다

def calc_cost(AL, Y): 
    m = Y.shape[1] 
    cost = (-1/m) * np.sum((Y * np.log(AL)) - ((1 - Y) * np.log(1 - AL))) 
    return cost 

적용된다. 역 전파 내 구현의 일부

, I는 (임의의 주어진 계층에서 순방향 전파 선형 단계에 대해 비용의 유도체) dZ 주어

def linear_backward_step(dZ, A_prev, W, b): 
    m = A_prev.shape[1] 

    dW = (1/m) * np.dot(dZ, A_prev.T) 
    db = (1/m) * np.sum(dZ, axis=1, keepdims=True) 
    dA_prev = np.dot(W.T, dZ) 

    return dA_prev, dW, db 

따라 사용 유도체 레이어의 가중치 행렬 W, 바이어스 벡터 b 및 이전 레이어의 활성화 dA_prev의 파생어가 각각 계산됩니다. Z = np.dot(W, A_prev) + b

내 질문한다 : dWdb을 계산, 왜 1/m에 의해 곱합니다

이 단계로 보완 전방 부분은이 방정식입니까? 미적분 규칙을 사용하여 차별화를 시도했지만이 용어가 어떻게 적용되는지 확신 할 수 없습니다.

도움이 되었습니까?

답변

0

이것은 실제로 손실 함수에 따라 다르며 각 샘플 이후에 가중치를 업데이트하거나 일괄 적으로 업데이트하는 경우에 따라 다릅니다. 다음과 같은 오래 된 패션 범용 비용 함수에서보세요 :

enter image description here

출처 : MSE Cost Function for Training Neural Network 여기

이의이 y^_i이 네트워크 출력과 y_i이 목표 값이라고 할 수 있습니다. y^_i은 인터넷의 출력입니다.

y^_i과 차별화하면 합계의 미분이 유도 물의 합이기 때문에 1/n 또는 합계를 절대로 제거 할 수 없습니다. 1/n이 합계의 요소이므로이 값도 제거 할 수 없습니다. 이제 표준 그래디언트 디센트가 실제로 무엇을하는지 생각해보십시오. 모든 n 샘플에 대한 평균을 계산 한 후 가중치를 업데이트합니다. 확률적인 그래디언트 디센트는 각 샘플 이후에 업데이트 할 수 있으므로 평균을 구할 필요가 없습니다. 일괄 업데이트는 각 일괄 처리의 평균을 계산합니다. 귀하의 경우에는 1/m인데, 여기서는 m이 배치 크기입니다.

0

그라데이션 계산이 잘못되었습니다. 1/m으로 곱하면 안됩니다. 또한 m의 계산도 잘못되었습니다.그것은 당신의 calc_cost 기능

# should not be Y.shape[1] 
m = Y.shape[0] 

당신은 자세한 내용은 다음 예를 참조 할 수 있습니다에 또한

# note it's not A_prev.shape[1] 
m = A_prev.shape[0] 

, 정의해야한다.

Neural Network Case Study