SSAC X IFFEL/DeepML

[EECS 498-007/ 598-005 / cs231n] Lecture 10. Training Neural Networks I

bbooo 2021. 2. 22. 12:24
728x90

0. Activation Function이란

Activation Function의 종류들을 알아보기에 앞서 Activation Function이 무엇인지 알아보겠다.

$ \sum_{i}^{}w_i x_i + b $ 라는 linear function을 $f$라는 activation fuction의 입력으로 집어넣음으로써, neural netwrok에서 multiple layer로 동작할 수 있게끔 도와준다.

activation function이 없이 linear function만으로 multiple layer로 쌓은 것은 하나의 linear function으로 표현할 수 있기 때문에 multiple layer의 기능을 하지 못한다. 

 

1. Activation function의 종류

Activation function에는 다양한 종류가 있는데 먼저 sigmoid 함수부터 알아보자

 

1-1. Sigmoid

 

$$ \sigma (x) = 1/(1+{e^{-x}}) $$

 

장점

- [0,1]의 범위로 나타낸다.

- 역사적으로 가장 오랫동안 사용되어 왔다.

- 뉴런의 saturating(어느 한 값으로 수렴) 상태인 firing rate를 가장 잘 나타낸다고 한다.

 

하지만 sigmoid에는 3가지 단점이 존재한다.

① saturated 뉴런은 gradient를 죽인다.

② sigmoid 함수의 output은 zero-centered가 아니다.

③ exp()계산에는 비용이 많이 든다.

 

단점들에 대해서 더 자세히 알아보자.

 

saturated 뉴런은 gradient를 죽인다.

뉴런의 결과값이 매우 크거나 작을 떄, 시그모이드의 결과값은 0에 수렴한다.

오른쪽 그림에서 x가 10 혹은 -10이면 $ \frac{\vartheta \sigma }{\vartheta x} $ 즉 local gradient는 0에 가까운 것을 볼 수 있다.

local gradient가 0에 가깝다는 것은 down stream gradient인 $ \frac{\vartheta L }{\vartheta x} $ 또한 0에 가깝다는 것을 의미한다. 이런 역전파가 계속 되면 결국 gradient는 0에 수렴하게 될 것이다.

 

② sigmoid 함수의 output은 zero-centered가 아니다.

뉴런의 input이 항상 positive일 때 $w_i$에 대한 local gradient는 모두 positive가 된다. 

오른쪽 사진에 대입해 보면 $ x_1, x_2, x_3$이 모두 positive일 때 $w_i$에 대한 local gradient가 모두 positive라는 의미이다. 

우리는 학습을 하면서 W를 개선하고 싶지만, 모든 W의 gradient가 positive or negative이기 때문에 down stram gradient 또한 모두 positive or negative가 된다. (upstream X local = down stream)

위와 같은 2차원 상에서 모든 gradient의 방향은 plus 혹은 minus 방향 밖에 존재하지 않게 된다.

만약 파란색 선이 optimal한 vector라고 가정을 하면, 학습을 할 때 지그재그로 이동하게 된다.

이는 고차원상에서는 더욱 큰 제약이 되지만, mini batch를 사용하면 해결이 된다.

 

③ exp()계산에는 비용이 많이 든다.

계산을 최대한 효율적으로 하지만, exp는 계산적으로 비용이 많이 드는 수식이다.

하지만 이는 엄청 큰 제약은 아니며, 일반적으로는 ①번 단점이 가장 큰 제약으로 여겨진다. 


1-2. Tanh

sigmoid 함수의 zero centered 문제를 해소하기 위한 함수이다.

장점

- [-1,1]의 범위로 나타낸다.

- zero centered 문제가 해소되었다.

 

단점

- saturated 뉴런은 gradient를 죽인다.

 

 

 

 


1-3. ReLU

$$ f(x) = max(0,x) $$

 

장점

- +영역에서 saturate 되지 않는다.

- 효율적인 계산이 가능하다.

- sigmoid/tanh 와 비교해서 6배 가량 빠른 속도가 나온다.

 

단점

- output이 zero-centered가 아니다.

- dead ReLU

$x <0$일 때 gradient가 0이 된다.

