[DL] 활성화 함수(Activation Function)

[DL] 활성화 함수(Activation Function)

활성화 함수(Activation Function)

(인공 신경망을 모르신다면 이 링크 먼저 보시는게 좋아요! 인공 신경망)

활성화 함수가 뭐지?

In artificial neural networks, the activation function of a node defines the output of that node given an input or set of inputs. A standard integrated circuit can be seen as a digital network of activation functions that can be "ON" (1) or "OFF" (0), depending on input. This is similar to the linear perceptron in neural networks. However, only nonlinear activation functions allow such networks to compute nontrivial problems using only a small number of nodes, and such activation functions are called nonlinearities. Wikipedia (Activation function)

활성화 함수는 각 노드에서 가중치-편향 연산을 거친 입력값을 다음 단계로 줄지 말지, 주면 어떻게 줄지 결정하는 일종의 문지기 역할을 한다.

활성화 함수의 역할은 두 가지가 있다.

1) 가중치-편향 연산의 결과값(가중합)을 그대로 내보내면 너무 크거나 작을 수 있다.

활성화 함수는 이를 0에서 1 또는 -1에서 1 사이의 값 등으로 바꿔준다(활성화 함수 유형에 따라 다름. 전부 다 상하한의 제한이 있는 것은 아님).

2) 가중치-편향 연산 결과에 비선형성을 부여한다(비선형적인 활성화 함수인 경우. 특별한 경우가 아니라면 비선형성을 가진 활성화 함수만 사용함$^*$$^1$).

활성화 함수에는 여러 유형이 있는데, 그중에서 많이 알려졌거나 주로 쓰이는 것들만 들여다 보려고 한다.

활성화 함수의 유형

1) 계단 함수(Step function)

$$\begin{cases}

0 & \text{if } x < 0\\

1 & \text{if } x \geq 0

\end{cases}

$$

이름대로 생긴 함수다.

0보다 작으면 0, 0 이상이면 1인 모 아니면 도 방식의 가장 간단한 활성화 함수이다.

문제는 인공 신경망의 학습 과정 중 역전파(backpropagation)라는 것이 있는데, 이때 활성화 함수의 미분이 필요하다.

그런데 계단 함수를 미분하니 임계값(0)에서는 미분값이 무한대가 되고 나머지는 0이다. 이는 역전파 과정에서 무의미하므로 계단 함수는 쓰이지 않는다.

2) 시그모이드 함수(Sigmoid function)

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

로지스틱 회귀에서도 사용되는 함수이다.

받아들인 값을 0 ~ 1 사이의 값으로 바꿔준다.

위의 계단 함수는 무의미한 미분 결과를 가진 것에 반해, 시그모이드 함수는 모든 $x$ 값에 대하여 미분이 가능하다(즉, 미분값(기울기)이 존재한다).

허나 이 친구도 계단 함수처럼 역전파 과정에서 문제점이 있다.

시그모이드 함수를 미분했을 때 미분값은 최대 0.25이다. 그런데 층이 여러 개라면?

2개 층이면 0.250.25=0.0625,

3개 층이면 0.250.250.25=0.015625 ...

매번 최대치로 잡는다고 해도 미분값이 훅훅 작아져버린다.

즉, 시그모이드 함수로 구성된 신경망에서 역전파 과정을 거치면 층이 갈수록 미분값이 작아져서 결국 학습이 제대로 되질 않는다(이를 기울기 소실$^$$^2$이라고 함).

이런 이유로 신경망의 은닉층에서 활성화 함수로 시그모이드를 사용하지 않는다.

대신 이진 분류 문제의 출력층에서 사용된다(예측 결과가 1일 확률을 0~1 사이의 확률값으로 표현).

3) ReLU 함수(Rectified Linear Unit function)

$$\begin{cases}0 & \text{if } x \leq 0 \\ x & \text{if } x > 0\end{cases}$$

앞의 두 친구가 역전파에서 불합격 통보를 받고 탈락했다.

그래서 나온 친구가 바로 ReLU다.

이미지에서 보이는 것처럼 0 이하의 값은 모두 0으로, 그 외에는 들어온 값 그대로 보내주는 방식이다.

미분을 해도 양수 쪽에서는 기울기가 1이므로 역전파 과정에서 시그모이드 함수처럼 신경망의 층이 갈수록 값이 소실되는 문제도 없다.

그래서 신경망의 은닉층에서 주로 사용되는 활성화 함수이다.

그러나 이 친구도 완벽하진 않다. 그래프에서 볼 수 있듯이 ReLU 함수는 신경망 학습 과정에서 양수만 보내주고 음수는 전부 0으로 처리한다. 이로 인해 음수 가중치를 가진 노드들은 싹 다 무시해버리는, 이른바 dying ReLU 문제가 있다.

그래서 이 죽어버린 아이들을 살리기 위해 아래와 같은 ReLU 변종들이 나왔다.

3-1) Leaky ReLU 함수(Leaky ReLU function)

$$\begin{cases}0.01x & \text{if } x < 0 \\ x & \text{if } x \geq 0\end{cases}$$

leaky, 즉 라면 냄비 바닥이 살짝 구멍 뚫려 국물이 조금 샌 것처럼 0 이하의 값에도 아주 약간의 기울기를 부여한 것이다.

보통의 ReLU에서 다 죽던 음수 가중치들에게 산소 호흡기를 던져준 느낌으로 보면 된다.

