Activation Function(활성화 함수)

Hun·2023년 5월 28일
0

참고 자료

https://nittaku.tistory.com/267
https://inhovation97.tistory.com/23
https://www.youtube.com/watch?v=wEoyxE0GP2M&list=PLC1qU-LWwrF64f4QKQT-Vg5Wr4qEE1Zxk&index=6


Activation Function(활성화 함수)이란?

활성화 함수 출처 : cs231n

Activation function은 딥러닝을 학습하는데 비선형성을 더해주는 역할을 한다.
비선형성을 더해줌으로써, 더욱 더 복잡한 모델을 만들고 좋은 성능을 나타낼 수 있다고 한다. 단순히, 선형적으로 layer를 쌓는다면 결국은 그건 하나의 single layer로 표현할 수 있기에 비선형성의 중요성이 크다고 말할 수가 있다.



활성화 함수 종류

활성화 함수 종류 출처 : cs231n

Sigmoid

Sigmoid 출처 : cs231n

앞선 노드에서 나온 값에 Sigmoid를 적용하면 그 값은 0과 1 사이의 값을 갖게 된다. Sigmoid 는 학습과정에서 2가지 역할로 쓰일 수 있다. Activation function으로 사용할 때는 각층의 Layer마다 들어가서, 모델의 복잡도를 높인다.또 하나는 Output function으로 사용된다.
Sigmoid를 Activation Function으로 사용하면 몇가지의 문제점이 발생한다.
위의 사진을 보면 gradient가 saturation 되는 현상을 볼 수가 있다. saturation이 발생하게 되면 w는 더이상 학습하는 동안 업데이트가 되지 않는다.

z1=W1X+b1a1=sigmoid(z1)z2=W2a1+b2z_1 = W_1 X + b_1 \\ a_1 = sigmoid(z_1) \\ z_2 = W_2 a_1 + b_2

여기서 gradient를 살펴본다면

dLdW2=dLda2da2dz2dz2dW2{dL \above{1px}dW_2}= {{dL \above{1px}da_2}{da_2 \above{1px}dz_2} {dz_2\above{1px}dW_2}}

saturation이 일어나면 da2dz2=0{da_2\above{1px} dz_2}=0 이 된다는 뜻이다.

dLdW2=0W2=W2λdLdW2{dL\above{1px}dW_2} =0 \rightarrow W_2 = W_2-\lambda {dL\above{1px}dW_2}

뒤 쪽의 Layer가 Saturation 되고 앞의 모든 Layer도 saturation되어 w의 업데이트가 중지된다. saturation현상을 포함해서 w의 업데이트가 0이 되는 현상을 모두 일컬어 vanishing gradient라고 한다.
또 다른 sigmoid의 단점은 sigmoid의 결과값이 0~1사이로 나오게 된다는 것이다. sigmoid의 gradient는 0~0.25사이이다. 그 결과, W2W_2의 업데이트량은 하나의 부호로 결정된다.

a2=sigmoid(z2)dLda2=[++++]or[]a_2 = sigmoid(z_2)\\ {dL\above{1px}da_2} =\begin{bmatrix} + & + \\ + & + \end{bmatrix} or \begin{bmatrix} - & - \\ - & - \end{bmatrix}

W의 업데이트 그래프 출처: cs231n

위의 그림은 W1,W2W_1, W_2를 축으로 한 그래프다. 파란색 선이 제대로 학습할 수 있는 방향인데 업데이트량이 항상 같은 부호이면, 지그재그 현상이 발생한다. 그로 인해, 업데이트 속도가 느려진다. 그리고 마지막으로 exp연산은 연산시간이 오래걸리게 된다.

  1. Vanishing gradient
  2. zero-centered의 문제
  3. exp의 연산이 있는 문제

이로 인해, sigmoid는 activation 함수로 잘 사용되지 않는다.

tanh

tanh 출처 : cs231n

output이 [-1,1]이어서, (-)와 (+)가 나오는 비중이 비슷해 지그재그 현상이 덜하다. 그러나 여전히 Vanishing gradient의 문제가 발생한다.

ReLU

ReLU 출처 : cs231n

saturation이 일어나는 부분이 한 곳으로 줄었다. 또한, exp연산 없이 단순하고 빠르다. loss수렴 속도가 sigmoid와 tanh보다 6배 가까이 빠르다. 그래도 음의 부분을 전부 0으로 두기 때문에 vanishing gradient, zero-centered output의 문제가 남아있기는 하다.

Leaky ReLU

Leaky ReLU 출처 : cs231n

(-)영역에도 경미하게 기울기를 주어 vanishing gradient를 해결하였다.

ELU

tanh 출처 : cs231n

ELU는 0에서의 미분 불가점을 미분가능하게 하였다. 이 함수는 Leaky ReLU와 비교했을 때, 노이즈에 대해서 강건하다고 한다. 아마 0에서 미분가능한 점이 그런것 같다. 또한 zero mean의 output을 출력한다. 그러나 다시 (-)부분에서 기울기가 소실이 되고, exp연산으로 연산이 복잡해지는 단점이 있다.

결론

데이터에 따라서 어떤 activation function을 쓸지 정하는데, 웬만해서 ReLU를 쓰는 것 같다.

0개의 댓글