Recent Posts
Recent Comments
Archives
반응형
250x250
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Today
Yesterday

Total
04-29 05:43
관리 메뉴

Hey Tech

[Deep Learning] Activation Function 개념 및 종류: sign, tanh, sigmoid, softmax, ReLU, Leaky ReLU 본문

AI & 빅데이터/머신러닝·딥러닝

[Deep Learning] Activation Function 개념 및 종류: sign, tanh, sigmoid, softmax, ReLU, Leaky ReLU

Tony Park 2022. 4. 21. 09:02
728x90
반응형

📚 목차

1.  활성화 함수의 개념
2.  활성화 함수의 종류
    2.1.  Sign 함수
    2.2.  Sigmoid 함수
    2.3.  Tanh 함수
    2.4.  Softmax 함수
    2.5.  ReLU 함수
    2.6.  Leaky ReLU 함수

1.  활성화 함수의 개념

활성화 함수(Activation Function)란 퍼셉트론(Perceptron)의 출력값을 결정하는 비선형(non-linear) 함수입니다. 즉, 활성화 함수는 퍼셉트론에서 입력값의 총합을 출력할지 말지 결정하고, 출력한다면 어떤 값으로 변환하여 출력할지 결정하는 함수입니다. 퍼셉트론에 대한 자세한 내용은 이곳을 참고해 주세요. 아래 그림 1에 노란색으로 색칠한 부분이 퍼셉트론의 활성화 함수 부분입니다. 

그림 1. 퍼셉트론 내 활성화 함수

2.  활성화 함수의 종류

2.1.  Sign 함수

위의 퍼셉트론에서는 Sign 함수를 활성화 함수로써 활용하였습니다(그림 2 참고). 즉, Sign 함수의 활성화 함수는 퍼셉트론 내 입력값의 총합이 \(0\)보다 작을 경우 \(-1\)을 출력하고, 반대로 \(0\)보다 클 경우 \(1\)을 출력하는 역할을 합니다. 이처럼 활성화 함수는 비선형 함수입니다.

그림 2. Sign 함수

Sign 함수는 데이터와 결정경계(Decision Boundary) 간 거리 정보를 고려하지 않는 한계가 존재합니다. 그 이유에 대해 자세히 알아봅니다. 아래의 그림 3과 같이, 녹색과 파란색 동그라미 클래스가 있다고 가정해 보겠습니다. 두 클래스를 분류하는 기준이 되는 선을 결정경계(Decision Boundary)라고 부릅니다. 그림 3에서는 빨간색 직선이 이에 해당합니다. 그렇다면 좌측 그림과 우측 그림에서 어떤 결정경계가 더 좋다고 말할 수 있을까요?

그림 3. 결정경계의 성능 비교

정답은 우측입니다. 아래의 그림 4와 같이 결정경계와 클래스별로 가장 가까운 데이터 간 거리를 마진(margin)이라고 부르는데, 이 마진의 크기가 클수록 좋은 결정경계입니다. 즉, 좌측 그림의 마진보다 우측 그림의 마진이 더 크기 때문에 우측 그림의 결정경계가 더 좋다고 볼 수 있습니다.

그림 4. 결정경계-데이터 간 마진 비교

하지만, Sign 함수는 데이터와 결정경계(Decision Boundary) 간 거리 정보를 고려하지 않는다는 한계가 존재합니다. 즉, Sign 함수는 단순히 데이터를 분리했는지 여부에만 관심이 있고 얼마나 잘 분리했는지는 신경 쓰지 않습니다. 그림 4와 같이, 좌측 그림보다는 우측 그림처럼 더 좋은 결정 경계가 있을 수 있어도 말이죠. 이러한 Sign 함수의 한계점을 보완하고자 여러 활성화 함수가 제안되어 활용되고 있습니다. 이어지는 섹션에서 각각에 대해 알아봅니다.

2.2.  Sigmoid 함수

Sigmoid 함수는 아래 그림 5와 같은 모양의 함수입니다. 본래 Sigmoid 함수라 하면 S자 모양의 함수를 모두 가리키는데, 딥러닝 분야에서는 일반적으로 지금 다루는 특징을 갖는 함수로 통용됩니다.

