산업공학/Deep Learning

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

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

Activation Function 이란?

Activation Function σ 란 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에 대해 정리해보면 다음과 같다.

 

y=W3h2+b3=W3(W2h1+b2)+b3=W3(W2(W1x+b1)+b2)+b3=W3W2W1x+(W3W2b1+W3b2+b3)=Wx+b

 

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

 

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

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

h=σ(Wx+b)

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

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

 

 

 

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

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

 

Activation Function의 종류

Sigmoid

σ(x)=11+ex

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

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

 

Tanh

tanh(x)=2σ(2x)1=exexex+ex

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

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

 

ReLU

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

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

ELU(x)={x(x>0)a(ex1)(x<0)

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

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

 

Softmax

Softmax(x,T)i=exi/Tj=0exj/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가 낮다