logistic regression에서 linear transformation 결과에 적용한 non-linear transformation인 sigmoid
함수가 activation function에 해당된다.
activation function은 미분만 가능하다면, 즉 gradient 계산만 가능하다면 어떤 non-linear function도 사용가능하다. 근래에 sigmoid
함수는 주로 output layer에만 사용되고 hidden layer에서는 사용되지 않는 추세이다.
sigmoid
는 [0,1]
범위에 a
를 분포시킨다.
하지만 exponent가 있기 때문에 계산하는데에 시간이 오래걸리고 z
의 값이 커지면 gradient가 매우 작아지는 vanishing gradient 문제가 있으며 sigmoid
의 결과는 zero-centered가 아닌 단점이 있다.
sigmoid
를 통과한 output은 zero-output이 아니라 전부 positive이기 때문에 생기는 문제점은 다음과 같다.
sigmoid
를 통과하여 나온 x
가 전부 양수가 되면서 모든 dLoss/dw
의 부호가 dLoss/df
의 부호에 따라 정해지게 된다.
f
가 scalar이기 때문에 dLoss/df
도 항상 하나의 scalar값으로 결정되면서 모든 dLoss/dw
가 양수 혹은 음수의 하나의 부호만 갖게 된다. w
가 1000개든 100000개든 전부 같은 부호를 갖는 것이다. 이렇게 값들이 극단적으로 나오면서 아래와 같이 지그재그형식으로 learning을 하게 된다.
이 점이 굉장히 비효율적이기 때문에 sigmoid
는 output layer가 아닌 hidden layer에서는 거의 쓰이지 않는다.
tanh
는 수학적으로 sigmoid
가 shift된 function이다. tanh
는 output이 [-1,1]
안으로 나오기 때문에 zero-centered이고, zig-zag dynamic이 없다. 그렇기에 tanh
는 보통 sigmoid
보다 항상 더 좋은 결과를 낸다고 알려져있다(make learning easier).
하지만 exponent가 4개이기 때문에 시간이 오래걸리는, expensive한 방법이다.
또한 그래프 양 끝의 기울기가 0에 수렴하기 때문에 입력이 엄청나게 크거나 작으면 gradient의 값이 너무 작아 gradient를 거의 update하지 못하기 때문에 gradient descent의 의미가 없다. 이것을 vanishing gradient라고 한다.
ReLU
는 most common activation function이다. 음수 값은 전부 0으로 만들고 음수가 아니라면 자기 자신의 값이 그대로 나온다. 하지만 ReLU
도 z
가 음수일 때 vanishing gradient문제가 있다.
ReLU
를 activation function으로 사용하는 이유는 쓸모있는 신호만 남겨두고 나머지 신호는 제외하기 위해서이다. ReLU
를 통과하면 상대적으로 중요한 정보만 남게 된다. 즉, ReLU
를 이용하면 좋은 신호는 양수로 보내고 안좋은 신호는 음수로 보내는 W
와 b
를 learning하게 된다.
ReLU
를 사용할 때 z=0
인 부분에서는 미분을 할 수 없지만 그 때에는 미분값이 0이라고 가정하고 사용한다.
ReLU
는 zero-centered가 아니기 때문에 지그재그 문제를 어느정도 가지고 있지만 계산이 엄청나게 빠르고 확실하게 필요없는 정보를 차단할 수 있기 때문에 자주 사용된다.
함수마다 장단점이 있고 막상 써보기 전까지는 좋을지 안좋을지 알 수 없지만 ReLU
는 많은 경우에 좋다고 알려져 있다.
ReLU
의 vanishing gradient문제를 해결하기 위해 고안된 activation function이다. Leaky ReLU
의 경우에는 모든 경우에 gradient가 있기 때문에 vanishing gradient문제가 없다.
굉장히 빠르고 우수하다고 알려져있지만 사람들은 관례를 따라 ReLU
를 사용하는 경향이 있다. 그런 경우들은 대부분 ReLU
를 Leaky ReLU
로 대체하였을 때 더 좋은 성능을 낸다.
PReLU
는 α
가 0.01이 되면 Leaky ReLU
와 동일해진다.
PReLU
는 α
를 하나의 training해야하는 변수로 놓고 α
도 training을 한다. 따라서 expensive하지만 결과가 좋은 축에 속한다.
Leaky ReLU
의 general한 버전으로, α
를 unknown variable로 두고 이 값도 같이 찾아서 dLoss/dα
를 구할 수 있다.
ELU
는 ReLU
의 모든 장점을 가지고 있다.
Leaky ReLU
의 경우 vanishing gradient문제를 피하기 위해서 모든 값이 gradient를 갖기 때문에 완벽하게 이상한 값이 들어왔을 때 완벽하게 쳐내지 못한다는 단점이 있다. Leaky ReLU
의 경우 -1000이 들어오면 -10은 없애지 못하고 남게 된다. 그런 점이 싫어서 엄청나게 이상한 값이 들어왔을 때 쳐낼 수 있도록 고안된 함수이다.
vanishing gradient문제가 있고 좋다고 알려져 있지만 잘 사용되지는 않는다. exponent로 인해 expensive한 편이다.
activation function으로 linear function을 사용했다고 가정해보자.
linear function으로 activation function을 사용하면 final output이 단순한 linear 형태가 된다.
그렇기 때문에 결론적으로 neural network가 10층이든 100층이든 input에 대해 딱 한 번 linear transformation한 것과 같은 결과가 나오기 때문에 deep neural network를 사용하는 의미가 없어진다.