본문 바로가기
ML & DL/Study

Activation Function (Feat, non-linearity 비선형)

by 별준 2020. 12. 14.

딥러닝 학습을 공부하다보면 activation function(활성 함수)라는 것이 나오고, 아무 생각없이 이런 거구나 하고 넘어갔었던 것 같아서, 조금 정리해보려고 합니다.

 

인공신경망은 단일 퍼셉트론이라는 기본 개념으로부터 출발했는데, 위 이미지는 신경망이 어떻게 신호를 전달하는지 보여주고 있습니다. 여러 개의 신호(\(x_0, x_1, x_2\))가 들어와서 출력을 전달하고 있는데, 이때, 전달하는 출력 신호의 세기(강도)를 정하는 것이 바로 activation function이라고 할 수 있습니다.

activation(활성화)라는 단어에서 알 수 있듯이 입력 신호들의 조합이 뉴런의 활성화를 일으키는지 정하는 역할이라고 볼 수 있죠.

 

그리고 activation function에 대해서 공부하다보면 non-linearity(비선형성)도 항상 언급되며, 그만큼 중요한 내용입니다. 그렇다면 딥러닝에서 non-linearity가 왜 중요하느냐가 궁금하게 되는데, 다음과 같이 간단하게 설명할 수 있을 것 같습니다. 

 

데이터가 복잡해지고, feature들의 차원이 증가하면서 데이터의 분포가 선형적이지 않고 비선형적으로 나타나면서 단순한 선형의 boundary로는 표현이 불가능하기 때문에 비선형의 boundary가 필요하기 때문에 non-linear가 필요합니다.

 

그렇다면 activation function이 linear하다면 어떤 문제가 발생할까요?

Neural Network에서 모든 activation function이 간단한 선형함수인 \(g(z) = z\)라고 가정하고, 살펴보도록 하겠습니다.

위와 같은 NN이 있을 때(output layer의 sigmoid는 무시해주세요), 계산 결과는 다음과 같습니다.(결과 output을 \(z^{[2]}, a^{[2]}\)로 표현)

\[\begin{align*} z^{[1]} &= W^{[1]}x + b^{[1]} \\ a^{[1]} &= g^{[1]}(z^{[1]}) = z^{[1]} \\ z^{[2]} &= W^{[2]}a^{[1]} + b^{[2]} \\ a^{[2]} &= g^{[2]}(z^{[2]}) = z^{[2]} \end{align*}\]

위 식의 공식들을 대입해서 \(a^{[2]}\)를 구하면 다음과 같습니다.

\[\begin{align*}  a^{[2]} = z^{[2]} &= w{[2]}a^{[1]} + b^{[2]} \\ &= w^{[2]}(w^{[1]}x + b^{[1]}) + b^{[2]} \\ &= W^{[2]}W^{[1]}x + W^{[2]}b^{[1]} + b^{[2]} \\ &= W'x + b' \end{align*}\]

결국 해당 모델은 linear function으로 계산되는 것과 동일하며, NN이 더 많은 layer로 구성되더라도 일반 Logistic Regression과 동일하게 됩니다. 결국 hidden layer의 의미가 없어지게 되는 것이죠.

2개의 linear function의 연산은 그 자체로 이미 linear function이기 때문에 하나의 linear function과 동일한 것입니다.

 

Non-linear function이란 ?

그럼 linear function과 non-linear function은 어떻게 구분하는 것일까요?

ReLU

처음에 저는 위의 ReLU를 봤을 때, 그래프는 직선뿐인데 왜 ReLU가 non-linear인지 궁금했었습니다. 

그래서 non-linear의 정의를 한 번 찾아봤는데요. 신호 및 시스템 분야에서 linear와 non-linear를 아래와 같이 정의하고 있습니다.

 

우선 linear의 정의는 다음과 같습니다.

  1. 선형적인 그래프이다.
  2. 동차성을 만족한다. (\(f(ax) = af(x)\))
  3. 가산성을 만족한다. (\(f(x_1 + x_2) = f(x_1) + f(x_2)\))

그리고 non-linear는 linear의 성질을 하나라도 만족하지 못하면 non-linear로 정의하게 됩니다.

