입력 신호의 총합이 활성화를 일으키는지 정하는 역할을 하는 함수로 input과 weight의 내적 값에 bias를 더한 값을 얼마나 출력시킬지 정하기 위해 사용한다.
Sigmoid
특징
•
입력을 받아서 그 입력을 [0, 1] 사이의 값이 되도록 변경한다.
•
입력의 값이 크면 Sigmoid의 출력은 1에 가까울 것이고 값이 작으면 0에 가깝게 출력된다.
•
0 근처 구간(rigime)을 보면 선형함수 같은 형태를 띈다.
문제점
Vanishing Gradient
입력값이 너무 작거나, 크면 미분한 값이 0에 가까워져 gradient 가 소멸하게 된다.
위의 그래프를 보면 x가 -10, 10일 때 기울기가 0에 가까워짐을 확인 할 수 있다. 이는 Backpropagation을 할때 0에 가까운 값이 계속해서 곱해지게 되고 해당 gradient를 죽이는 결과가 나타난다.
not zero-centered
input이 sigmoid 연산을 거치기 때문에 항상 양수의 값으로 들어온다. 이 때 gradient의 값은 input값과 미분 값의 곱셈으로 나타나기 때문에 항상 양수이거나 항상 음수를 갖게 된다.
결국 가중치가 모두 같은 방향으로만 움직이게 되고 파라미터를 업데이트 할 때 다 같이 증가하거나 다 같이 감소하거나 할 수밖에 없어 gradient 업데이트는 매우 비효율적인 과정을 갖는다.
exp()로 인한 큰 계산비용
Tanh
특징
•
범위가 [-1 , 1]인 출력값을 갖는다.
•
함수값이 zero-centered 되어있다.
•
saturation 때문에 여전히 gradient를 죽이는 현상이 나타나게 된다.
ReLU
특징
•
element-wise 연산을 수행하며 입력이 음수면 값이 0, 양수면 입력 값 그대로를 출력
•
양의 값에서는 saturetion되지 않는다
→ 절반은 saturation 되지 않는다
→ 양의 값에서 Vanishing Gradient 문제 해결
•
계산 효율이 아주 뛰어남
문제점
•
not zero-centered
양의 수에서는 saturation 되지 않지만 음의 경우에서는 그렇지 않기 때문에 dead ReLU 라는 현상이 발생한다.
•
이하의 값들 미사용
dead ReLU 발생 이유
•
초기화를 잘 못한 경우
가중치 평면이 data cloud에서 멀리 떨어져 있어 어떤 데이터 입력에서도 activate 되는 경우가 존재하지 않을 것이고 backporp이 일어나지 않게 된다. 이런 경우 update되지도 activate되지도 않아 dead ReLU가 발생한다.
•
Leraning rate가 지나치게 높은 경우
update를 지나치게 크게 해 버려 가중치가 날뛴다면 ReLU 가 데이터의 manifold를 벗어나게 되어 처음에는 학습이 잘 되다가 갑자기 죽어버리는 경우가 생긴다.
leaky ReLU
특징
•
negative에도 기울기를 살짝 주게 되어 ReLU의
문제를 상당 부분 해결한 함수이다.
•
negative space 에서도 saturation 되지 않는다.
•
sigmoid 나 tanh보다 수렴을 빨리 할 수 있다.
•
dead ReLU 현상도 발생하지 않는다.
PReLU
특징
•
negative space에 기울기가 있다는 점에서 Leaky ReLU와 유사하다.
•
Leaky ReLU가 0.01을 곱해서 dying을 방지했다면, PReLU는 alpha를 곱해서 사용한다.
•
기울기가 alpha 라는 파라미터로 결정된다.
•
alpha는 backpro으로 학습시키는 파라미터로 만들며 활성함수가 조금 더 유연해 질 수 있다.
ELU
특징
•
zero-mean 에 가까운 출력값을 갖는다.
•
negative에서 기울기를 가지는 것 대신에
또다시 saturation 문제 발생하게 된다.
•
하지만 saturation이 noise에 강한 모습을 보인다고 주장한다.
Maxout Neuron
특징
•
w1에 x를 내적한 값 + b1과 w2에 x를 내적한 값 + b2 의 최댓값을 사용
→ 기본형식을 미리 정의하지 않는다.
•
선형이기때문에 saturation 되지 않으며 gradient가 죽지 않는다.
•
뉴런당 파라미터의 수가 두배가 되어 연산량이 증가하는 단점이 있다.