이는 뉴런에 영향이 안미칠정도로 극소값도 계산을 해야하는 상황이 존재할 때, 그 output을 0으로 만들어 계산을 무시한다는 점에서 장점으로 볼 수 있지만, dead ReLU를 만든다는 데 있어서 단점으로도 볼 수 있다.

 

dead ReLU란 모든 data가 특정 ReLU의 negative 위치에 있을 때를 의미한다.

이 때 이 노드는 더이상 activate, update 되지 않아 학습이 되지 않는 문제를 일으킨다.

 

가끔 ReLU 초기화 시에 아주 작은 값의 bias를 줌으로써 학습이 계속되도록 하기도 한다.


1-4. Leaky ReLU

$$ f(x) = max(0.01x, x) $$

 

장점

- saturate 되지 않는다.

- 효율적인 계산이 가능하다.

- sigmoid/tanh 와 비교해서 6배 가량 빠른 속도가 나온다.

- dead ReLU가 되지 않는다.

 

단점

- 식에 존재하는 0.01또한 일종의 hyper paremeter로 학습을 통해 구해야 한다.

$ f(x) = max(\alpha x, x)$ , 역전파를 하면서 $\alpha$를 learnable parameter로 학습해야한다.


1-5. Exponetial Linear Unit (ELU)

ReLU, Leaky ReLU 모두 0에서 미분 불가능하다. 수학적으로 계산가능하도록 하기 위해 ELU가 나왔으며, defalut alpha 값은 1이다. 

 

 

장점

- ReLU의 장점을 모두 가지고 있다.

- zero mean에 좀더 가까운 결과를 낸다.

- ReLU와 비교해서 noise에 robust함. 

 

단점

- exp를 계산해야한다.

 

 

 

 

 


1-6. Scaled Exponetial Linear Unit (SELU)

장점

- ELU의 scaled 버전으로 , deep network에서 더 잘 동작한다.

- Batch Norm이 없는 경우에도, deep SELU network를 수행하면 자동적으로 self normalization이 되는 효과가 있다고 한다. 

-> 이를 입증하기 위한 91페이지 짜리 논문이 있다고 한다..

 

 

단점

- exp를 계산해야한다.

 


2. CIFAR10에서의 정확도 비교 및 결론

- ReLU를 쓰자.

- 0.1 %라도 올리고 싶으면 ReLU, ELU, SELU, GELU 등을 적용해보면서 적절한 activation function을 찾아 사용하자.

- sigmoid나 tanh는 사용하지 말자. 


3. Data Preprocessing 

X라는 데이터가 [NxD]일 때 이를 2차원으로 가정하면 표현하면 위 그림과 같다.

original data에서 mean을 구한 후 mean으로 shift를 하면 zero-centered date라고 한다. 

zero-centered data에서 각 축마다 표준편차가 1이 되도록 scale을 한것을 nomalized data라 한다.

 

앞 1-1에서 input이 모두 positive일 때 gradient $w$는 항상 positive하거나 negative하다 했었다.

이때문에 zero-mean data가 필요하다.

그렇기 때문에 위와 같은 data preprocessing이라는 절차를 거치는 게 좋다고 한다.

 

실제로는 데이터에 PCA, Whitening을 함으로써 수행한다고 한다.

original data에서는 x값이 무엇이면 y 값이 무엇인지 특정 축에 의해 relation으로 알 수 있다.

하지만 PCA(Principal Component Analysis)를 활용해 만든 decorrelated data에서는 x값이 어떤 값이든 y값이 어떤값인지 알 수 없다. 

이 후 decorrelated data에서 whitenint을 하여  whitened data를 만들 수 있다. 

 

이렇게 data preprocessing을 하는 이유는 뭘까?

데이터 전처리를 하면 변화에 덜 민감하고, optimize하기 쉬워지기 때문이다.

왼쪽 그림에서는 기울기가 약간만 바껴도 classify된 결과가 달라지기 때문에 sensitive하다고 볼 수 있지만,

오른쪽 그림을 덜 그렇기 때문에 less sensitive하다고 볼 수 있다. 

 

이미지에 대해서 data preprocessing을 수행한 예제로는 다음과 같이 존재한다고 한다.

 

728x90