그림 5. Sigmoid 함수(출처: https://commons.wikimedia.org/wiki/File:Sigmoid-function-2.svg)

Sigmoid 함수의 수식은 아래와 같습니다.

 

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

 

Sigmoid 함수의 특징은 다음과 같습니다. 

  • 모든 입력값에 대해 출력값이 실숫값으로 정의(=Soft Decision)
  • 값이 작아질수록 \(0\), 커질수록 \(1\)에 수렴
  • 출력이 \(0\)~\(1\) 사이로 확률 표현 가능(=Binary Classification)
  • Vanashing Gradient 문제 존재

2.3.  Tanh 함수

tanh에 대해 알아봅니다. 하이퍼볼릭 탄젠트(Hyperbolic Tangent) 함수라 부르고 tanh로 표기합니다. 수식은 아래와 같습니다.

 

$$ tanh(x)  = \frac{sinh(x)}{cosh(x)} = \frac{e^x - e^{-x}}{e^x + e^{-x}} $$

 

tanh 함수를 시각화하면 그림 6과 같으며 특징은 다음과 같습니다.

  • 모든 입력값에 대해 출력값이 실숫값으로 정의(=Soft Decision)
  • 값이 작아질수록 \(-1\), 커질수록 \(1\)에 수렴
  • 입력값이 \(0\)에 가까울수록 미분이 크기 때문에 출력값이 빠르게 변함
  • Vanashing Gradient 문제 존재

그림 6. tanh 함수(출처: https://commons.wikimedia.org/wiki/File:Mplwp_tanh.svg)

2.4.  Softmax 함수

Softmax 함수는 \(N\)가지 출력값을 갖는 함수로써 입력값을 \(N\)가지 클래스 중 하나로 분류하는 Multi-class Classification에 주로 사용됩니다. 수식은 아래와 같습니다.

 

$$ softmax(x)_i = \frac{e^{x_i}}{\sum_{j}e^{x_j}} $$

 

Softmax 함수의 특징은 다음과 같습니다.

  • 출력값이 \(N\)개
  • 입력값을 각각 지수함수로 취하고, 이를 정규화(=총합을 1로 만듦)
  • 정규화로 인해 각 출력값은 \(0\)~\(1\) 값을 가짐
  • 모든 출력값의 합은 반드시 \(1\)
  • \(N\)가지 중 한 가지에 속할 확률 표현 가능(=Multi-class Classification)

앞서 다룬 Sigmoid 함수는 하나의 입력을 \(0\)으로 고정한 2-Class Softmax(\(0\) 또는 \(sigmoid(x)\)) 함수와 동일합니다. 이를 쉽게 이해할 수 있도록 표현하면 아래의 그림 7과 같습니다.

그림 7. Softmax와 Sigmoid 비교

이를 활용하여 Simoid 함수와 Softmax 함수를 수식으로 표현하면 아래와 같습니다.

 

$$ sigmoid(x) = softmax([x, 0])_{0} = \frac{e^x}{e^{x} + e^{0}} = \frac{1}{1+e^{-x}} $$

 

모든 출력값의 합은 \(1\)이므로 sigmoid 함수의 다른 출력값은 \((1-sigmoid(x))\)와 같이 표현할 수 있습니다. 이를 통해 Softmax는 \(2\)개의 클래스를 구분하기 위해 2개의 입력값을 받아왔었지만, \(1\)개의 입력값으로도 \(2\)가지 클래스를 분류할 수 있다는 것을 알 수 있습니다.

2.5.  ReLU 함수

렐루(Rectified Linear Unit, ReLU) 함수는 \(y=x\)인 선형함수가 입력값 \(0\) 이하에서부터 rectified(정류)된 함수입니다(그림 8 참고). 즉, ReLU 함수의 수식은 다음과 같습니다.

 

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

 

그림 8. ReLU 함수

ReLU 함수의 특징은 아래와 같습니다.

  • 딥러닝 분야에서 가장 많이 사용되는 활성화 함수
  • Sigmoid, tanh 함수의 Vanashing Gradient 문제 해결
  • 입력값이 음수일 경우 출력값과 미분값을 모두 \(0\)으로 강제하므로 죽은 뉴런을 회생하는 데 어려움 존재(a.ka., Dying ReLU)
  • 구현이 단순하고 연산이 필요 없이 임계값(양수/음수 여부)만 활용하므로 연산 속도 빠름

2.5.  Leaky ReLU 함수

ReLU 함수에서 발생하는 Dying ReLU 현상을 보완하기 위해 다양한 변형된 ReLU 함수가 제안되었습니다. 그중에서 Leaky ReLU에 대해 알아봅니다. Leaky ReLU는 입력값이 음수일 때 출력값을 \(0\)이 아닌 \(0.001\)과 같은 매우 작은 값을 출력하도록 설정합니다. 수식은 다음과 같습니다.

 

$$ max(ax, x) $$

 

여기서 \(a\)는 \(0.01, 0.001\)과 같이 작은 값 중 하나로 하이퍼파라미터입니다(그림 9 참고). Leaky는 사전적으로 '(물이나 연기 등이)새어 나가는' 같은 의미가 있습니다. 여기서 말하는 '새어 나가는' 정도를 입력값이 음수인 경우의 기울기를 나타냅니다. 이처럼 \(a\)는 \(0\)이 아닌 값이기 때문에 입력값이 음수라도 기울기가 \(0\)이 되지 않아 뉴런이 죽는 현상을 방지할 수 있습니다.

그림 9. Leaky ReLU 함수

📚참고할 만한 포스팅

1. [Deep Learning] 퍼셉트론(Perceptron) 개념 이해
2. [Deep Learning] 퍼셉트론(Perceptron) 학습방법 및 절차
3. [Deep Learning] 활성화 함수의 개념 및 종류: sign, tanh, sigmoid, softmax, ReLU
4. [Deep Learning] 손실함수(Loss Function) 개념
5. [Deep Learning] 평균제곱오차(MSE) 개념 및 특징
6. [Deep Learning] 평균절대오차(MAE) 개념 및 특징
7. [Deep Learning] 최적화 개념과 경사 하강법(Gradient Descent)
8. [Deep Learning] 최적화 기법: (1) Momentum
9. [Deep Learning] 최적화 기법: (2) AdaGrad
10. [Deep Learning] 최적화 기법: (3) RMSProp
11. [Deep Learning] 최적화 기법: (4) Adam

 


포스팅 내용에 오류가 있거나 보완할 점이 있다면 아래에 👇👇👇 댓글 남겨주시면 감사드리겠습니다 :)
그럼 오늘도 즐겁고 건강한 하루 보내시길 바랍니다.
고맙습니다😊

728x90
반응형
Comments