[코세라 딥러닝 정리] C1W4 - Deep Neural Network

딥러닝 특화 과정을 수강하고 러닝을 정리합니다.

Objective

  • See deep neural networks as successive blocks put one after each other
  • Build and train a deep L-layer Neural Network
  • Analyze matrix and vector dimensions to check neural network implementations.
  • Understand how to use a cache to pass information from forward propagation to back propagation.
  • Understand the role of hyperparameters in deep learning

1 - Deep L-layer Neural Network


얼마나 깊은 신경망을 사용해야 하는지 미리 정확하게 예측하기는 어렵다. 은닉층의 개수 또한 하이퍼파라미터가 되고, 모델 구현 과정에서 다양한 값을 시도하고 Dev set으로 평가하면서 최적의 개수를 찾는다 .

이전에 살펴본 로지스틱 회귀는 Shallow (1-layer) NN 얕은 신경망 모델이고, 다음은 4 hidden layers를 가진 Deep NN이다.

Deep Neural Network Notation

$L$ : 네트워크 층의 수 (신경망 층을 셀 때는 입력층은 세지 않는다.)

  • $n^{[l]}$ : $l$ 층에 있는 유닛unit 개수
    • $n^{[0]}$ = $n_{x}$ : Input vector X의 피쳐 개수
  • $a^{[l]}$ : $l$ 층에서의 활성값
  • $a^{[l]}$ = $g^{[l]}(z^{[l]})$
    • $g^{[l]}$ = Activation function in each layer
    • $z^{[l]}$ = Linear Activation in each layer
    • $w^{[l]}$ = weights in each layer
    • $b^{[l]}$ = bias in each layer
  • $a^{[0]}$ : 입력 특징 ($X$)
  • $a^{[L]}$ : 예측된 출력값 ( $\hat {y}$ )

위의 4-layer NN에 적용해보면,

  • $L$ = 4
  • $n^{[1]}$=4 , $n^{[2]}$=4 , $n^{[3]}$=3 , $n^{[4]}$=$n^{[l]}$=1
  • $n^{[0]}$ = $n_{x}$ = 3
  • $a^{[0]}$ = Input = X
  • $a^{[L]}$ = Predicted Output = $\hat {Y}$

2 - Forward and backward Propagation in a Deep Network

Forward Propagation 정방향 전파, 역전파 단계를 어떻게 구현하는 지 살펴보자.

정방향 전파 수식과 벡터화를 4-layer NN을 예로 나타내면 다음과 같다.

