비선형 활성화 함수(non-linear Activation function)는 입력을 받아서 수학적 변환을 수행하고 출력을 생성하는 비선형 함수입니다. 전형적인 활성화 함수 중에서 시그모이드 함수와 소프트맥스 함수가 있습니다.
이번엔 인공 신경망의 은닉층에서 왜 활성화 함수로 시그모이드 함수를 사용하는 것을 지양해야 하는지와 은닉층에서 주로 사용되는 함수인 ReLU 함수와 그 외의 다른 활성화 함수들에 대해서도 알아보겠습니다.
활성화 함수의 특징은 선형 함수가 아닌 비선형 함수여야 한다는 점입니다. 선형 함수란 출력이 입력의 상수배만큼 변하는 함수를 선형 함수라고 합니다. 반대로 비선형 함수는 직선 1개로는 그릴 수 없는 함수를 말합니다.
인공 신경망의 성능을 높이기 위해서는 은닉층 많이 추가해야 합니다. 그러나 만약 활성화 함수로 선형 함수로 사용하게 되면 은닉층을 쌓을 수가 없습니다. 예를 들어 활성화 함수로 선형 함수를 선택하고 층을 계속 쌓는다고 가정하겠습니다. 활성화 함수는 f(x) = Wx 라고 가정합니다. 여기에 은닉층을 두 개 추가한다고 하면 출력층을 포함해서 y(x) = f(f(f(x)))가 됩니다. 이를 식으로 표현하면 W x W x W x X입니다. 이는 W의 세 제곱 값을 k라고 정의하면 y(x) = kx와 같이 다시 표현이 가능합니다. 즉, 선형 함수로는 은닉층을 여러번 추가하더라도 1회 추가한 것과 차이가 없습니다.
선형 함수를 사용한 은닉층을 1회 추가한 것과 연속으로 추가한 것이 차이가 없다는 뜻이며 선형 함수를사용한 층이 아무 의미가 없다는 것은 아닙니다. 학습 가능한 가중치가 새로 생긴다는 점에서 분명히 의미가 있습니다. 이와 같이 선형 함수를 사용한 층을 활성화 함수를 사용하는 은닉층과 구분하기 위해서 선형층이나 투사층 등의 다른 표현을 사용하여 표현하기도 합니다. 활성화 함수를 사용하는 일반적인 은닉층을 선형층과 대비되는 표현을 사용하면 비선형층입니다.
시그모이드 함수를 사용한 어떤 인공 신경망이 있다고 가정해보겠습니다.

위 인공 신경망의 학습 과정은 다음과 같습니다. 우선 인공 신경망은 입력에 대해서 순전파(forward propagation) 연산을 하고 순전파 연산을 통해 나온 예측값과 실제값의 오차를 손실 함수를 통해 계산합니다. 그리고 이 손실을 미분해 기울기를 구하고 이를 이용해 역전파(back propagation)을 수행합니다. 그리고 시그모이드 함수의 문제점은 미분을 해서 기울기를 구할 때 발생합니다.

위의 그래프는 시그모이드 함수의 그래프를 보여줍니다. 시그모이드 함수의 출력값이 0 또는 1에 가까워지면 그래프의 기울기가 완만해지는 모습을 볼 수 있습니다. 기울기가 완만해지는 구간을 주황색, 그렇지 않은 구간을 초록색으로 칠해보겠습니다.

주황색 부분은 기울기를 계산하면 0에 가까운 아주 작은 값이 나오게 됩니다. 그런데 역전파 과정에서 0에 가까운 아주 작은 기울기가 곱해지게 되면 앞단에는 기울기가 잘 전잘되지 않게 됩니다. 이러한 현상을 기울기 소실(Vanishing Gradient) 문제라고 합니다.
시그모이드 함수를 사용하는 은닉층의 개수가 다수가 될 경우에는 0에 가까운 기울기가 계속 곱해지면 앞단에서는 거의 기울기를 전달받을 수 없게 됩니다. 다시 말해 가중치 W가 업데이트 되지 않아 학습이 되지 않게 됩니다.

위 그림은 은닉층이 깊은 신경망에서 기울기 소실 문제로 인해 출력층과 가까운 은닉층에서는 기울기가 잘 전파되지만 초반으로 갈수록 기울기가 제대로 전달되지 않는 모습을 보여줍니다.
시그모이드 함수의 또 다른 문제점은 원점 중심이 아니라는 점입니다. 따라서 평균이 0이 아니라 0.5이며 시그모이드 함수는 항상 양수를 출력하기 때문에 출력의 가중치 합이 입력의 가중치 합보다 커질 가능성이 높습니다. 이것을 편향 이동(bias shift)라고 하며 이러한 이유로 각 레이러르 지날 때마다 분산이 계속 커져 가장 높은 레이어에서는 활성화 함수의 출력이 0이나 1로 수렴하게 되어 기울기 소실 문제가 일어날 수 있습니다. 결론적으로 기울기 소실 문제때문에 시그모이드 함수를 은닉층에서 사용하는 것은 지양됩니다.
하이퍼볼릭탄젠트 함수(Hyperbolic tangent function)는 입력값을 -1과 1사이의 값으로 변환합니다.

