12일차 [ Activation Function ] - votus777/AI_study GitHub Wiki
활성함수
-
입력값이 특정 뉴런에서 처리되어 결과값을 생성할때 적용되는 함수
DNN모델이 비선형성을 표현할 수 있게 도와준다, 회귀분석에서는 실수값, 이진 분류 모델에서는 0 혹은 1을 내뱉는다 -
입력신호를 받아 임계치(threshold)를 넘어서는 경우에만 출력 신호를 생성
-
이전 레이어의 모든 입력에 대한 가중 합을 취하고 출력 값(일반적으로 비선형)을 생성하여 다음 레이어로 전달하는 함수
- Sigmoid (로지스틱 함수)
활성화 함수로 입력되는 값을 0과 1사이의 값으로 출력시킨다.
출력값이 특정 임계값(예를 들어 0.5) 이상이면 양성, 이하이면 음성이라고 판별할 수 있기 때문에
이진분류 모델의 출력층에 주로 사용된다.
그런데 매우 크거나 작은 입력값의 경우 기울기가 0에 수렴 해버린다. (Vanishing gradient)
또한 함수의 중심값이 0에 수렴하지 않기 때문에 한 노드는 계속 같은 방향으로만 업데이트를 하게 되어 학습이 지그재그 형식으로 나가서 학습 속도가 느려질 수 있다.
- tanh
함수의 중심값을 0으로 옮겨 학습 속도 문제를 해결했지만
여전히 Vanishing gradient 문제가 남아있다.
- ReLU (Rectified Linear Unit)
f(x) = max(0,x)
x>0 이면 기울기가 1인 직선이고, x<0이면 함수값이 0이 된다.
sigmoid, tanh 함수와 비교시 학습이 훨씬 빨라진다.
연산 비용이 크지않고, 구현이 매우 간단하다.
x<0인 값들에 대해서는 기울기가 0이기 때문에 뉴런이 죽을 수 있는 단점이 존재한다.
- ELU
ReLU의 모든 장점을 포함한다.
“Dying ReLU” 문제를 해결했다.
출력값이 거의 zero-centered에 가깝다
일반적인 ReLU와 달리 exp함수를 계산하는 비용이 발생한다.
- LEaky ReLU
x값이 음수일 때 입력값의 10분의 1만 출력하는 ReLU
즉, 음수의 x 값에 대해 죽는 뉴런이 발생하지 않는다
- Maxout
모든 장점을 가졌지만 계산량이 복잡함
- Softmax
활성화 함수로 입력되는 값을 클래스별로 확률 값이 나오도록 출력.
이 확률값을 모두 더하면 1이 된다. 다중클래스 모델의 출력층에 주로 사용되며,
확률값이 가장 높은 클래스가 모델이 분류한 클래스.
실수로 구성된 벡터를 확률로 구성된 벡터로 변환해준다.
Reference
- https://reniew.github.io/12/
- 'Deep learning with Tensorflow and kears' 2020