AI & Data/Deep Learning

[딥러닝] Activation Function (활성화 함수)

테드리 2024. 9. 8. 23:50

Activation Function 이란?

Activation Function $\sigma$ 란 layer 와 layer 사이에 위치한 non-linear function (비선형 함수)

출처 : https://yceffort.kr/2019/03/05/deep-learning-2-activation-function

 

Activation Function은 왜 필요한가??

 

Non-Linear 한 activation function을 사용함으로써 뉴럴넷은 non-linear한 decision boundary를 그릴 수 있기 때문이다. 그리고 linear한 activation function을 사용하면 아무리 많은 layer를 쌓아도 Single Layer Neural Network에 불과하다. 그 이유에 대해서 알아보도록 하자.

 

 

이미지의 예시를 살펴보자. Output $y$에 대해 정리해보면 다음과 같다.

 

$\begin{aligned}
y &= W_3 h_2 + b_3 \\
  &= W_3 (W_2 h_1 + b_2) + b_3 \\
  &= W_3 (W_2 (W_1 x + b_1) + b_2) + b_3 \\
  &= W_3 W_2 W_1 x + (W_3 W_2 b_1 + W_3 b_2 + b_3) \\
  &= W' x + b'
\end{aligned}$

 

보이는 것처럼 linear한 layer만으로 구성하면 결국 아무리 많은 Layer를 쌓아도 Single Layer Neural Network에 불과하다. 이는 Activation Function이 Linear한 경우여도 마찬가지다.

 

Neural Network는 Non-Linear Decision Boundary를 어떻게 학습할까?

먼저 Neural Network Layer를 구성하는 각 요소들이 어떤 역할과 의미를 갖는지 살펴보자.

$$h = \sigma(Wx + b)$$

위 수식의 각 요소들의 의미를 따져보자.

  1. $Wx$
    • 행렬 (Matrix)와 Vector을 서로 곱한 것
    • 의미 : input vector $x$에 Affine Transformation을 적용하는 것
    • Affine Transformation: Input Space 상에서의 격자 크기가 일정하거나 균일하게 바뀌는 변환
  2. $b$
    • bias vector $b$를 더해주는 것
    • 의미 : 평행이동 (Translation) 시키는 것
  3. $\sigma(\cdot)$
    • Non-Linear한 activation function을 적용하는 것
    • 의미 : 격자가 일정하지 않은 변환을 적용하는 것
Affine Transformation (출처: Khan Academy)

 

 

 

그렇다면 NN이 어떻게 Non-Linear Decision Boundary를 학습할까?

  • $h = \sigma(Wx + b)$에서 일련의 "$Wx$의 affine transformation" (확장, 회전, 전단)과 "$b$"의 평행이동, "$\sigma의 비선형 변환"을 수행함
  • 더 많은 layer들을 쌓고 ("공간을 여러 번 접고 펼치고 당기는 것")
  • 더 많은 neuron (즉, 더 큰 dimensional한 space 상에서 변화하는 것)
  • 더 복잡한 $x$ -> $y$의 mapping 학습
Decision Boundary (출처 : srome.github.io)

 

Activation Function의 종류

Sigmoid

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

  • $(-\infty, \infty)$ 범위의 인풋값 $x$을 0 ~ 1 사이의 값으로 변환
  • $\sigma(x) = 1$ 이면 다음 뉴런에 전기 신호 보냄 (activated)
  • $\sigma(x) = 0$ 이면 다음 뉴런에 전기 신호 보내지 않음 (not activated)
  • 양 끝부분에서 Gradient가 거의 0에 가깝기 때문에 Weight가 너무 크거나 작으면 학습 속도가 매우 느릴 수 있다  

출처 : https://westlife0615.tistory.com/384

 

Tanh

$$\text{tanh}(x) = 2\sigma(2x) - 1 = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}}$$

  • $(-\infty, \infty)$ 범위의 인풋값 $x$을 -1 ~ 1 사이의 값으로 변환해준다.
  • Sigmoid 함수와 마찬가지로 양 끝 부분에서 Gradient가 아주 작아지지만 0을 중심값으로 가진다. 

출처: https://paperswithcode.com/method/tanh-activation

 

ReLU

$$\text{ReLU}(x) = max(0,x)$$

  • Sigmoid, Tanh 함수들에 비해서 SGD의 학습 수렴 속도가 빠르다
  • Sigmoid, Tanh에 비해서 saturation의 문제로부터 비교적 자유롭다
  • VGG와 DenseNet에서 사용된다
  • $x < 0$에 대해서는 Gradient가 0이다. -> 'Dead Neuron' 문제 발생 가능

출처: https://gooopy.tistory.com/55

 

"Dead Neuron"의 문제점은?

만약 모델이 학습하는 과정에서 $b << 0$이 되어버리고 즉 매우 작은 음수의 값을 가지도록 bias term b를 학습하게 되면 기울기가 0이 되어버린다. 따라서 해당 뉴런의 weight는 더 이상 업데이트 되지 않고 죽어버리는 현상 발생!

 

Leaky ReLU

$$\text{LeakyReLU}(x) = max(0.1x, x)$$

  • ReLU의 'dead neuron' 문제점을 해결하기 위해 제안됨
  • $x < 0$인 부분에 대해서도 non-Zero Gradient 값을 가진다.

출처: https://vidyasheela.com/post/leaky-relu-activation-function-with-python-code

 

ELU

$$\text{ELU}(x) =  \begin{cases}
 & x \quad \quad \quad\quad \; (x > 0) \\
 & a(e^x-1) \quad (x < 0)\\ 
\end{cases}$$

  • $x < 0$에 대해서도 Non - Zero Gradient를 가진다
  • 하지만 $x << 0$에 대해서는 Saturate하여 Gradient가 0으로 수렴한다

출처: https://sefiks.com/2018/01/02/elu-as-a-neural-networks-activation-function/

 

Softmax

$$\text{Softmax}(x,T)_i = \frac{e^{x_i}/T}{\sum_{j = 0} e^{x_j}/T}$$

  • 목적: Neural Network의 마지막 Classification Layer에서 output한 logit의 값을 normalization하는 역할

출처: https://www.singlestore.com/blog/a-guide-to-softmax-activation-function/

 

Softmax 함수의 $T$는 Temperature를 뜻한다. 모델의 출력을 조정하는 스케일링 파라미터로, 예측 분포의 샤프니스(sharpness) 또는 평탄함(smoothness)을 제어하는 역할을 한다.

  • $T > 1$ : 확률 분포가 더 평탄하도록 출력, 여러 클래스의 확률 차이가 감소 : Entropy가 높다
  • $T = 1$ : 일반적인 Softmax 함수와 동일
  • $T < 1$ : 확률 값이 더 샤프해진다. 모델이 특정 클래스에 대해 더 확신하는 형태 : Entropy가 낮다