3-2) PReLU 함수(Parametric ReLU function)

$$\begin{cases}\alpha x & \text{if } x < 0 \\ x & \text{if } x \geq 0\end{cases}\\ \text{with parameter }\alpha \text{ }(\alpha \leq 1)$$

($\alpha$는 학습되는 값으로, 계속해서 갱신됨)

Parametric이라는 말처럼 $\alpha$라는 값을 통해 0 이하의 값에 기울기를 부여하는 것이다.

Keras에서 PReLU를 사용할 경우, $\alpha$는 스스로 학습되는 값이다. 여기에 특정한 제약 등을 적용할 수 있다.

3-3) ELU 함수(Exponential Linear Unit)

$$\begin{cases}\alpha (e^x -1) & \text{if } x \leq 0 \\ x & \text{if } x > 0\end{cases}\\ \text{with parameter } \alpha \text{ }(\alpha \geq 0)$$

($\alpha$는 학습되는 값으로, 계속해서 갱신됨)

0 이하 부분이 지수함수 형태로 되어 있는 ReLU 함수다.

PReLU와 마찬가지로 $\alpha$가 있다.

4) Softmax 함수(Softmax function)

$$

\begin{bmatrix}z_1 \\ z_2 \\ z_3 \\ \cdots \\ z_k \end{bmatrix}=>

S(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{k}{e^{z_j}}} =>

\begin{bmatrix}p_1 \\ p_2 \\ p_3 \\ \cdots \\ p_k \end{bmatrix}\\

(\text{for } i = 1, \cdots, k)

$$

여자친구가 물어본다. 오늘 저녁 뭐 먹지? 메뉴 세 가지만 말해봐 !

그럼 나는 대답한다. 치킨, 초밥, 김밥 !

그럼 여자친구는 답한다. 오늘은 김밥이다 !

소프트맥스 함수는 선택 가능한 옵션 여러 개를 받아서 각각이 최종 정답일 확률값을 내보낸다.

조금 더 구체적으로 말하면, k개의 원소를 가진 벡터(k차원 벡터)를 입력받은 후 각각에 대한 확률값을 가진 벡터를 출력한다.

확률이므로 출력된 벡터의 원소를 합하면 1이다.

위 이야기에서 치킨, 초밥, 김밥을 말했을 때 여자친구가 머릿속에서 "치킨은 30%, 초밥은 10%, 김밥은 60%"라고 생각했다고 해보자.

이를 신경망 모델에 대입해보면 각 클래스(입력 - [치킨, 초밥, 김밥])에 대한 확률값(출력)은 0.3, 0.1, 0.6이고 모델은 최종 결과로 '김밥'이라는 결과를 내보내는 것이라고 할 수 있다.

물론 신경망이 자기 스스로 생각해서 저녁에 뭐 먹을지 답을 내는 것은 아니고, 위의 소프트맥스 함수의 수식에 따라 계산값을 도출하여 답을 낸다.

이러한 특징을 갖고 있기에 소프트맥스 함수는 다중 분류 문제를 위한 신경망 학습 과정 중 출력층에서 사용된다.

*1 왜 비선형적인 활성화 함수만 사용되나? 인공 신경망의 학습 과정에서 가중치-편향 연산만 수행하게 될 경우 각각의 노드의 결과값은 Wx+b 형태가 된다(W : 가중치 행렬 / x : 입력값 / b : 편향).

만약 신경망의 층이 아무리 여러 겹으로 쌓인다 하여도 활성화 함수에서 비선형성을 부여하지 않으면 결국은 직선 형태에서 벗어나질 못한다. $l(x) = ax+b$ 라고 하면

$$l(l(l(x))) = l^3(x) \\= a(a(ax+b)+b)+b \\= a^3x+a^2b+ab+b$$

$a^3=c$, $a^2b+ab+b=d$라고 하면

$l^3(x) = cx+d$, 직선이다. 3겹이든, 페스츄리 겹겹이 만큼이든. 이렇게 되면 여러 층을 쌓는 이점도 상실될 뿐만 아니라 XOR 등의 복잡한 문제 해결이 불가능해진다.

이런 이유로 인해 비선형적인 활성화 함수를 통해서 가중치-편향 연산 결과에 비선형성을 부여하는 것이다.

*2 기울기 소실 인공 신경망 학습 과정 중 역전파에서는 활성화 함수의 미분값을 매 층마다 곱하게 된다. 그런데 이 미분값이 1 미만의 소수인 경우, 여러 번 곱해지다보면 0으로 수렴하여 신경망의 학습이 제대로 이루어질 수가 없다.

위 그래프는 시그모이드 함수를 미분한 함수의 그래프이다. 보이는 것처럼 최댓값이 0.25이다.

이 상태로는 층이 많아지면 많아질수록 역전파를 거치면서 기울기 값이 0을 향해 낙하하므로 시그모이드 함수를 은닉층의 활성화 함수로는 사용할 수가 없는 것이다. (참고 : 시그모이드 함수를 $f(x)$라고 하면

$$f'(x) = f(x)(1-f(x))$$이다.

$x=0$일 때 기울기가 최대이므로 $$f'(0) = \frac{1}{2}*(1-\frac{1}{2}) = 0.25$$이다.)

<참고 자료>

from http://seahahn.tistory.com/97 by ccl(A) rewrite - 2021-12-23 21:26:23