본문 바로가기
Deep Learning Specialization

Deep Neural Network [Deep Learning Specialization #3]

by ALTERww 2022. 7. 13.
320x100

Coursera의 Deep Learning Specialization - Week 1의 강의를 수강하면서 필기한 내용을 바탕으로 정리한 글입니다.

 

지난 주차에는 Shallow Neural Network를 살펴 보았습니다. 이번에는 딥러닝의 의미를 가지고 있는 Deep Neural Network를 살펴 보겠습니다.

 

Deep Neural Network

Hidden Layer의 수가 증가할수록 모델이 깊어집니다. 이러한 외형 특징을 따서 Deep Neural Network라고 하고, Deep Learning이라는 말이 생기게 되었습니다. 왜 Layer를 많이 쌓아야 모델의 성능이 좋아지는 지는 아래에서 서술합니다.

아래는 각 값마다 [l]이라는 첨자를 통해 몇 번째 Layer인지 표기한다는 내용입니다. n[l]은 l번째 Layer의 Unit 수를 의미합니다.

 

 

해당 내용은 Deep Learning에 대한 직관(Intuition)입니다.

  • Neural Network에서 낮은 low-level Layer에서는 간단하고 쉬운 Feature를 학습하고,
    Layer를 많이 통과한 뒤 high-level Layer에서는 복잡하고 어려운 Task를 수행하여 더 특수한 Feature를 학습합니다.
  • Layer를 깊게 쌓아야 Layer마다 특정 Feature를 파악하는 데 뛰어난 성능을 보이게 되고, 이것이 Deep Learning을 사용하는 큰 이유입니다.
  • 반대로, Layer가 얕으면 DNN과 동일한 성능을 이끌어내기 위해 Hidden Layer 내 Unit 수가 '지수적으로 증가'하게 됩니다. Layer가 증가할 때마다 Unit 간 연산이 지수적으로 증가하기 때문에, 반대로 감소할 때마다 연산이 지수적으로 감소합니다. 이를 상쇄시키기 위해서는 Unit의 수가 지수적으로 증가할 수밖에 없겠죠. 하지만 이는 모델의 학습 시간을 심하게 저하시킵니다.

 

Forward Propagation

Forward Propagation은 크게 다르지 않습니다.

  • 이전 Layer([l-1]번째)의 Output이 이번 Layer의 Input이 된다는 것,  ( =A[l-1] )
  • Training set을 한번에 처리하기 위해 Explicit Loop 대신 Vectorized를 이용한다는 것을 이해하면 되겠습니다. 

 

 

Verification of Dimensions (차원 검증)

  • 어떤 변수에 대해 미분한다고 해서 차원이 변화하지 않습니다. 
  • W와 X, 그리고 b의 차원을 생각해 봅시다.( 원래는 W.T를 이용하지만 여기에서는 그냥 W만 생각해 보겠습니다.)
    1. X는 이전 Layer의 출력이니 그 차원은 이전 Layer의 Unit 수가 되겠습니다.
    그리고 X의 Column은 training set의 개수 m과 같으니 X의 차원은 [ n[l-1] x m ] 입니다.
    2. W * X이니, W의 Column과 X의 Row가 같아야 합니다. 
    그리고 W의 Row는 해당 Layer의 Unit 수가 되어 W의 차원은 [ n[l] x n[l-1] ] 입니다.
    3. b는 W * X에 더해지는데, 각 Hidden Unit 마다 고유한 bias 값을 가지게 되고 Training example에 균일하게 더해지게 됩니다. 이를 Python에서는 간단하게 더해주기만 하면 Broadcasting되어 구현됩니다. b의 차원은 [ n[l] x 1 ] 입니다.

 

 

Forward & Backward.

아래는 각 Layer마다 전방 전파와 후방 전파가 진행되는 것을 나타낸 것입니다.

전방 전파에서 이전 Layer의 a값을 받아 W, b, a를 계산하고 z값은 메모리에 저장합니다.

후방 전파에서는 da값을 받아 dw, db를 계산합니다.

 

# Forward, Backward Propagation에서 step마다 사용되는 Input, 출력되는 Output을 보여줍니다. z를 저장하는 이유는 Backward에서 dw를 계산하기 위해 dz가 필요하고, dz를 계산하기 위해서 z값이 필요하기 때문입니다.

 

아래 그림을 참고하여 DNN의 흐름을 이해하면 되겠습니다.

 

# Deep Neural Network

 

이것으로 Week 1의 강의가 끝이 났습니다. 다음 주차에는 모델의 성능을 향상하기 위한 Parameter Tuning, Regularization, Minibatch, Momentum 등을 배우게 됩니다.

 

# next week..

 

댓글