자바스크립트가 비활성화 되어있습니다.
자바스크립트가 활성화 되어야 콘텐츠가 깨지지 않고 보이게 됩니다.
자바스크립트를 사용할수 있도록 옵션을 변경해 주세요.
- willbsoon

본문 바로가기
Bigdata, AI

딥러닝 활성화 함수 정리

by willbsoon 2020. 11. 23.

1. 딥러닝 기초!

딥러닝을 공부하다보면 자주 접하게 되는 활성화 함수(Activation Function)를 이번에는 알아보자. 딥러닝 네트워크에서는 노드에 들어오는 값들에 대해 곧바로 다음 레이어로 전달하지 않고 주로 비선형 함수들을 통과시킨 후 전달하게 된다. 이 때 사용하는 함수를 활성화 함수라고 부른다.

 

선형 함수를 사용하게 되면 층을 깊게하는 의미가 줄어들기 때문!

그렇다면 주로 비선형 함수를 사용하는 활성화함수에 무엇무엇이 있는지 정리를 해보자.

 

출처 : https://adioshun.gitbook.io/deep-learning/fundemental/activation-function

 

2. 활성화함수의 종류

 

 1) 시그모이드 함수(Sigmoid function)

시그모이드함수를 Logistic 함수라 불리기도 하는데 선형인 멀티 퍼셉트론에서 비선형값을 얻기 위해 사용하기 시작했다. 시그모이드 함수는 필요에 따라 여러 종류로 변형되어 사용되기도 한다. 

 

 

특징들을 살펴보자면

  • 함수값이 0~1 로 제한이 된다.
  • 중간값은 1/2이다.
  • 매우 큰 값을 가지면 함수값은 거의 1 이며, 매우 작은값을 가지면 거의 0 이다.

하지만 최근에는 시그모이드 함수의 단점들이 부각되는데 어떤점이있는지 보자면

  • 기울기 소실문제가 발생한다.  미분함수에 대해 x=0에서 최대값 1/4 을 가지고, input 값이 일정이상 올라가면 미분값이 거의 0에 수렴하게 된다. 이는 x의 값이 커질수록 역전파할때 미분값이 소실될 가능성이 크다.
  • 함수값의 중심이 0이 아니다. 중심이 0이 아니라면 학습 속도가 느려진다. 예를 들어 input값이 같은 부호를 가지고있을때 가중치의 미분값은 결국 모두 같은 부호를 만들게 된다. 이러면 같은방향으로 update 되는데 이때 학습과정은 지그재그로 학습하게되어 속도를 낮게 만드는 원인이 된다.
  • exp함수를 사용하면 비용이 크다.

 

이렇다보니 최근에는 자주 사용하지 않는다.

 

 

2) 하이퍼볼릭 탄젠트 함수(Hyperbolic tangent function)

쌍곡선 함수중 하나인 하이퍼볼릭탄젠트 함수는 시그모이드함수를 transformation 해서 얻을수 있다. 함수의 정의는 다음과 같다.

 

특징을 살펴보자.

  • tanh 함수는 함수의 중심값을 0으로 옮겨 sigmoid의 최적화 과정이 느려지는 문제를 해결했다.
  • 하지만 미분함수에 대해 일정값 이상 커질시 미분값이 소실되는 기울기소싱문제는 여전히 남아있음.

 

 

3) ReLU 함수 (Rectified Linear Unit function)

 

ReLU 함수는 최근 가장 많이 사용되는 활성화 함수이다.

 

특징을 보자면

  • x>0 이면 기울기는 1인 직선이고, x<0이라면 함수값은 0이 된다.
  • sigmoid, tanh 함수와 비교시 학습이 훨씬 빨라진다.
  • 연산비용이 크지않고, 구현이 매우 간단하다.
  • x<0 인 값들에 대해서는 기울기가 0이기 때문에 뉴런이 죽을수 있는 단점(Dying ReLU)이 존재한다.

 

 

4) ELU 함수 (Exponential Linear Unit function)

ELU 의 특징은 다음과 같다.

  • ReLU의 모든 장점을 포함한다.
  • Dying ReLU 문제를 해결했다.
  • 출력값이 거의 zero-centered에 가깝다
  • 일반적인 ReLU와 달리 exp함수를 계산하는 비용이 발생한다.

 

5) Maxout 함수 (Maxout function)

이 함수는 ReLU가 가지는 모든 장점을 가졌으며, dying ReLU문제 또한 해결한다.

하지만 계산량이 복잡하다는 단점이 있다.

 

 

 

3. 결론

그렇다면 이중에 어떤 활성화함수를 써야할까?? 사실 정답은 없다. 하지만 일반적으로 ReLU 함수를 먼저쓰고 그 다음 ReLU Family 함수를 쓰면서 정확도를 체크해가야한다. sigmoid 같은경우는 가급적이면 쓰지 않는것이 좋다고 한다.

 

 

 

참고

1) reniew.github.io/12/

2) excelsior-cjh.tistory.com/177

 

 

 

 

댓글