새소식

딥러닝

활성화 함수(Activation function)

  • -

딥러닝의 기본적인 구성요소는 artificial neuron이다.

artificial neuron은 아래 그림처럼 affine functionactivation function으로 이루어져 있다.

 

artificial neuron

 

비선형 문제인 XOR 문제를 풀기 위해 hidden layer를 쌓아 문제를 해결한 MLP(Multiple layer perceptron)의 핵심은 활성화 함수에 있다.

비선형적인 관계를 표현하기 위해 활성화 함수(activation function)를 사용하기 때문이다.

만약 활성화 함수가 없다면 layer를 아무리 깊게 쌓아도 선형식을 계속 쌓는 것이기에 비선형 관계를 표현할 수 없다.

 

💬affine function

활성화함수를 진입하기 전에 input 값과 weight의 변수가 곱해진 후 summation하는 함수

 

활성화 함수 종류

Sigmoid function

https://reniew.github.io/12/

Sigmoid 함수는 모든 입력값에 대해 0과 1사이로 변환해주는 함수이다.

 

미분한 Sigmoid function을 보면 Sigmoid Function이 완전히 1, 0으로 판단할 때는 backpropagation 값이 작아지는 모습을 확인할 수 있다.

즉, Sigmoid Function에 어떤 값이 들어왔는데 어떻게 판단해야 할 지 어려운 경우 backpropagation 양이 많아진다. (=weight이나 Bias를 많이 update 시킨다는 의미)

 

 

 

 

tanh function (Hyperbolic tangent function)

https://reniew.github.io/12/

Linear Regression에서 뉴런이 효과적으로 학습이 되기 위해서는 들어오는 값이 0을 기준으로 좌우 대칭이여야 한다.

그러나 activation이 Sigmoid 함수인 뉴런은 0 또는 1로 bias가 걸려있는 값을 전해주기에 다음 뉴런이 계속 양수값을 입력받는 문제점이 존재한다. 

그렇게 되면 같은 방향으로 update가 되는데 이러한 과정은 학습을 지그재그 형태로 만들어 학습 속도가 느려지게 된다.

 

Sigmoid 함수와 달리 tanh 함수는 output이 -1 ~ 1 로 분포되어 있다.

즉, 다음 뉴런으로 전해지는 값이 x=0을 기준으로 좌우 대칭일 확률이 높기에 효율적인 학습이 가능하다.그러나 음수의 출력값이 나올 수 있어 확률로서 다루기는 불가능하다. (Binary Cross Entropy를 바로 이용하기는 어렵다)

 

 

Sigmoid 함수와 tanh함수의 문제점: Gradient Vanishing Problem

 

예를 들어 활성화 함수가 Sigmoid인 뉴런으로 구성되어 있는 100개의 layer가 있다고 가정하자.Sigmoid 함수의 미분값의 최대값이 0.25이다. Sigmoid 함수에서 x값이 지나치게 크거나 작을 경우 미분값이 0에 가까워지고 최대값이 나온다고 해도 계속 backpropagation이 일어나면 input layer는 (0.25)^100이 되어 Gradient 자체가 0으로 소실되어 버리는 문제가 발생한다. 

 

tanh 함수 또한 미분함수의 최대값은 1이기는 하지만 x 대해 일정값 이상 커지거나 작아질 시 미분값이 소실되는 gradient vanishing 문제는 여전히 남아있다.

 

 

 

ReLU function

https://towardsdatascience.com/why-rectified-linear-unit-relu-in-deep-learning-and-the-best-practice-to-use-it-with-tensorflow-e9880933b7ef

비선형 함수이지만 선형과 매우 유사한 성질을 갖고 있다.

모델 최적화에 유용한 선형적 성질을 보존하고 있기 때문에 최적화가 쉽다.

 

ReLU함수의 미분함수를 보면 activation 값이 0이면 backpropagation도 0을 전달한다. => parameter update가 일어나지 않는다.

activation 값이 양수면 backpropagation에 1을 곱해 그대로 propagation 시킨다. => Gradient Vanishing Problem가 일어나지 않는다.

 

ReLU 함수의 문제점: Dying ReLU Problem

activation한 값이 0인 경우 backpropagation 할 때 0이 곱해지기 때문에 update가 일어나지 않는 문제점이 존재한다.

(실제 0으로 되는 경우가 거의 없어서 큰 문제가 되지는 않는다.)

 

=> Leaky ReLU: ReLU 함수의 문제를 해결하기 위해 일정한 기울기를 추가한 함수

https://vidyasheela.com/post/leaky-relu-activation-function-with-python-code

 

 


결론

 

ReLU는 일정 성능 이상을 보장하므로 초기에 ReLU를 이용함 (hidden layers에서만 사용)

학습 중단 현상이 일어난다면 Dying ReLU Problem이 발생하는 것이므로 LeakyReLU를 사용

 

Tanh, Sigmoid는 Vanishing gradient problem이 발생할 수 있으므로 얕은 신경망 모델에서만 사용하거나 Final output layer의 활성화 함수로 사용

728x90

'딥러닝' 카테고리의 다른 글

머신러닝 프로젝트 Flow  (0) 2022.05.26
Tensorflow 모델 서비스하기  (0) 2022.05.19
[Feature Engineering]- Text Representation_Ngram  (0) 2022.05.05
Pytorch Tutorials  (0) 2022.05.03
[Feature Engineering]- Text Representation_BoW  (0) 2022.05.02
Contents