따라서, ReLU는 1)x = 0에서 그래프가 꺽이기 때문에, 선형적인 그래프가 아니며, 2) \(f(-3 \times 2) \neq -3f(2)\) 이고, 3) \(f(-3 + 2) \neq f(-3) + f(2)\) 이기 때문에 non-linear function 입니다.

 

 

 

다음으로는 대표적인 activation function인 sigmoid의 기본적인 내용과 단점을 살펴보고 다른 activation function에 대해서도 알아보도록 하겠습니다.

 

Sigmoid function

Sigmoid function은 위와 같은 그래프를 가지며, 0에서 1사이의 값으로 뉴런을 활성화(activation)해줍니다.

\[g(z) = \frac{1}{1+e^{-z}}\]

딥러닝 초기에 많이 사용되던 activation 함수인데, 0~1 사이의 값으로 나타내기 때문에 이진분류(binary classification)에서 출력 activation으로 많이 사용되며, 현재도 아주 많이 사용되고 있습니다.

다만, sigmoid의 단점이 존재하는데

  1. 입력이 크거나 작을 경우(5이상, -5이하), 미분값이 작아져서 학습이 잘 되지 않는다.(Vanishing Gradient 문제)
  2. exp 연산이 비교적 큰편이다.
  3. 결과값이 모두 양수이기 때문에, 학습의 방향이 제한된다.(non-zero centered)

위의 단점을 갖고 있습니다. 3번의 경우 모든 파라미터의 미분값이 같은 부호값을 가지게 되어서 생기는 문제인데, 추후에 자세한 수식으로 살펴보도록 하겠습니다.

 

tanh

다음으로는 tanh(하이퍼볼릭탄젠트)입니다. tanh는 sigmoid 함수의 크기와 위치를 조절한 함수이며, 다음과 같습니다.

\[g(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}}\]

그래프를 보다시키 알겠지만, 0을 중심으로 -1과 1사이의 값을 가지며 결과값이 양수/음수 모두 가능하며 non-zero centered 문제가 해결됩니다.(보통 sigmoid보다 수렴 속도가 빠르다고 합니다.)

하지만, sigmoid와 동일하게 입력값이 커지거나 작아지면 gradient가 소실되는 문제는 여전히 존재합니다.

 

ReLU

다음은 매우 많이 사용되는 ReLU입니다. 어떤 activation 함수를 사용할지 모른다면 ReLU를 사용하라는 말이 있듯이 아주 좋은 성능을 보여주는 activation 함수입니다.

\[g(z) = max(0, z)\]

그래프를 보시면 아시겠지만, ReLU는 양수일 경우에는 입력을 그대로 내보내며, 음수인 경우에는 0으로 내보냅니다.

(0보다 클 경우에만 neuron을 활성화합니다.) 

여기서 앞서 설명한 activation function보다 큰 장점이 있는데, 바로 일부 뉴런만 활성화하기 때문에, 네트워크를 sparse하고 efficient하게 만들어줍니다.

그리고 양수인 경우에는 gradient가 1로 일정하므로, vanishing gradient를 피할 수 있고 미분도 편리하기 때문에 연산량이 감소(exp연산이 없음)됩니다. (sigmoid나 tanh보다 학습 수렴 속도가 6배정도 빠르다고 합니다.)

 

다만, 입력이 음수인 경우에는 gradient가 무조건 0이 된다는 단점이 있습니다.

이 문제를 극복하기 위해서 Leaky ReLU가 고안되었는데, 몇몇 모델을 제외하고는 눈에 띄는 효과는 없고 그냥 ReLU를 사용하면 된다고 합니다.

 

 

참고

medium.com/@toprak.mhmt/activation-functions-for-deep-learning-13d8b9b20e

ratsgo.github.io/deep%20learning/2017/04/22/NNtricks/

'ML & DL > Study' 카테고리의 다른 글

AutoEncoder (2) : Manifold Learning  (1) 2021.02.10
AutoEncoder (1) : Maximum likelihood 관점에서의 해석  (0) 2021.02.09
Convolutional Neural Network(CNN)  (0) 2021.01.04
Gradient Descent  (0) 2020.12.16
[ML] Support Vector Machine(SVM)  (0) 2020.08.26

댓글