딥러닝

[딥러닝] 2. 활성화 함수

WestChaeVI 2023. 2. 1. 15:23

목차

 

1. 퍼셉트론의 식 달리 보기

2. Activation Function(활성화 함수)
  2-1. Heaviside 함수
  2-2. Sigmoid 함수
  2-3. Relu 함수
 
3. Python으로 활성화 함수 구현

1. 퍼셉트론의 식 달리 보기

딥러닝 제 1장 퍼셉트론에 이어, 제 2장 활성화 함수 입니다. 전에 다뤘던 퍼셉트론 식을 조금 바꾸도록 하겠습니다.

식을 바꾸는게 아니고, 함수를 볼 때 좀 다른 관점으로 보겠다는 겁니다. 

전에 다뤘던 퍼셉트론의 식은 w1 * x1 + w2 * x2 >= 𝜽 로 사용했었죠. 이제 임계치 𝜽를 편향(bias)의 'b'로 써서 a라는 다항식을 만들겁니다.

a = w1x1 + w2xw + b 

이 다항식이 h(x)라는 함수를 통해서 결과가 0이냐 1이냐로 나오는 것이죠. 여기서 h(x)함수는 Heaviside를 말합니다. 간단합니다.

 

2. Activation Function(활성화 함수)

입력 신호의 총합을 출력 신호로 변환하는 함수를 일반적으로 활성화 함수라고 합니다.

입력 신호의 총합이 활성화를 일으키는지를 정하는 역할입니다. 활성화 함수에는 여러가지가 있지만 오늘은 Heaviside, Sigmoid, Relu 이렇게 3가지 함수만 다루겠습니다.

1) Heaviside 함수

 

먼저 Heavisde 함수입니다. 

 

함수가 0아니면1, 모 아니면 도 입니다. 이전글에서 다뤘던 퍼셉트론 식에서 합성함수 개념으로 바꿨다고 생각하시면 됩니다.

 

앞서 퍼셉트론 식을 a라는 변수에 초기화를 했습니다. a = w1x1 + w2xw + b

이 a가 H(x)의 x에 들어가게 되면, Heaviside 함수에 맞게 결과가 0,1로 나오게 되는 것이죠.

 

 

근데 여기서 문제가 생겨버립니다.

머신러닝이나 딥러닝은 미분(편미분)을 통해 계산을 하고 학습을 합니다. 그래서 기울기가 굉장히 중요한 부분이죠.

어라? 근데 heaviside 함수는 0에서 미분이 불가능할 뿐더러 미분계수가 죄다 0이네?

그래서 나온 것이 바로 sigmoid 함수입니다.

 

2) sigmoid 함수

 

 

sigmoid 함수는 a를 S(x)에 넣었을 때  0~1 값을 나오게 합니다.

 

heaviside 함수보다 훨씬 부드러워 진 함수인 셈이죠.

 

sigmoid 함수는 x=0 에서 1/2 값을 가지고 또한 변곡점을 가집니다.

 

이것은 고등수학에서 배웠던 이계미분을 통해 알 수 있습니다.

 

 

3) Relu 함수

Relu함수를 설명 드리기 이전에 먼저 Vanishing Gradient Problem 에 대해 설명 드리고자 합니다.

기울기 소실 문제 라고 하는데요, 신경망의 모형은 보이는 층(Visible layer)과 숨겨진 층(Hidden layer)로 구성되어 있습니다.

보이는 층은 입력층(Input layer)과 출력층(Output layer)으로 구성되어 있고 그 안에서 어떤 계산이 이루어지는지 볼 수 없기 때문에 숨겨진 층, 또는 은닉층이라고 부릅니다.

 

은닉층이 많은 다층 퍼셉트론에서, 은닉층을 많이 거칠수록 전달되는 오차가 크게 줄어들어 학습이 되지 않는 현상이 발생하는데, 이를 기울기 소멸 문제라고 합니다.

 

기울기가 거의 0으로 소멸되어 버리면 네트워크의 학습은 매우 느려지고, 학습이 다 이루어지지 않은 상태에서 멈출 것입니다. 이를 지역 최솟값(Local minimum) 에 도달한다고 표현하기도 합니다.

 

앞서 배운 개념인 시그모이드 함수와 같은 경우 출력 값이 1 아래여서 기울기 소멸 문제가 빠르게 일어납니다.

(0보다 작은 수 끼리 계속 곱하면서 연산했을 때 값이 0에 가까워지는 현상을 생각하면 이해하기 쉽습니다.)

이를 해결하기 위한 방법으로 사라져가는 성질을 갖지 않는 비선형 함수를 활성화 함수(ReLu함수)로 선택하면 해결할 수 있습니다.

 

 

그래프를 보시게 되면, 함수가 x<=0 일 때는 다 0이고, x>0 부분에서는 x 자신의 값을 가지게 됩니다.

 

 

 

 

 

3. Python으로 활성화 함수 구현

google colab으로 코드 구현 해봤습니다.

 

중간중간에 설명 있습니다. 꼭 보시길 바랍니다.

 

코드 링크

 

Google Colaboratory Notebook

Run, share, and edit Python notebooks

colab.research.google.com

 

참고 문헌

[1] 참고 영상