$Equations\ &\ Dimensions$ ⇒ $Vectorized\ \ version \ of \ \ Equation$
$1^{st} \ layer$
$z^{[1]}=W^{[1]}x+b^{[1]}$ $a^{[1]}=g^{[1]}(z^{[1]})$ $(n^{[1]},1)=(n^{[1]},n^{[0]})(n^{[0]},1)+(n^{[1]},1)$ $n^{[0]}=nx$ $(n^{[1]},1)=(n^{[1]},1)$ $Z^{[1]}=W^{[1]}X+b^{[1]}$ $A^{[1]}=g^{[1]}(Z^{[1]})$ $(n^{[1]},m)=(n^{[1]},n^{[0]})(n^{[0]},m)+(n^{[1]},1),$ $n^{[0]}=nx$ $(n^{[1]},m)=(n^{[1]},m)$
$2^{nd} \ layer$
$z^{[2]}=W^{[2]}a^{[1]}+b^{[2]}$ $a^{[2]}=g^{[2]}(z^{[2]})$ $(n^{[2]},1)=(n^{[2]},n^{[1]})(n^{[1]},1)+(n^{[2]},1$ $(n^{[2]},1)=(n^{[2]},1)$ $Z^{[2]}=W^{[2]}A^{[1]}+b^{[2]}$ $^{A[2]}=g^{[2]}(Z^{[2]})$ $(n^{[2]},m)=(n^{[2]},n^{[1]})(n^{[1]},m)+(n^{[2]},1)$ $(n^{[2]},m)=(n^{[2]},m)$
$3^{rd} \ layer$
$z^{[3]}=W^{[3]}a^{[2]}+b^{[3]}$ $a^{[3]}=g^{[3]}(z^{[3]})$ $(n^{[2]},1)=(n^{[2]},n^{[1]})(n^{[1]},1)+(n^{[2]},1)$ $(n^{[3]},1)=(n^{[3]},1)$ $Z^{[3]}=W^{[3]}A^{[2]}+b^{[3]}$ $A^{[3]}=g^{[3]}(Z^{[3]})$ $(n^{[2]},m)=(n^{[2]},n^{[1]})(n^{[1]},m)+(n^{[2]},1)$ $(n^{[3]},m)=(n^{[3]},m)$
$4^{th} \ layer$
$z^{[4]}=W^{[3]}a^{[3]}+b^{[3]}$ $a^{[4]}=g^{[4]}(z^{[4]})$ $(n^{[4]},1)=(n^{[4]},n^{[3]})(n^{[3]},1)+(n^{[4]},1)$ $(n^{[4]},1)=(n^{[4]},1)$ $Z^{[4]}=W^{[3]}A^{[3]}+b^{[3]}$ $\hat{Y}=A^{[4]}=g^{[4]}(Z^{[4]})$ $(n^{[4]},m)=(n^{[4]},n^{[3]})(n^{[3]},m)+(n^{[4]},1)$ $(n^{[4]},m)=(n^{[4]},1)$

이를 $l$ layer에 대한 식으로 일반화 시켜보자.

Forward Propagation of $l$ layer

Non – Vectorized Vectorized
$z^{[l]}=W^{[l−1]}a^{[l−1]}+b^{[l]}$ $a^{[l]}=g^{[l]}(z^{[l]})$ $(n^{[l]},m)=(n^{[l]},n^{[l-1]})(n^{[l-1]},m)+(n^{[l]},1)$ $(n^{[l]},m)=(n^{[l]},1)$ $Z^{[l]}=W^{[l-1]}A^{[l-1]}+b^{[l]}$ $\hat{Y}=A^{[l]}=g^{[l]}(Z^{[l]})$ $(n^{[l]},m)=(n^{[l]},n^{[l-1]})(n^{[l-1]},m)+(n^{[l]},1)$ $(n^{[l]},m)=(n^{[l]},1)$

  • $l$ 번째 층에서 정방향 전파는 이전 층의 활성화 값인 $a^{[l−1]}$ 을 입력으로 받고, 다음 층으로 $a^{[l]}$ 값을 출력해 전달한다.
  • 선형결합된 값 $z^{[l]}=W^{[l−1]}a^{[l−1]}+b^{[l]}$와 변수 $W^{[l]}$,$b^{[l]}$ 값을 캐시로 저장한다.

Backward Propagation of $l$ layer

Non – Vectorized Vectorized
$dz^{[l]}=da^{[l]}∗g′^{[l]}(z^{[l]})$ $dW^{[l]}=dz^{[l]}a[l−1]$ $db^{[l]}=dz^{[l]}$ $da^{[l−1]}=dW^{[l]T}dz^{[l]}$ ⇒ $dz^{[l]}=dW^{[l+1]T}dz^{[l+1]}∗g′^{[l]}(z^{[l]})$ $dZ^{[l]}$=$dA^{[l]}∗g′^{[l]}(Z^{[l]})$ $dW^{[l]}$=$dZ^{[l]}A^{[l−1]T}$ $db^{[l]}$=$1 \over m$$np.sum(dZ^{[l]},axis=1,keepdims=True)$ $dA^{[l−1]}=W^{[l]T}dZ^{[l]}$
- $l$ 번째 층에서 역방향 전파는 $da^{[l]}$을 입력으로 받고, $da^{[l]}$를 출력한다.
  • 이때 업데이트를 위한 $dW^{[l]}$, $db^{[l]}$도 함께 출력하는데, 이들을 계산할 때는 정방향 전파 계산에서 저장해둔 캐시를 사용한다.

3 - Getting your Matrix Dimensions Right

신경망 구현시, 디버깅을 위해 행렬의 차원을 확인해 볼 수 있다.

4 - Why Deep Representations?

심층 신경망으로 많은 문제들을 해결할 수 있다고 하는데, 왜 심층 신경망이 더 잘 작동할까?

  • System for an image classification
    • input : a picture of a face
    • earlier layers : feature detector or edge detector로 그림의 윤곽선 검출
    • next layers : 각 뉴런들이 감지한 윤곽선 detected edges를 모아 얼굴의 형태를 구성
  1. 네트워크가 더 깊을수록, 더 많은 특징을 잡아낼 수 있다. 낮은 층 Earlier layers에서는 간단한 특징을 찾아내고detects simpler functions, 깊은 층 Deeper layers에서는 이전에 탐지된 간단한 것들을 모아 복잡한 특징을 찾을 수 있다compute more complex functions.

  2. Cirguit theory 순환 이론에 따르면, 얕은 신경망보다 깊은 신경망에서 더 계산하기 쉬운 수학적인 함수가 있다.

    • XOR 배타적 논리합( eXclusive OR ) 함수
      • 깊은 심층 신경망에서는 XOR을 계산하기 위해 그렇게 많은 게이트가 필요하지 않다.
      • 얕은 신경망에서는 (충분한 은닉층이 없는경우) 기하급수적으로 많은 은닉 유닛(2-layer NN: $2^{n-1}$)이 계산에 필요하다.

Parameters vs Hyperparameters

매개변수인 Hyperparameters하이퍼파라미터를 결정해 최종 모델의 파라미터(변수)를 통제할 수 있다. 신경망 구현에 있어 파라미터(변수)와 하이퍼파라미터에 대해서 정리한다.

Parameters

  • $W,b$ 알고리즘이 학습하는 변수
  • Parameters are estimated from data during the training step.
    • $W^{[1]},b^{[1]},W^{[2]},b^{[2]},W^{[3]},b^{[3]}…$

Hyperparameters

  • 신경망 구조와 알고리즘 학습 방식을 결정하는 변수

  • 여러 번의 시도를 통해 적합한 값을 찾는다.

  • Hyperparameters are manually set earlier and are used to assist estimation model parameter. (Parameter(변수) $W,b$를 최적화하기 전에 hyperparameters를 결정한다.)

    • a learning rate – α
    • a number of iteration
    • a number of layers $L$
    • a number of hidden units $n^{[l]}$
    • a choice of activation function
    • momentum term 모멘텀 항
    • mini batch size 미니배치 크기
    • number of epochs
      ...

5 - What does this have to do with the brain?

그래서 딥러닝 신경망 모델이 뇌와 무슨 관련이 있을까? 결론적으로 말하면, 신경망과 인간의 뇌 간의 관계는 크지 않다. 최근에는 이런 비유가 점점 무너져 가고 있다.

신경망의 복잡한 과정을 단순화해서 뇌세포의 프로세스로 비유하면, 사람들에게 조금 더 직관적이고, 효과적으로 전달할 수는 있다. 그러나 오늘날 신경 과학자들조차도 하나의 뉴런이 무엇을 하는지 거의 모르고, 딥러닝에서도 신경과학에서 특징짓는 것보다 하나의 뉴런은 훨씬 더 복잡하고 알기 어렵다. 특히 신경과학에서도 뉴런이 딥러닝 신경망처럼 역전파를 통해 학습하는 지도 의문점이 있다.