본문 바로가기
Machine-Learning/Basic

[ML] 활성화 함수 (Activation function)

by AteN 2021. 9. 5.

활성화 함수 (Activation function)

활성화 함수는 무엇일까? 왜 사용할까?

신경망 구조 설계에는 뉴런의 활성화 함수를 결정하는 것도 포함된다. 활성화 함수는 전이 함수 (transfer function) 또는 비선형성 (nonlinearity)이라고도 하는데, 그 이유는 활성화 함수가 가중합의 선형 결합을 비선형 모델로 만들기 때문이다. 활성화 함수는 각 퍼셉트론 내 계산의 마지막 단계에 배치되어 뉴런의 활성화 여부를 결정한다.

즉, 활성화 함수는 '활성화'라는 이름이 말해주듯 활성화 함수는 입력 신호의 총합이 활성화를 일으키는지를 정하는 역할을 한다

 

그냥 가중합을 계산해서 그대로 출력해도 되는데 굳이 활성화 함수를 사용하는 이유는 무엇일까 ?

그 이유는 활성화 함수가 있어야 신경망에 비선형성을 도입할 수 있기 때문이다. 이 비선형성 없이는 아무리 층수가 많은 다층 퍼셉트론도 단일 퍼셉트론과 다를 바 없다. 또한 활성화 함수는 출력값을 특정 구간 안으로 제약하는 효과도 있다. 

 

$$ a = b + w_{1}x_{1} + w_{2}x_{2}$$

$$ y = h(1) $$

 

다음과 같이 가중치가 곱해진 입력 신호의 총합을 계산하고, 그 합을 활성화 함수에 입력해 결과를 내는 2단계로 처리 된다. 

가중치가 달린 입력 신호와 편향의 총합을 계산하고, 이를 a라 한다. 그리고 a를 함수 h()에 넣어 y를 출력하는 흐름이다.

 

가중치 신호를 조합한 결과가 a라는 노드가 되고, 활성화 함수 h()를 통과하여 y라는 노드로 변환되는 과정 (뉴련 = 노드)

 

활성화 함수는 임계값을 경계로 출력이 바뀌는데, 이런 함수를 계단 함수(step fucntion)라 한다. 그래서 퍼셉트론에서는 활성화 함수로 계단 함수를 이용한다라고 할 수 있다. 즉, 활서오하 함수로 쓸 수 있는 여러 후보 중에서 퍼셉트론은 계단 함수를 채용하고 있다. 

그렇다면 계단 함수 이외의 함수를 사용하면 어떻게 될까? 실은 활성화 함수를 계단 함수에서 다른 함수로 변경하는 것이 신경망의 세계로 나아가는 열쇠이다. 

 

먼저 입력의 가중합을 계산하는 선형 함수 z를 만든다 

$$ z = 키 x w_1 + 나이 x w_2 +b $$

이 함수의 출력 값에는 상한과 하한이 없다. 말 그대로 z는 아무 값이라도 취할 수 있다. 활성화 함수를 사용하면 이 에측값을 유한한 구간 안에 들어오도록 할 수 있다. 여기서 스텝 함수를 사용해 z > 0 이면 1 (입단) , z < 0 이면 0 (입단 불가) 으로 예측 결과를 계산했다. 따라서 활성화 함수가 없으면 모델은 그냥 숫작밧을 출력할 뿐인 선형 함수가 되어버린다. 이 퍼셉스톨느이 발화 여부를 결정하는 것이 바로 활성화 함수 이다

이미 여러 가지 활서오하 함수가 있고 최근 들어 성능 기록을 갱신하는 새로운 활서오하 함수가 속속 제안되고 있지만 몇가지 활성화 함수로 대부분의 경우를 처리할 수 있다. 그중 가중 널리 쓰이는 것들을 알아보자.

 

선형 함수 

항등 함수 (indentify function)라고도 하는 선형 전달 함수 (linear transfer function)는 입력을 그대로 출력하는 함수로, 실질적으로 활서오하 함수가 없는 효과를 낸다. 아무리 신경망의 층수가 많아도 선형 활성화 함수 아니면 기껏해야 가중 평균의 배유을 조정하는 효과뿐 입력에 비선형성을 도입하지 못한다 

$$ activation(z)  = z = wx + b $$

2개의 선형 함수를 합성해도 그 결과는 여전히 선형 함수다. 따라서 신경망에 비선형 활성화 함수를 도입하지 않으면 신경망의 층수를 아무리 늘려도 의미 있는 계산이 되지 못한다. 학습이 안된다는 뜻이다 

 

이해를 위해 w = 4 이고 b = 0 일 때 활성화 함수 \(z(x) = wx + b\)의 도함수를 구해보겠다. 도함수를 그래프로 나타내면? 

