top of page

[딥러닝] Activation Functions

  • 작성자 사진: Minwu Kim
    Minwu Kim
  • 2024년 3월 24일
  • 3분 분량

최종 수정일: 2024년 9월 21일

1.활성화 함수가 필요한 이유

ree

뉴럴네트워크의 구조를 살펴보면, 하나의 perceptron마다 활성화 함수에 값을 집어넣는다. 이에 대해 직관적인 이유, 그리고 수학적인 해석, 이 두가지를 짚고 넘어갈 필요가 있다.


첫째로, 직관적으로 해석하자면, 뉴럴네트워크는 생물들의 뇌의 뉴런들이 작동하는 방식을 모방한 것이다. 하지만 그러면서도, 사실 값 하나를 임계점을 넘으면 카운트하고, 넘지 못하면 뮤트하는 것이 무슨 큰 의미가 싶기도 할 것이다 (step function 기준).


그래서, 둘째로, 수학적으로 해석하자면 활성화함수는 non-linearity를 추가해줄 수 있다. 레이어 사이에 활성화 함수가 없다면 비선형성을 넣을 수가 없으며, 고로 데이터의 복잡한 성질을 학습할 수 없다.


아래 예시를 보자. 아주 간단한 2-2-1 형태의 뉴럴네트워크이다. 결국 선형적이라는 것을 파악할 수 있다.

ree

고로 중간에 비선형적인 활성화 함수를 추가해 주는 것이다.

추가로, 예전에 AI 윈터를 야기한 이야기가 바로 "인공신경망은 XOR 문제를 해결할 수 없다"는 것이었다. Non-linearity가 없었기 때문이다.

ree

하지만 해당 문제 역시 비선형적인 활성화함수가 있다면 극복이 가능하다.



2. 가장 원류인 step function, 그리고 그것을 쓸 수 없는 이유.

앞서 얘기했듯, 활성화 함수는 뉴런의 작동 방식을 모방한 것이다. 특정 임계점 (0)이 넘어가면 신호를 보내고, 그렇지 않으면 신호를 차단하는 방식이다. 이 아이디어를 가장 직관적으로 옮긴 것이 바로 아래와 같은 step function이다.


ree

하지만 step function은 사용할 수 없다. 역전파를 위해선 미분이 가능해야 하는데, step function의 경우 모든 구간에서 기울기가 0이다. 그래서 과학자들은 다른 activation function들을 고안했다.



3. 여러가지 activation functions


A. Sigmoid function

ree

첫째로는 sigmoid이다. Logistic regression에서 쓰는 함수이기도 하다. 하지만 활성화 함수로는 잘 쓰이지 않는다. 아래 세가지 문제 때문이다:


첫째는 gradient vanishing 문제이다. 아래 도표에 보이듯, sigmoid의 최대 기울기는 약 0.25 정도 밖에 안 되며, 양 끝으로 갈수록 0에 가까워진다. 이 탓에 특히 후반부로 갈수록 학습이 지지부진해진다.

ree

둘째는 zero-centered 하지 않다는 것이다. Neural networks에서 input은 이전 layer의 결과값이라고 생각하면 된다. 그런데 sigmoid 함수는 항상 양수이기에 sigmoid를 한번 거친 이후론 input 값은 항상 양수가 된다. 그렇게 되면 backpropagation을 할 때 문제가 생긴다. Backpropagation을 할 때 ∂w/​∂L​ = ∂f/L​ × ∂w/∂f​ 식을 거친다. 이때 ∂w / f​ = xi​이므로 ∂w/​∂L​=∂f/L​×xi​가 된다. 그런데 input 값인 xi​는 항상 양수이기에 ∂w/L​와 ∂f/L​의 부호는 같을 수 밖에 없다.

아래의 2차원 평면에서 살펴보면 부호가 모두 같은 지점은 1,3 사분면 뿐이다. 따라서 지그재그의 형태로 학습이 될 수 밖에 없고 이는 학습을 오래 걸리게 한다.

ree

셋째는, 다소 마이너한데, 다른 방법론에 비해 exponential의 계산 상대적으로 좀 비싸다는 문제가 있다.


B.tanh(x)

Sigmoid의 not zero-centered 문제를 해결한 버전이다. 하지만 여전히 양 쪽으로 saturate시 gradient vanishing 문제가 존재한다.

ree

C. ReLU

ree

제프리힌튼이 고안했으며, 가장 많이 사용되는 함수이기도 한 ReLU이다. ReLU는 x가 양수인 지점에 한해서 saturate 문제에서 벗어난다. 또한 단순히 max 함수를 이용하기 때문에 계산이 매우 빠르다는 장점이 있다.

다만 여전히 함숫값은 모두 양수이기 때문에 output이 zero-centered 하지 못 하다는 단점이 있으며 x가 음수인 지역에서는 saturated 하기에 학습 시 gradient를 죽이게 되는 문제가 있다.

또한 learning rate을 너무 크게 잡으면 data cloud 밖에서 activate 되는 문제가 발생하는데 이를 dead ReLU라고 부르며 이러한 경우에는 다시 활성화되지 못 해서 update가 더 이상 진행되지 않는다는 치명적인 문제가 발생한다. (아직 이해 못함.) 따라서 ReLU를 사용할 땐 learning rate를 작은 값으로 초기화 해야 한다. 일반적으로 0.01이다.

ree

D. Leaky ReLU & PReLU

ree

ReLU가 x가 음수인 지역에서 saturate 되는 문제를 해결한 함수이다.

여기서 왜 현업에서 Leaky ReLU나 PReLU를 잘 안 쓰는지 궁금해졌다. 그래서 찾아봤더니 이런 답을 얻었다:

Slope parameter (usually called 𝛼), if mistuned can lead to worst performance, but one can try the PReLU that learns it.

결국 음수 쪽의 하이퍼파라미터가 존재한다는 문제다.


E. ELU

ree

비슷하다. 여기서 robustness에 관해 살펴보니 이런 답을 얻었다:

The "negative saturation regime" refers to the behavior of these functions for negative input values. For Leaky ReLU, negative inputs result in outputs that are directly proportional to the inputs, scaled down by the small constant α. For ELU, negative inputs lead to outputs that asymptotically approach the negative α value without ever reaching it, due to the exponential decay.

즉, negative regime에서 leakyRelu와 달리 ELU의 gradient는 converge를 하기에 오버슈팅 위험이 없다는 것이다. 하지만 그 댓가로 비싼 exponential을 써야한다는 단점이 있다.


F. softmax

Softmax는 아웃풋 레이어에서 사용되며, 그 중 0-1사이의 확률값으로 변환시 사용된다.

 
 
 

댓글


bottom of page