본문 바로가기

갈아먹는 딥러닝 기초 [1] Activation Function(활성화 함수) 종류

들어가며

딥 러닝 기초 개념들을 복습하면서 관련 내용들을 정리해보려 합니다. 가장 먼저 각 활성화 함수별로 간단한 특징과 사용처 정도를 짚고 넘어가겠습니다. 자세한 개념들은 직접 검색해보시거나 레퍼런스를 참고해주시면 감사하겠습니다. 활성화 함수는 붉은 색 그래프, 활성화 함수의 미분값은 푸른색 그래프로 표현하였습니다.

Sigmoid

특징: 입력 값을 0과 1 사이의 값으로 변환하여 출력합니다. 

사용처: 로지스틱 리그레션, 바이너리 클래시피케이션 등에 사용됩니다.

한계점: 미분 함수의 최대 값이 0.5가 됩니다. 때문에 레이어가 깊어질 수록 그라이언트가 전달되지 않는 vanishing gradient 문제가 발생할 가능성이 있습니다. 이후 ReLU에 의해 많이 대체됩니다.

Hard Sigmoid

특징: 시그모이드 함수를 직선 형태로 핀 형태를 갖습니다. 미분 함수가 단순하기 때문에 그라디언트 계산 속도가 빠른 장점이 있습니다.

사용처: 시그모이드를 적용해야 하지만 빠른 연산 속도가 필요할 때 사용합니다.

ReLU(rectified linear unit)

특징:  0 이하의 값은 다음 레이어에 전달하지 않습니다. 0이상의 값은 그대로 출력합니다.

사용처: CNN을 학습시킬 때 많이 사용됩니다.

한계점: 한번 0 활성화 값을 다음 레이어에 전달하면 이후의 뉴런들의 출력값이 모두 0이 되는 현상이 발생합니다. 이를 dying ReLU라 부릅니다. 이러한 한계점을 개선하기 위해 음수 출력 값을 소량이나마 다음 레이어에 전달하는 방식으로 개선한 활성화 함수들이 등장합니다.

LeakyReLU

특징: ReLU와 거의 비슷한 형태를 갖습니다. 입력 값이 음수일 때 완만한 선형 함수를 그려줍니다. 일반적으로 알파를 0.01로 설정합니다. (위 그래프에서는 시각화 편의상 알파를 0.1로 설정하였습니다.)

사용처: Rectifier Nonlinearities Improve Neural Network Acoustic Models

ELU(exponential linear unit)

특징: ReLU와 거의 비슷한 형태를 갖습니다. 지수 함수를 이용하여 입력이 0 이하일 경우 부드럽게 깎아줍니다. 미분 함수가 끊어지지 않고 이어져있는 형태를 보입니다. 별도의 알파 값을 파라미터로 받는데 일반적으로 1로 설정됩니다.

그 밖의 값을 가지게 될 경우 SeLU(scaled exponential linear unit)이라 부릅니다. 알파를 2로 설정할 경우 그래프는 아래와 같은 모습을 보입니다.

사용처: Fast and Accurate Deep Network Learning by Exponential Linear Units (ELUs)

PReLU(parametric rectified linear unit)

특징: LeakyReLU와 거의 유사한 형태를 보입니다. 하지만 LeakyReLU에서는 알파 값이 고정된 상수였던 반면에 PReLU에서는 학습이 가능한 파라미터로 설정됩니다.

사용처: Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification

ThresholdReLU(thresold rectified linear unit)

특징: ReLU와 거의 유사한 형태를 보입니다. ReLU가 0 이하의 입력 값에 대해 0을 출력했다면 ThresoldReLU는 그 경계값을 설정할 수 있으며, 1을 기본값으로 설정합니다.

사용처: Zero-Bias Autoencoders and the Benefits of Co-Adapting Features

Softplus

특징: ReLU 함수를 부드럽게 깎아놓은 형태를 취합니다. 신기하게도 미분 함수가 시그모이드 함수가 됩니다.

사용처: Deep Sparse Rectifier Neural Networks

tanh(hyperbolic tangent)

특징: 하이퍼볼릭 함수란 쌍곡선 함수를 의미합니다. 하이퍼볼릭 싸인, 하이퍼 볼릭 코싸인 함수 역시 존재합니다. 하이퍼볼릭 함수에 대한 설명은 본 포스팅의 범위를 벗어나므로 생략하겠습니다. 아무튼 탄젠트에 해당하는 하이퍼 볼릭 함수를 tanh라 부릅니다.

사용처: RNN, LSTM 등을 학습시킬 때 사용됩니다.

Softsign

특징: tanh함수와 거의 유사한 형태를 보입니다.

사용처: tanh를 대체하기 위해 고안된 함수로 tanh 대신에 사용할 수 있습니다.

Swish

특징: ReLU를 대체하기 위해 구글이 고안한 함수입니다. 시그모이드 함수에 x를 곱한 아주 간단한 형태를 보입니다. 깊은 레이어를 학습시킬 때 ReLU보다 더 뛰어난 성능을 보여준다고 합니다.

사용처: CNN 아키텍쳐 가운데 하나인 mobilenet을 학습시키는데 사용됩니다.

마치며

지금까지 다양한 활성화 함수들을 살펴보았습니다. 우리가 흔히 알고 있었던 시그모이드, 렐루를 변형한 함수들이 많이 눈에 띄었습니다. 사실 이보다 더 많은 활성화 함수들이 있습니다. 이렇게 다양한 활성화 함수들의 종류를 재미있게 표현한 영상 하나를 첨부하면서 포스팅 마치도록 하겠습니다. 감사합니다.

https://www.youtube.com/watch?v=1Du1XScHCww

Reference

[1] Activations, https://keras.io/activations/, keras

[2] Advanced Activations, https://keras.io/layers/advanced-activations/, keras

[3] Activation Function, https://en.wikipedia.org/wiki/Activation_function, wikipedia

[4] swish activation function by google, https://medium.com/@neuralnets/swish-activation-function-by-google-53e1ea86f820