juuuding

[Neural Networks and Deep Learning] Deep Neural Networks 본문

인공지능/코세라 딥러닝 특화과정

[Neural Networks and Deep Learning] Deep Neural Networks

jiuuu 2024. 7. 14. 23:03

 Forward Propagation in a Deep Network

 

 deep neural network에서의 forward propagation을 벡터화 버전으로 표현하면 다음과 같다. [l]은 계층을 나타낸다.

 

 Z[l] = W[l]·A[l-1] + b[l]

 A[l] = g[l](Z[l])

 

 위의 식을 이용하면 한 계층에서 m개의 훈련 예제를 한 번에 계산할 수 있다. 신경망을 구현할 때는 이렇게 벡터화를 사용해서 반복 구문을 최대한 피하는 게 좋지만, 각 계층을 나타내는 반복문은 벡터화로 표현할 수 없다. 따라서 각 계층 별로는 반복문을 사용해주어야 한다. 

 

 

 

 Getting your matrix dimensions right

 

n[x]는 x번째 계층의 유닛 수를 의미한다. 훈련 예제는 총 m개가 있다고 가정한다.

 

[W, b의 차원]

 W[l] : (n[l], n[l-1])

 b[l] : (n[l],1)

 dW[l] : (n[l], n[l-1])

 db[l] : (n[l],1)

 

[Z, A, X의 차원]

 Z[l], A[l] : (n[l], m)

 dZ[l], dA[l] : (n[l], m)

 A[0] = X : (n[0], m)

 

 W와 b의 차원은 훈련 예제 개수에 영향을 받지 않고 입력 특징 수, 현 계층의 유닛 수, 이 전 계층의 유닛 수에 영향을 받는다. 각 훈련 예제마다 W, b가 각각 존재하는 것이 아니기 때문이다. 하지만 Z, A, X의 경우에는 훈련 예제마다 결과가 존재해야하기 때문에 차원이 훈련 예제 개수에 영향을 받는다.

 

 

 

 Building blocks of deep neural networks

 

LINEAR->RELU->LINEAR->SIGMOID 구조를 가진 deep neural networks의 building blocks를 표현하면 다음과 같다. .forward를 할 때 얻었던 z의 값은 캐시 값으로 저장되었다가 backward 때 전달된다. 

 

▶ forward

  input: a[l-1]

  output: a[l]

  cache: z[l]

 

▶ backward

  input: a[l]

  cache: z[l]

  output: da[l-1], dw[l], db[l]

 

 

 

 

 Backward Propagation

 

 

 chain rule을 이용하여 deep neural network에서 역전파를 수행하면 위와 같은 식이 도출된다. 참고로 dW와 db에 1/m이 있는 이유는 각 훈련 예제에서 얻은 결과 값의 평균으로 계산되어야 하기 때문이다. 이 식을 코드로 나타내면 다음과 같다. 

 

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)

 

* dZ는 어떤 활성화 함수를 썼냐에 따라 알맞은 도함수 값을 계산하면 된다. 

* db를 계산할 때 axis=1은 horizontal 방향으로 계산된 값을 더하라는 의미다. 즉 m개의 예제로 얻어진 값들(m개)을 더하라는 말이다. 

 

 

 

 Parameters vs Hyperparameters

 

[Hyperparameters]

 하이퍼파라미터란 학습 알고리즘에 직접 알려주어야 하는, real parameters을 통제하는 parameter을 의미한다. 하이퍼파라미터의 종류로는 학습률, 반복 횟수, 은닉층 수, 층마다의 유닛 수, 활성화 함수 종류가 있다. 

 

[Parameters]

 파라미터의 종류에는 W, b 등... 이 있다.