머신러닝 개발자의 러닝머신

[딥러닝] 활성화 함수(Activation Function) 본문

ML.AI/ML, DL

[딥러닝] 활성화 함수(Activation Function)

oongsong 2023. 5. 4. 12:44
반응형

활성화 함수란?

  • 활성화 함수는 전달 함수에서 전달받은 값을 출력할 때 일정 기준에 따라 출력값을 변화시키는 비선형 함수이다.
  • 활성화 함수는 모델의 복잡도를 올리고 퍼셉트론의 비선형 문제를 해결하지 못하는 한계를 극복하기 위해 사용된다.
  • 이를 통해 인공 신경망을 깊이 쌓으며 고성능에 도달할 수 있는 구조를 만들어준다.
    그 이유는 만약 활성화 함수가 선형 함수 f(x) = ax 라고 한다면, 3층의 인공신경망의 출력은 f(f(f(x))) = cx 로 선형 출력만 가능할 뿐, 데이터의 비선형적인 관계를 표현할 수 없고 아무리 여러 층의 신경망을 쌓아도 결과적으로 한 층의 신경망 구조가 나타내는 출력과 다르지 않다. 따라서 비선형 함수인 활성화 함수 덕분에 인공 신경망을 깊게 쌓아 모델의 복잡도를 올려 더욱 어려운 문제들을 해결할 수 있게 되었다. 

활성화 함수로는 시그모이드(sigmoid), 하이퍼볼릭 탄젠트(hyperbolic tangent), 렐루(ReLU) 함수 등이 있으며 각 함수의 특성과 사용 목적에 대해 설명하겠습니다.

 

1. Sigmoid 함수 

sigmoid 함수는 logistic 함수라고도 하며, 0~1 사이의 값을 출력하는 S자형 함수이다.

시그모이드 함수의 식과 그래프는 다음과 같다.

sigmoid 함수 식
sigmoid 함수 그래프

sigmoid 함수는 x의 절댓값이 커질수록 값이 0 또는 1에 수렴하며 그 기울기가 0에 가까워지는 특징을 가지고 있다. 

이러한 특징은 은닉층의 깊이가 깊어질수록 역전파 과정에서 0에 가까운 아주 작은 기울기가 계속해서 곱해지면서 앞단에 기울기가 잘 전달되지 않는 '기울기 소실(Gradient Vanishing)'  문제를 발생시킨다. 즉, 인공신경망의 가중치 Weight가 업데이트 되지 않아 학습이 되지 않는 결과를 초래합니다. 

 

또한, 함수의 중심이 원점이 아니기 때문에 학습이 느려지는 문제가 발생한다. 왜냐하면 한 노드에서 모든 파라미터의 미분값은 모두 같은 부호를 가지기 때문에 같은 방향으로 가중치가 갱신되며 최적값 찾는 데에 시간이 다소 오래 걸리게 만들기 때문이다. 이를 편향이동(bias shift)라고 한다.

 

따라서 sigmoid 함수는 은닉층에서의 사용은 지양되지만 logistic classification과 같은 분류 문제의 Loss Function에 많이 사용된다. 또한, sigmoid 함수의 출력이 확률값이기 때문에 확률적 해석이 유용하다.

 

2. Hyperbolic Tangent 함수 (tanh)

tanh 함수는 쌍곡선 함수 중 하나로, 입력값에 따라 -1 과 1사이의 값으로 반환한다. 

다음은 tanh 함수 정의와 그래프를 나타낸다. 

tanh 함수식, σ(x) = sigmoid함수이다.

중심이 원점이기 때문에 평균이 0이 아닌 양수값으로 수렴하는 문제를 해결할 수 있지만 

하이퍼볼릭탄젠트 함수도 값의 절댓값이 커질수록 기울기가 0으로 수렴하는 특성이 있어 여전히 기울기 소실 문제가 발생한다. 

 

3. ReLU 함수 

ReLU 함수는 가장 많이 사용되는 활성화함수로 x가 0보다 크면 입력값을 그대로 출력하고, x가 0보다 작으면 0을 출력한다. 

 

함수 정의와 그래프는 다음과 같다. 

렐루 함수는 특정 양수값에 수렴하지 않아 sigmoid와 tanh의 Gradient Vanishing 문제를 해결해 깊은 인공신경망에서 학습에 유용하다. 또한, 렐루 함수는 sigmoid와 tanh와 같이 복잡한 수식 연산이 아니라 단순 임계값이 적용된 출력을 나타내므로 연산 속도도 빠른 편이다. 

 

하지만 입력값이 음수일때, 기울기가 0이 되고 이는 곧, 해당 노드의 가중치가 0이 되어 다시 회생하기 어렵다는 단점이 있다. 이를 '죽은 렐루(dying ReLU)' 라고 한다.

 

4. Leaky ReLU 함수 

ReLU 함수에서 노드가 죽는 문제를 해결하기 위해 입력값이 음수일때 0이 아닌 값을 출력하는 함수이다. 

함수 정의와 그래프는 다음과 같다. 

0보다 작은 입력값에서 함수는 0.01이 아니여도 매우 작은 값이면 무엇이든 사용가능하다. 

 

이렇게, 0보다 작은 값에서 기울기가 0이 되지 않아 노드가 죽어버리는 문제를 해결할 수 있어 은닉층에 주로 사용된다. 

이때, ReLU를 먼저 적용해보고, 그 다음으로 Leaky ReLU와 같은 변형 형태를 적용해보는 것이 권장된다. 

 

5. Softmax 함수 

Softmax 함수는 입력값을 0~1 사이에 출력되도록 정규화하여 출력값들의 총합이 항상 1이 되도록 한다. 

보통 Sigmoid와 같이 출력층에서 주로 사용되는 함수로 함수 정의와 그래프는 다음과 같다.  

softmax 함수, n은 출력층의 뉴런 개수, y_k는 그 중 k번째 출력을 의미

sigmoid 함수가 이진분류(binary classification)에 사용된다면, softmax 함수는 다중분류 문제에 주로 사용된다.

 

 

 

참고자료

 

반응형