12일차 [ Activation Function ] - votus777/AI_study GitHub Wiki


활성함수

  • 입력값이 특정 뉴런에서 처리되어 결과값을 생성할때 적용되는 함수
    DNN모델이 비선형성을 표현할 수 있게 도와준다, 회귀분석에서는 실수값, 이진 분류 모델에서는 0 혹은 1을 내뱉는다

  • 입력신호를 받아 임계치(threshold)를 넘어서는 경우에만 출력 신호를 생성

  • 이전 레이어의 모든 입력에 대한 가중 합을 취하고 출력 값(일반적으로 비선형)을 생성하여 다음 레이어로 전달하는 함수


  1. Sigmoid (로지스틱 함수)

활성화 함수로 입력되는 값을 0과 1사이의 값으로 출력시킨다.
출력값이 특정 임계값(예를 들어 0.5) 이상이면 양성, 이하이면 음성이라고 판별할 수 있기 때문에 이진분류 모델의 출력층에 주로 사용된다.

그런데 매우 크거나 작은 입력값의 경우 기울기가 0에 수렴 해버린다. (Vanishing gradient)

또한 함수의 중심값이 0에 수렴하지 않기 때문에 한 노드는 계속 같은 방향으로만 업데이트를 하게 되어 학습이 지그재그 형식으로 나가서 학습 속도가 느려질 수 있다.

  1. tanh

함수의 중심값을 0으로 옮겨 학습 속도 문제를 해결했지만

여전히 Vanishing gradient 문제가 남아있다.

  1. ReLU (Rectified Linear Unit)

f(x) = max(0,x)

x>0 이면 기울기가 1인 직선이고, x<0이면 함수값이 0이 된다.
sigmoid, tanh 함수와 비교시 학습이 훨씬 빨라진다.
연산 비용이 크지않고, 구현이 매우 간단하다.
x<0인 값들에 대해서는 기울기가 0이기 때문에 뉴런이 죽을 수 있는 단점이 존재한다.

  1. ELU

ReLU의 모든 장점을 포함한다.
“Dying ReLU” 문제를 해결했다.
출력값이 거의 zero-centered에 가깝다
일반적인 ReLU와 달리 exp함수를 계산하는 비용이 발생한다.

  1. LEaky ReLU

x값이 음수일 때 입력값의 10분의 1만 출력하는 ReLU
즉, 음수의 x 값에 대해 죽는 뉴런이 발생하지 않는다

  1. Maxout

모든 장점을 가졌지만 계산량이 복잡함

  1. Softmax

활성화 함수로 입력되는 값을 클래스별로 확률 값이 나오도록 출력.
이 확률값을 모두 더하면 1이 된다. 다중클래스 모델의 출력층에 주로 사용되며,
확률값이 가장 높은 클래스가 모델이 분류한 클래스.

실수로 구성된 벡터를 확률로 구성된 벡터로 변환해준다.

Reference