Activation Function(활성화 함수)
Opened this issue · 3 comments
Activation Function(활성화 함수)
활성화 함수는 신경학적으로 뉴런 발사의 과정에 해당한다. 뉴런이 다음 뉴런으로 신호를 보낼 때 입력 신호가 일정 기준 이상이라면 보내고 기준에 달하지 못하면 보내지 않는다. 즉, 신호를 결정해준다.그림에서는 Sigmoid 함수가 활성화 함수로 사용되었다.
모델 Optimizer 과정에서 gradient update를 통해 weight를 갱신하게 된다. backpropagation이 weight 값을 갱신할 때 각 노드에서의 편미분 값을 이용하게 되기 때문에 신경망의 활성 함수는 미분이 가능한 함수로 사용한다.
-
Sigmoid
단일 퍼셉트론에 사용했던 활성함수이다. 입력을 0과 1 사이로 정규화 한다. Backpropagation 단계에서 NN layer를 거칠 때 마다 작은 미분 값이 곱해져 Gradient Vanishing을 야기하기 때문에 DNN에서는 사용을 잘 하지 않는다.
참고하면 좋은 유튜브
-
ReLU (Rectified Linear Unit)
미분 값을 0 또는 1의 값을 가지기 때문에 Gradient Vanishing 문제가 발생하지 않는다.
Linear Function과 같은 문제는 발생하지 않으며, 엄연히 Non-Linear함수 이므로 Layer를
deep하게 쌓을 수 있다.
exp() 함수를 실행하지 않아 sigmoid함수나 tanh함수보다 6배 정도 빠르게 학습이 진행된다.
-
Leaky ReLU
0보다 작은 구간을 모두 0을 출력하는 “dying ReLU” 현상을 해결하기 위해 제시된 함수이다.
ReLU는 x<0인 경우 함수 값이 0이지만, Leaky ReLU는 작은 기울기를 부여한다. 보통 작은 기울기는 0.01을 사용한다.
Leaky ReLU로 성능향상이 발생했다는 보고가 있으나 항상 그렇지는 않다고 한다.
이 외에도 ELU, Maxout, GELU등 여러가지 활성함수들이 있습니다.
출처 : 교수님 유튜브 강의
좀 더 깊이있게 이해하기 위해서 출처의 교수님 강의와
링크1, 링크2를 보시는 것을 추천 드립니다.
<개인적으로 궁금한 부분>
Sigmoid에서는 기울기가 0 ~ 0.25 입니다.
backpropagation을 진행할 때 gradient가 0이나 0에 수렴하게 되면서 소실되는 현상이 발생합니다.
그래서 나온 것이 ReLU(기울기 0 또는 1)입니다.
하지만 미분 값이 0 일때는 신경이 죽어버리는 현상이 발생한다고 합니다.
그런데 Gradient Vanishing이 발생하지 않았다고 하는 이유는 무엇일까요 ..?
다른 글을 읽다 보면 loss 함수와 Activation 함수가 같게 느껴지도록 이해가 되서 생기는 문제인 것 같습니다. 혹시 정확히 아시는 분은 issue 남겨주세요 ! ㅠㅠ
relu가 잘 먹히는 이유는 sigmoid에서는 이정민님 말대로 0~0.25라 곱할수록 0으로 수렴하거든요.
gradient vanishing 은 gradient가 0으로 가야 신경이 죽는데 gradient가 0으로 갈일이 없어서 vanishing 이 발생하지 않습니다. value에 따라 역전파에 넘겨지는 값이 0아니면 1이니까요.
https://www.quora.com/How-does-the-ReLu-solve-the-vanishing-gradient-problem
ctrl+f 해서 joe siu 글 한번 읽어보시겠어요?
https://analysisbugs.tistory.com/55
참고하세요 :)