활성 함수(Activation Function)
딥러닝에서 활성 함수는 왜 사용되는 것일까?
이전에 정리한 퍼셉트론에서 부터 다시 짚고 넘어가자.
퍼셉트론의 수식의 항의 개수를 2개로 표현해보자.
if b + w1x1 + w2x2 >= 0 -> y = 1
if b + w1x1 + w2x2 < 0 -> y = 0
Python
복사
이 식을 간단하게 함수로 표현하면 아래와 같다.
y = h(b + w1x1 + w2x2)
h(x) = 1 (x >= 0)
h(x) = 0 (x < 0)
Python
복사
이렇게 위의 식처럼 입력 신호의 총합을 출력 신호로 변환하는 함수를 활성화 함수라고 부른다. 실제 뉴런세포에서 신호를 전달(activate or fire)할지 안 할지를 결정하는 기능을 말하는데, 인공신경망에서 활성화 함수는 다음 층으로 신호를 얼마만큼 전달할지를 결정한다.
그래서 때때로 전달함수(transfer function)이라고 부르기도 한다. 활성 함수는 아래 그림처럼 작동한다.
하지만 아무 함수나 활성 함수로 사용하는 것은 아니다. 입력값에 대한 출력이 선형으로 나오는 함수는 활성 함수로는 잘 사용하지 않는다. 왜냐하면, 선형 함수는 아무리 깊어지더라도 결국 선형 함수로 표현되기 때문이다. 우리는 Multi-Layer를 활용해서 비선형 모델을 만들고 싶은 것인데, 활성 함수가 선형 함수라면 이를 표현할 방법이 없는 것이다.
Multi-Layer Perceptron의 핵심은 이런 비선형 활성 함수를 활용해 여러 Layer를 쌓아가는 것이다.
비선형 활성 함수의 종류
일반적으로 표현하고 싶은 결과에 따라 많이 사용되는 비선형 활성 함수들이 있다. 각 활성 함수들과 해당 함수들의 특징을 살펴보자.
Sigmoid
sigmoid 함수는 로지스틱 회귀에서 사용되는 대표적인 활성 함수 이다. sigmoid 함수의 출력값은 0과 1 사이의 값을 가지는데 이 특성을 이용하여 분류 작업에 사용할 수 있다. sigmoid 함수를 사용하면 임계값을 지정하고 해당 임계값을 넘으면 1, 넘지 않으면 0 으로 판단할 수 있도록 유도한다.
하지만 기울기 소실 문제 때문에 은닉층에서는 잘 사용하지 않는다.
Tanh(Hyperbolic Tangent Function)
Tanh함수는 sigmoid함수를 변형한 쌍곡선 함수이다. tanh 그래프의 미분함수를 보면 최댓값이 1이다. sigmoid함수의 단점을 개선한 함수이다. sigmoid 함수와 달리 함수값이 음수와 양수 모두 존재한다. sigmoid 함수를 거치면 모든 값이 양수가 되어버리기 때문에 이후 Backpropagation을 진행할 때 문제가 생길 수 있다. 이 때, tanh함수를 활용해 문제를 해결할 수 있다.
Softmax
소프트맥스 함수는 input값을 [0,1] 사이의 값으로 모두 정규화하여 출력하며, 출력값들의 총합은 항상 1이 되는 특성을 가진 함수이다. 다중분류(multi-class classification) 문제에서 사용한다. 분류될 클래스가 n개라고 할 때, n차원의 벡터를 입력받아 각 클래스에 속할 확률을 추정한다. 확률값을 반환한다는 점에서 시그모이드와 비슷하지만, 시그모이드 함수를 통과해 얻은 확률값들은 서로 독립적이다. 가령 3개의 클래스가 있다고 하면, 데이터 포인트가 클래스 1에 속할 확률은 다른 두 클래스의 확률을 고려하지 않는다. 따라서 multi-class classification에서 시그모이드 함수는 사용할 수 없고, 대신 소프트맥스 함수를 사용한다.
ReLU(Rectified Linear Unit Function)
가장 많이 사용되는 활성 함수이다. 거의 모든 CNN 네트워크나 딥러닝에서 사용된다. 양수에서는 선형 함수와 같으며 음수는 0으로 버리는 특성을 가지고 있다. sigmoid에서 나타나는 gradient vanishing 문제가 발생하지 않는다.
Vanishing Gradient에 대해 자세히 알아보고 싶으면 아래 링크를 참고하자!
Leaky ReLU
Leaky ReLU는 뉴런이 죽는(“Dying ReLu”)현상을 해결하기위해 나온 함수이다.
추가로 다른 활성 함수들이 많지만 주로 쓰이는 함수들을 위주로 정리해 보았다.