본문 바로가기

Data/Data Science

[deeplearning.ai] Coursera 필기정리 2

반응형

 

Computing a Neural Network's Output

이미 딥러닝에 대해서 공부하신분들이라면 지겹게 들으셨겠지만 복습차원에서... 한개의 neural에는 한개의 로지스틱 회귀분석과 activation 값을계산하는 과정이 포함되어있다(밑 그림의 원안에 좌우함수). x는 특성 값이다.

activation function의 역할은 현재 들어있는 노드의 정보를 다음 노드에 넘겨줄지 말지를 결정하는 함수이다.

그리고 hidden layer가 한개가있을때 밑에 그림과 같은 구조로 나타나게 되고. 이전에 배웠던 vectorizaton을 이용하여 결과 값 z, a을 도출한다.

Vectorizing across multiple examples

트레이닝 샘플에서 벡터화시키는 방법

사실 되게 부끄러운 얘기지만 요 몇일전에 numpy array가 어떻게 표현되고있는지 알게되었다.

이전에는 x = [[1,2,3], [4,5,6]] 이라는 numpy array가 있다면 shape이 (3,2)인줄알고있었다. 하지만 shape은 (2,3)이라는걸 알고... 머리속이 매우 혼잡해졌다. 이 강의에서 어떻게 training data를 vectorizing 하는지 봐야겠다.

Activation Functions

Tanh function

-1 ~ 1 사이의 값을 가짐. 항상 시그모이드 함수보다 성능이 좋다는게 증명이됨. 데이터를 중심에 위치시킬때 주로 이 활성화함수를 사용함. Andrew Ng은 sigmoid보다 tanh 함수를 사용한다고함. 거의 항상 우월하다고함. sigmoid함수를 사용하는 예외케이스는 이진 분류를 사용할때만 출력층 activation function으로 사용.

Sigmoid function

0 ~ 1사이의 값을 가짐

Rectified Linear Unit Function (ReLU function)

Tanh function과 Sigmoid function의 단점은 z값이 매우 크거나 매우 작을 때, 함수의 미분값이 거의 0에 수렴함(back propagation할때 치명적, 거의 값이 안전해지는 현상이 나올수있음. Vanishing Gradient 현상). 따라서 Gradient Descent를 느리게 만듬. 

이진 분류에 사용하기 위해서는 출력값이 0 또는 1인 경우는, 시그모이드 활성함수가 출력층의 적절한 선택이 될것. ReLU는 은닉층에서 거의 default값으로 사용하는 활성함수.

 

ReLU 활성 함수의 단점이라면 z가 마이너스값일때 미분값이 0이라는건데. 그래도 작동은 잘된다고함.

 

Leaky ReLU

ReLU와 유사하고 둘다 성능도 좋다고는하지만. Andrew선생님께선 ReLU를 선택한다고한다.

ReLU와 Leaky ReLU의 장점은 z의 많은 영역에서 활성함수의 미분 값, 즉 활성함수의 기울기가 0과 매우 다른 값이라는것. sigmoid와 tanh보다 빠르게 학습을 하게됨. 대부분의 은닉층 유닛들의 z값이 0보다 커서 training example들에 대한 학습 속도가 빠르게 이뤄질수있음.

 

Why do you need non-linear activation functions?

linear activation function을 쓰면 은닉층이 쓸모가 없어짐. 결국엔 input layer to output layer 가 되는것같음

먼저 activation function을 linear function으로 바꿔주고(왼쪽 밑의 a[1] = z[1]처럼),

오른쪽 수식을 살펴보면 a[1]은 은닉층의 activation function output이고

a[2]는 출력층의 activation function output이다.

a[2]의 수식을 펼쳐놓으면 w[2](w[1]x + b[1]) + b[2] => (w[2]w[1])x + (w[2]b[1] + b[2]) => 이게 결국엔 선형함수가 되어버림. 즉, 아무리 많은 은닉층을 추가한다해도 결국엔 하나의 linear activation function값을 계산하는것과 같음.

Formulas for computing derivatives

Shallow Neural Networks

W 와 bias를 동시에 다 0으로 설정할시 모든 neural net에서 동일한 값이 나오게된다. 결국엔 Neural Net의 장점이 사라지게됨. 따라서 W 와 bias는 random 값으로 초기화시켜주는데. 이것을 symmetry breaking 즉 대칭을 피하게끔 만들어준다. 그렇게되면 각 노드마다 계산되는 activation value가 다르게 산출된다.

 

Suppose you have built a neural network, You decide to initialize the weights and biases to be zeros.

- Each neuron in the first hidden layer will perform the same computation. So even after multiple iterations of gradient descent each neuron in the layer will be computing the same thing as other neurons.

 

You have built a network using the tanh activation for all the hidden units. You initialize the weights to relative large values, using np.random.randn(..,..)*1000. What will happen?

- This will cause the inputs of the tanh to also be very large, thus causing gradients to be close to zero. The optimization algorithm will thus become slow.

 

 

  • b[1] will have shape (4,1)
  • W[1] will have shape (4,2)
  • W[2] will have shape (1,4)
  • b[2] will have shape (1,1)

Building blocks of deep neural networks

강의가 참좋았던게 배웠던 내용에 대해서 계속해서 되새김질을 해준다.

Forword and backward functions 전체적인 neural networks 의 흐름도

Hyperparameter

  • Learning rate
  • error function
  • batch size
  • train iteration (Epoch)
  • hidden layer
  • regularization term parameter
반응형