[GoogleML] Activation Functions' Derivatives

2023. 9. 10. 02:59ArtificialIntelligence/2023GoogleMLBootcamp

 

 

 

Explanation for Vectorized Implementation

 

 

 

직관적으로 행렬 연산이 이해되는 설명! :)

 

 

 

m개의 training sample에 대하여 weighted

 

 

 

different, deeper layer도 동일한 작업을 반복적으로 수행하게 되는 것

 

 

 

Activation Functions

sigmoid 계열의 활성화 함수

tanh는 sigmoid를 shift한 func (거의 동일)

but tanh가 sigmoid보다는 조금 더 유리하다

why? -> mean이 zero에 형성

-> 통과한 이후 값들의 평균이 중앙에 분포, 더 유리 (sigmoid는 0.5)

 

 

 

마지막 layer에서는 sigmoid 사용

why? 

y는 0 or 1 

따라서 출력을 0과 1 사이로 맞추려고 tanh 보다는 sigmoid 

 

 

 

gradient 기울기가 소멸되는 문제를 해결하기 위해

ReLU를 사용한다. 

0이 되는 미분 불가능한 point에서는 0에 가까운 값을 대신 출력

어떠한 활성화 함수를 쓸 지 모르겠다면, ReLU를 써라

Leaky ReLU도 있다

 

 

 

Leaky ReLU

 

 

 

leaky ReLU 에서 

a = max(0.01z, z) 

이러한 수식으로 표현될 수 있다! :) 

 

 

어떠한 activation func을 쓸 지 모르겠다면?

여러 함수들을 다 적용시키고, 평가해보아라

(deep하게 쌓일 경우, ReLU 추천)

 

 

 

Why do you need Non-Linear Activation Functions?

linear, identity func을 취한다면? 

Z 활성화 함수 통과 대신에, 그냥 weighted 된 값을 다음 layer로 넘긴다면?

활성화함수가 없다면? 

 

 

 

선형 연산의 중첩 -> 또 다른 선형 연산

층을 깊게 쌓는 것에 대한 이점이 X (layer 1과 same)

many hidden layer no more expressive

 

 

 

y -> real number

우리가 ReLU, tanh 등

non linear activation func을 사용하는 이유

(없다면, 직선 하나랑 같음, XOR 해결 X)

 

 

 

Derivatives of Activation Functions

 

 

 

g(z) = a 로 치환하여

a ( 1 - a )로 표현하는 경우도 많다 

 

 

 

간단한 값을 대입하여 파악하는 방법

좋은 것 같다! :)

 

 

 

컴퓨터로 구현할 때에는 수치적인 오차가 미세하게 발생 가능 

따라서 if z = 0 대신, 부등호로 표현하는 것이 올바르다

 

 

 

Gradient Descent for Neural Networks

 

 

 

partial derivative를 아는 것이 중요하다

 

 

 

 

 

 

Random Initialization

모든 hidden unit들이 동일하게 update (symmetric)

 

 

 

아무리 많은 유닛을 써도, 동일하게 update (유용X) 

따라서 random initialization이 중요하다

 

 

 

왜 0.01같은 작은 수를 곱하나?

weight를 초기화할 때에는 매우 작은 수로 주는 것이 좋다.

왜냐하면 tanh에서, 0에 가까운 작은 값일수록 

gradient가 많이 발생하기 때문에! :)