그리고 \(z(x) = 4x\)의 도함수 \(z^`(x) = 4\) 가 된다. 

선형 함수의 도함수는 상수이기 때문에 입력 x와 아무 상관이 없다. 이떄문에 역전파 계산을 할 때 기울기도 항상 동일한 값이 된다. 기울기가 항상 동일한 것이 문제가 되는 이유는 오차를 줄일 수 없기 때문이다. 

 

Step Fucntion

스텝 함수 (Step function)는 0과 1 두 가지 값만 출려한다. 입력이 x > 0이면 발화하고 (1 출력), 그렇지 않으면 발화하지 않는다. (0 출력). 이 활성화 함수는 참 또는 거짓, 스팸 메일  또는스팸 메일 아님, 합격 또는 불합격 등의 결과를 예측하는 이진 분류 문제에 주로 사용된다. 

시그모이드 / 로지스틱 함수 

시그모이드 함수 역시 매우 널리 사용되는 활성화 함수다. 이 함수는 이진 분류에서 두 클래스의 확률 (probability)를 구할 때 자주 사용한다. 시그모이드 함수는 모든 입력값을 0부터 1사이의 구간으로 바꿔주므로 극단적인 값이나 예욋값을 제거하지 않고도 처리 할 수 있다. 

시그모이드 함수 범위가 무한 (-무한 ~ + 무한) 인 연속 변수를 0부터 1사의 확률로 변환해 준다. 함수의 그래프가 매끄러운 S자 모양 곡선을 그리기 때문에 S-형 커브 (S-shape cruve)라고도 부른다. 스텝 함수가 이산적 예측 결과 (합격 또는 불합격)를 얻는 데 많이 사용한다면 시그모이드 함수는 합격 확률 또는 불합격 확률을 구하는데 사용한다. 

$$ sigmoid =\frac{1}{1 + e^{-x}} $$

tanh 함수 

tanh 함수 (하이퍼볼릭 탄젠트 함수)는 시그모이드 함수를 이동시킨 버전이다. 시그모이드 함수가 0부터 1사이의 값을 출력하는데 비해 tanh함수는 -1 부터 1 사의 값을 출력한다. tanh 함수는 시그모이드 함수에 비해 은닉층에서 더 좋은 성능을 낸다. 그 이유는 데이터의 평균이 시그모이드 함수에서는 0.5에 가까워지는 데 비해 tanh 함수는 0에 가까워지므로 데이터를 중앙에 모으는 효과가 있어 다음 층의 학습에 유리하기 때문이다. 

$$ tanh =\frac{e^{x} - e^{-x}}{e^{x} + e^{-x}} $$

$$ =\frac{e^{2x} - 1}{e^{2x} + 1} $$

 

 

 

이 두 함수의 단점은 z값이 매우 크거나 작을 때 함수의 기울기가 매우 작아진다는 것이다 (0에 가깝게). 결국 경사 하강법을 이용한 학습이 느려진다. 이 문제는 ReLU 활성화 함수를 사용하면 해결된다. 

 

ReLU 함수 

정류 선형 유닉 (Rectified Linear Unit, ReLU) 활성화 함수는 입력이 0보다 크면 노드를 발화한다. 입력이 0보다 작으면 발화하지 않는다. 하지만 0보다 큰 입력에 대해서는 출력값이 입력값에 비례해서 커진다. 

 

현재 ReLU는 우수한 성능의 활성화 함수로 평가받고 있다. 다양한 상황에서 잘 작동하며 은닉층에서 tanh 함수나 시그모이드 함수보다 더 높은 성능을 보이기 때문이다.

 

Leaky ReLU 함수 

ReLU 함수의 한가지 단점은 x가 음수일 대 기울기가 0이라는 점이다. 누설 ReLU 함수 (Leaky ReLU fucntion)는 이 문제를 해결하기 위한 ReLU 함수의 변종이다. x < 0인 구간에서 함숫값이 0이 되지 않도록 Leaky ReLU는 작은 기울기 (약 0.01)로 함숫값을 음수로 만든다. 상당히 드물게 사용되지만 대부분의 경우 ReLU보다 높은 성능을 보인다. 

 

왜 0.01일까? 어떤 사람은 이 값을 하이퍼파라미터로 사용하지만 그렇게 까지 할 필요는 없다. 그보다 더 큰 문제가 있기 때문이다.

 

softmax 함수 

벡터 \(x= (x_1, x_2, ..., x_n)\)에 대해서 모든 성분이 항상 양수이며, 그 합이 1이 되도록 변환한다. 따라서 음수 값이 오더라도 항상 양수가 나오도록 지수 함수를 이용한 함수다. 벡터 형태로 예측값이 나오는 다중 분류 문제에서 자주 사용된다. 

$$ a(x) = \frac{e^x}{\sum_{k=1}^{n}e^{xk}} $$

댓글