nonlinear(비선형)한 데이터 패턴을 학습할 수 있게 해주는 key component이다.
우리가 지금까지는 input과 output이 linear한 관계일 때를 분석해보았지만 이제는 input데이터에 weight파라미터를 곱한것을 다 더한 다음에 activation function에 넣고 output을 출력한다.
하는 일
어떤 threshold를 넘으면 active가 되고 threshold를 넘지 못하면 output으로 전달되지 않게 하는 역할을 한다.
종류
이중에서 상황에 맞게 다양하게 활성화 함수를 선택할 수 있다.
1. sigmoid
input이 들어오면 0과 1사이의 값으로 내보내고, exponential한 함수이다.
옛날에 가장 많이 사용되었던 함수이다.
이미지 분류같은 것을 할 때 output이 확률분포로 나오게 하기 위해서 sigmoid를 썼다
sigmoid의 단점
1) vanishing gradient: input이 크거나 작을 때 기울기가 0에 점점 가까워진다. 점점 학습이 되지 않는다. local gradient가 거의 대부분 0이라서 loss가 역전파를 하지 않는다.
2) 출력값들이 zero-centered하지 않고, exp() 연산이 비싸다.
왜 zeor-centered 하지 않으면 문제가 생길까?
입력값이 모두 양수라면 출력값도 항상 양수일 것이다. 그렇게 되면 모든 w에 대한 upstream 그레디언트의 부호가 변하지 않는다.(모두 양수 or 음수) 특정 방향으로만 업데이트가 된다. 그래서 기울기,방향을 알기 위해서 지그재그로 움직이여야 한다.
실제로 현업에서도 sigmoid를 사용하지 않는다.

2. Tanh
tanh는 sigmoid를 아래로 한칸 내린거라고 생각해도 된다. output의 값이 1과 -1사이의 값으로 나온다.
sigmoid를 살짝 보안한 형태이다. sigmoid형태를 갖고 있으나 zero-centered된 형태이다.
하지만 이것 또한 vanishing gradient문제가 발생한다.

3. ReLu
0보다 작으면 다 0으로 보내고 0보다 크면 input값을 그대로 output해준다. max(0,x)
이 3가지 함수중에 제일 자주 사용된다.
vanishing gradient 문제를 해결하였고, sigmoid나 tanh보다 빠르게 수렴한다.
이것의 단점은
sigmoid처럼 zero-centered되지 않는다.
Dead ReLu problem(출력값이 음수면 다 없애버림)이 발생한다.
또한 x=0일때 미분이 불가능하다.

4. Leaky ReLu
ReLu를 개선한 함수로 모든 값이 0이 되버리는 것을 해결하고, Dead ReLu problem도 해결했다.
하나의 단점이라고 한다면 음수쪽의 추가적인 하이퍼 파라미터가 존재한다는 점이 있다.

5. ELU
새로운 ReLU의 개선된 버전인데, ReLu와 비슷한데 ReLu의 음수 부분에 기울기가 아래 그림과 같이 변하도록 설정하는 것이다.
exp() 연산이 비싸다는 단점이 있다.

결론
vanishing gradient 때문에 sigmoid와 tanh는 거의 사용하지 않는다. 마지막 layer 정도에서 간간히 사용되고, 거의 대부분은 중간중간 ReLu를 활성화 함수로 사용한다.