Backpropagation

Taixi·2024년 11월 1일
0

개인공부

목록 보기
1/14
# 순방향 전파(Forward Propagation) 
def forward_prop(X, W1, W2, b1, b2):
    Z1 = np.dot(W1, X) + b1
    A1 = np.tanh(Z1)
    Z2 = np.dot(W2, A1) + b2
    A2 = sigmoid(Z2)

    cache = {"Z1": Z1,
            "A1": A1,
            "Z2": Z2,
            "A2": A2}

    return A2, cache

  • X: 입력 데이터 벡터/행렬
  • W1, W2: 첫 번째 및 두 번째 층의 가중치 행렬
  • b1, b2: 첫 번째 및 두 번째 층의 편향 벡터

요약

  • 입력 데이터 X가 가중치와 편향을 거치면서 첫 번째 층을 통과하고, tanh 활성화 함수가 적용
  • 그 다음, 두 번째 층을 통과하면서 시그모이드 활성화 함수가 적용되어 최종 출력 A2가 계산
  • 각 중간 값(Z1, A1, Z2, A2)은 cache에 저장되어 이후 역전파에 사용

#  예측된 출력과 실제 출력 간의 손실(비용)을 계산하는 함수
def compute_cost(A2, Y):
    m = Y.shape[1]

    cost_sum = np.multiply(np.log(A2), Y) + np.multiply((1 - Y), np.log(1 - A2))
    cost = - np.sum(logprobs) / m

    cost = np.squeeze(cost)
    return cost

요약

  • 이 함수는 교차 엔트로피 비용 함수를 사용하여 예측(A2)과 실제 출력(Y) 간의 오차를 계산
  • 교차 엔트로피는 예측 확률과 실제 값의 차이를 측정하는 방법으로, 값이 작을수록 예측이 더 정확하다는 것을 의미합니다.
  • 계산된 cost는 학습 과정에서 모델이 가중치를 조정하도록 돕기 위해 사용됩니다.

# 역전파(Backpropagation)
def back_propagate(W1, b1, W2, b2, cache):

    # Retrieve also A1 and A2 from dictionary "cache"
    A1 = cache['A1']
    A2 = cache['A2']

    # Backward propagation: calculate dW1, db1, dW2, db2.
    dZ2 = A2 - Y
    dW2 = (1 / m) * np.dot(dZ2, A1.T)
    db2 = (1 / m) * np.sum(dZ2, axis = 1, keepdims = True)

    dZ1 = np.multiply(np.dot(W2.T, dZ2), 1 - np.power(A1, 2))
    dW1 = (1 / m) * np.dot(dZ1, X.T)
    db1 = (1 / m) * np.sum(dZ1, axis = 1, keepdims = True)

    # Updating the parameters according to algorithm
    W1 = W1 - learning_rate * dW1
    b1 = b1 - learning_rate * db1
    W2 = W2 - learning_rate * dW2
    b2 = b2 - learning_rate * db2

    return W1, W2, b1, b2

요약

  • 이 함수는 역전파를 통해 출력 오차를 입력층까지 전파하면서 각 층의 가중치와 편향에 대한 그래디언트를 계산
  • 계산된 그래디언트를 사용하여 기울기 하강법으로 가중치와 편향을 업데이트
  • 모델이 손실을 줄이기 위해 매개변수를 조정하고 점점 더 좋은 성능을 발휘할 수 있게 됨
profile
개발자를 위한 첫시작

0개의 댓글

관련 채용 정보