하이퍼볼린탄젠트 함수도 -1과 1에 가까운 출력값을 출력할 때, 시그모이드 함수와 같은 문제가 발생합니다. 그러나 하이퍼볼릭탄젠트 함수의 경우에는 시그모이드 함수와는 달리 0을 중심으로 하고 있는데 이 때문에 시그모이드 함수와 비교하면 반환값의 변화폭이 더 큽니다. 그래서 시그모이드 함수보다는 기울기 소실 증상이 적은 편입니다.
하이퍼볼릭탄젠트 함수는 위에서 언급했지만 원점 중심이기 때문에 시그모이드 함수와 달리 편향 이동은 일어나지 않습니다. 그러나 하이퍼볼릭탄젠트 함수 또한 입력의 절대값이 클 경우 -1이나 1로 수렴하게 되는데 시그모이드 함수와 마찬가지로 이때 기울기가 완만해지므로 역시나 기울기 소실 문제가 일어날 수 있습니다. 이런 이유로 은닉층에서 시그모이드 함수보다는 많이 사용됩니다.
ReLU 함수는 인공 신경망에서 가장 많이 쓰이고 있는 함수입니다. 수식은 f(x) = max(0,x)로 간단합니다.

ReLU 함수는 음수를 입력하면 0을 출력하고 양수를 입력하면 입력값을 그대로 반환합니다. 특정 양수값에 수렴하지 않으므로 깊은 신경망에서 시그모이드 함수보다 훨씬 더 잘 작동합니다. 뿐만 아니라 ReLU 함수는 시그모이드 함수와 하이퍼볼릭탄젠트 함수와 같이 어떤 연산이 필요한 것이 아니라 단순 임계값이므로 연산 속도도 빠릅니다.
하지만 문제점이 존재하지 않는 것은 아닙니다. 입력값이 음수면 기울기도 0이 됩니다. 그리고 이 뉴런은 다시 회생하는 것이 어렵습니다. 이 문제를 죽은 렐루(dying ReLU)라고 합니다.
ReLU 함수의 문제인 죽은 렐루 문제를 보완하기 위해서 ReLU의 변형 함수들이 등장하기 시작했습니다. 변형 함수는 여러 개가 있지만 그중에서도 Leaky ReLU를 알아보겠습니다.
Leaky ReLU는 입력값이 음수일 경우에 0이 아니라 0.001과 같은 매우 작은 수를 반환하도록 되어있습니다. 수식은 f(x) = max(ax, x) 로 간단합니다. a는 하이퍼파라미터로 Leaky(새는) 정도를 결정하며 일반적으로는 0.01의 값을 가집니다. 여기서 말하는 '새는 정도' 라는 것은 입력값의 음수일 떄의 기울기를 비유하고 있습니다.

위와 같이 입력값이 음수라도 기울기가 0이 되지 않으면 ReLU는 죽지 않습니다.
은닉층에서 ReLU 또는 ReLU의 변형 함수들을 사용하는 것이 일반적이지만 그렇다고 해서 앞서 배운 시그모이드 함수나 소프트맥스 함수가 완전히 사용되지 않는다는 의미는 아닙니다. 분류 문제를 로지스틱 회귀와 소프트맥스 회귀를 출력층에 적용하여 사용합니다.

소프트맥스 함수는 시그모이드 함수처럼 출력층의 뉴런에서 주로 사용되는데 시그모이드 함수가 두 가지 선택지 중 하나를 고르는 이진 분류 문제에 사용된다면 소프트맥스 함수는 세 가지 이상의 선택지 중 하나를 고르는 다중 클래스 분류 문제에 주로 사용됩니다.
은닉층의 활성화 함수로는 ReLU 또는 Leaky ReLU와 같은 ReLU의 변형 함수가 사용됨을 알게되었습니다. 그렇다면 출력층의 경우는 어떨까요? 각 문제에 따른 출력층의 활성화 함수와 손실 함수의 관계를 정리해보면 다음과 같습니다.
| 문제 | 활성화 함수 | 손실 함수 |
|---|---|---|
| 이진 분류 | 시그모이드 | nn.BCELoss() |
| 다중 클래스 분류 | 소프트맥스 | nn.CrossEntropyLoss() |
| 회귀 | 없음 | MSE |