Activation Function 이란?
Activation Function $\sigma$ 란 layer 와 layer 사이에 위치한 non-linear 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)$$
위 수식의 각 요소들의 의미를 따져보자.
- $Wx$
- 행렬 (Matrix)와 Vector을 서로 곱한 것
- 의미 : input vector $x$에 Affine Transformation을 적용하는 것
- Affine Transformation: Input Space 상에서의 격자 크기가 일정하거나 균일하게 바뀌는 변환
- $b$
- bias vector $b$를 더해주는 것
- 의미 : 평행이동 (Translation) 시키는 것
- $\sigma(\cdot)$
- Non-Linear한 activation function을 적용하는 것
- 의미 : 격자가 일정하지 않은 변환을 적용하는 것
그렇다면 NN이 어떻게 Non-Linear Decision Boundary를 학습할까?
- $h = \sigma(Wx + b)$에서 일련의 "$Wx$의 affine transformation" (확장, 회전, 전단)과 "$b$"의 평행이동, "$\sigma의 비선형 변환"을 수행함
- 더 많은 layer들을 쌓고 ("공간을 여러 번 접고 펼치고 당기는 것")
- 더 많은 neuron (즉, 더 큰 dimensional한 space 상에서 변화하는 것)
- 더 복잡한 $x$ -> $y$의 mapping 학습
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가 너무 크거나 작으면 학습 속도가 매우 느릴 수 있다
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을 중심값으로 가진다.
ReLU
$$\text{ReLU}(x) = max(0,x)$$
- Sigmoid, Tanh 함수들에 비해서 SGD의 학습 수렴 속도가 빠르다
- Sigmoid, Tanh에 비해서 saturation의 문제로부터 비교적 자유롭다
- VGG와 DenseNet에서 사용된다
- $x < 0$에 대해서는 Gradient가 0이다. -> 'Dead Neuron' 문제 발생 가능
"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 값을 가진다.
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으로 수렴한다
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하는 역할
Softmax 함수의 $T$는 Temperature를 뜻한다. 모델의 출력을 조정하는 스케일링 파라미터로, 예측 분포의 샤프니스(sharpness) 또는 평탄함(smoothness)을 제어하는 역할을 한다.
- $T > 1$ : 확률 분포가 더 평탄하도록 출력, 여러 클래스의 확률 차이가 감소 : Entropy가 높다
- $T = 1$ : 일반적인 Softmax 함수와 동일
- $T < 1$ : 확률 값이 더 샤프해진다. 모델이 특정 클래스에 대해 더 확신하는 형태 : Entropy가 낮다
'AI & Data > Deep Learning' 카테고리의 다른 글
[딥러닝] Optimization (최적화) (1) | 2024.09.25 |
---|---|
[딥러닝] Gradient Descent (경사하강법) - 심화 (0) | 2024.08.28 |
[딥러닝] Loss Function (0) | 2024.08.18 |
[딥러닝] PyTorch - Transforms (1) | 2024.08.17 |
[딥러닝] PyTorch - Dataset and Data Loader (0) | 2024.08.17 |