시그모이드의 특징과 한계

시그모이드 함수는 딥러닝의 활성 함수로, 0과 1 사이의 값으로 출력을 제한합니다. 이 함수는 간단한 미분 가능성에도 불구하고, 그라디언트 소실 문제와 포화 현상, 지그재그 현상으로 인해 깊은 신경망 학습에 한계가 있습니다.

시그모이드는 딥러닝에서 널리 활용되어온 활성 함수(activation function)입니다. 이에 대한 특징과 한계를 살펴보겠습니다.

특징

시그모이드는 로지스틱 함수(logistic function)라고도 불립니다. 이는 통계학에서 사용되던 개념을 인공지능 분야로 가져와 활용한 것입니다.

시그모이드는 지수함수를 분모에 사용하여 연산은 상대적으로 느리지만, 미분이 간단하다는 특징이 있습니다.

공식

\[\sigma(x)=\frac{e^{x}}{e^{x}+1}\]

$e^{x}$로 약분해 아래와 같이 표현합니다. 둘은 같은 식 입니다.

\[\sigma(x)=\frac{1}{1+e^{-x}}\]

이 시그모이드를 유도하는 방법은 나중에 따로 다루도록 하겠습니다.

특징

값의 범위

위 시그모이드 결과값의 범위를 알아보겠습니다. 시그모이드의 유도 과정을 알게된다면 쉽게 이해할 수 있지만, 더 간단한 방법으로 확인할 수도 있습니다.

일반적으로 시그모이드를 나타내는 두번째 식으로 보겠습니다.

 $e^{-x}$에서 $x$의 값을 $\infty$로 보내면 $e^{-x}$는 0에 수렴하게 됩니다. 분모가 0에 수렴하므로 전체 값인 σ(x)는 1에 수렴하게 될 것입니다.

 반대로 $e^{-x}$에서 x의 값이 $-\infty$로 갈 때 $e^{-x}$가 $\infty$에 수렴하게 됩니다. 분모가 $\infty$가 되므로, σ(x)는 0수렴하게 될 것입니다.

따라서 시그모이드 함수는 0과 1 사이의 값을 갖는 것을 알 수 있습니다. ( 0초과 1미만 )

이러한 특징으로, 현재까지도 확률을 나타내거나 이진 결과를 표현할 때 사용됩니다.

시그모이드의 그래프이다. 0부터 1까지의 값을 갖는 S자 형태의 그래프이다.

미분

시그모이드의 또다른 특징은 미분이 간단하다는 점 입니다. 이는 많은 미분 연산이 이뤄지는 Backpropagation 단계에서 연산량을 줄일 수 있게 됩니다.

\[\frac{d}{dx}=sigmoid(x)(1-sigmoid(x)\]

한눈에 보기에도 미분을 위한 식이 간단한 것을 알 수 있습니다. 이 약분식은 아래와 같이 시그모이드를 약분해 얻을 수 있습니다. 복잡해 보이지만 한줄 씩 따라가다 보면 생각보다 어렵지 않습니다.

\[\begin{align*}\frac{d}{\text{dx}} \text{sigmoid} ( x ) &= \frac{d}{\text{dx}} \frac{1}{1 + e^{- x}}\\&= \frac{d}{\text{dx}} ( 1 + e^{- x} )^{- 1} \\&= ( - 1 ) ( 1 + e^{- x} )^{- 2} \frac{d}{\text{dx}} ( 1 + e^{- x})\\&= ( - 1 ) \frac{1}{( 1 + e^{- x} )^{2}} \frac{d}{\text{dx}} ( 1 + e^{- x} )\\&= ( - 1 ) \frac{1}{( 1 + e^{- x} )^{2}} ( 0 + e^{- x} ) \frac{d}{\text{dx}} ( - x ) \\&= ( - 1 ) \frac{1}{( 1 + e^{- x} )^{2}} ( 0 + e^{- x} ) ( - 1 ) \\&= \frac{e^{- x}}{( 1 + e^{- x} )^{2}} \\&= \frac{1 + e^{- x} - 1}{( 1 + e^{- x} )^{2}} \\&= \frac{1 + e^{- x}}{( 1 + e^{- x} )^{2}} - \frac{1}{( 1 + e^{- x} )^{2}} \\&= \frac{1}{1 + e^{- x}} - \frac{1}{( 1 + e^{- x} )^{2}} \\&= \frac{1}{1 + e^{- x}} ( 1 - \frac{1}{1 + e^{- x}} ) \\&= \text{sigmoid} ( x ) ( 1 - \text{sigmoid} ( x ))\end{align*}\]


이렇게 약분을 통해 구한 시그모이드의 도함수 σ'(x)는 최댓값이 0.25입니다.

이는 앞서 구한 시그모이드의 값의 범위를 통해 알 수 있습니다.

σ(x) 값의 범위가 0< x <1 미만이기 때문에 도함수에, 사용되는 1 - σ(x) 또한 0초과 1 미만의 범위를 갖게 됩니다.

σ(x) * (1 - σ(x))에서 가장 큰 값이 나오는 경우는  σ(x) =  0.5일 때 이기 때문에 0.5 * ( 1 - 0.5) 는 0.25이므로 시그모이드의 도함수의 최댓값은 0.25가 됩니다.

이러한 특성은 시그모이드의 한계점을 야기하게 됩니다.

시그모이드의 도함수 그래프이다. 0부터 0.25 사이의 값을 갖는 종 모양의 그래프이다.

한계

시그모이드 활성 함수는 딥러닝에서 Vanishing Gradient Problem, Saturation, zigzag 현상을 지닌다는 문제점이 있습니다. 이러한 현상들에 대해 알아보겠습니다.

Vanishing Gradient Problem

Vanishing Gradient Problem는 시그모이드 함수의 도함수가 최대 0.25라는 특성 때문에 발생합니다. 
backpropagation 과정에서 도함수값이 반복적으로 곱해지는데, 이 값이 0.25보다 작으므로 깊은 신망에서는 가중치 업데이트의 정도가 매우 작아져 학습이 느려지게 됩니다.
이 문제는 하이퍼볼릭 탄젠트에서 완화되고, ReLU에서는 대부분 해결되었습니다.

Saturation

saturation (포화)은시그모이드 함수가 S자 형태를 가지는 특징 때문에 발생합니다.

시그모이드의 그래프이다. 0부터 1까지의 값을 갖는 S자 형태의 그래프이다.

함수의 값이 너무 크거나 작아지면 기울기가 0에 가까워져서 학습이 느려지게 되고, 이는 Gradient Vanishing 현상을 야기합니다.


ZigZag 현상

사실 이 현상을 설명하기 위해 이 글을 작성했습니다. 이 ZigZag 현상을 해결하고자 Hyperbolic Tanget가 Activation Function으로 등장하였습니다.

zigzag현상은 시그모이드가 non-zero centered 하다는 특징으로 인해 발생합니다. 시그모이드 함수와 그 도함수의 결과값은 항상 양수이므로, 모든 가중치가 같은 방향으로 이동하게 되어 비효율적인 학습이 발생하게 됩니다.

여기서 non-zero centered 하다는 것은 시그모이드로 나올수 있는 값의 범위가 0부터 1 사이로, 0을 중앙에 두지 않음을 이야기합니다. 

Backpropagation와 그 수식에 대한 사전 지식을 필요로 합니다.

Sigmoid가 Backpropagation에서 Weight에 어떠한 영향을 미치는 지 알기 위해서는 아래와 같은 수식으로 설명이 가능합니다.

\[\frac{\partial L}{\partial w_i}\]

여기서 L은 Loss를 의미하며, $w_i$는 i번째 weight의 index를 의미합니다. 각 weight이 변화가 전체 Loss를 어떻게 변화시키는지를 이해하기 위한 수식입니다.

위 수식은 다음과 같이 Chain-rule을 사용하여 바꿀 수 있습니다.

\[\frac{\partial L}{\partial w_i}=\frac{\partial L}{\partial f}\times \frac{\partial f}{\partial w_i}\]

여기서 f는 Activation function을 거치기 전 input과 weight을 곱한 값을 의미합니다. b는 bias입니다.

\[f=\sum_{k=1}^{d}(x_kw_k)+b\]


우리는 f를 알기 때문에, 앞서 본 Chain-rule의 수식의 $\frac{\partial L}{\partial w_i}$ 부분을 구할 수 있습니다.

먼저 f의 시그마를 보기 편하도록 덧셈 꼴로 펼쳐보겠습니다.

\[\frac{\partial  f}{\partial  w _{i}} = \frac{\partial  (x _{1} w _{1} +x _{2} w _{2} +x _{3} w _{3} + \cdots +x _{i} w _{i} + \cdots  +x _{d} w _{d} +b)}{\partial  w _{i}}\]

이 식을 이제 편미분을 해보겠습니다. $w_i$를 기준으로 편미분 하고 있기 때문에, 아래와 같이 복잡한 나머지 값들이 사라짐을 알 수 있습니다.

f를 w_i로 편미분한 수식. 편미분을 위해 w_i가 들어가지 않은 모든 문자를 적색으로 그어 생략함을 표기하고 있다.

따라서 아래와 같이 간단한 식으로 바뀝니다.
\[\frac{\partial x_iw_i}{\partial w_i}=x_i\]

이제 이 $\frac{\partial L}{\partial w_i}$를 앞서 loss를 weight으로 미분한 식에 넣습니다.

\[\frac{\partial L}{\partial w_i}=\frac{\partial L}{\partial f}\times x_i\]

다 왔습니다. 우리는 이 수식을 해석함으로 Zigzag 현상에 대해 이해할 수 있습니다.

$\frac{\partial L}{\partial w_i}$ 를 통해 우리는 각 weight이 변화함에 따라 Loss의 변화를 알고자 했습니다. chain-rule을 통해 이를 알기 쉽게 바꾸었고, Loss를 f로 편미분한 식과 x_i (이전 layer의 output)을 곱한 꼴로 나타내었습니다.

Zigzag 현상은 이 $x_i$ 즉, 이전 layer의 output은 무조건 0과 1 사이의 값이므로 이전 layer의 output이 현재 weight을 변화시키는데 영향을 주지 못합니다. (이전 layer의 output에 부호가 있었다면, weight 마다 다른 방향으로 값을 변화시킬 수 있었을 겁니다.)

따라서, 시그모이드를 Activation Function으로 사용할 경우 weight은 $\frac{\partial L}{\partial f}$의 부호에 따라 이동하게 됩니다.

2개의 weight w1과 w2가 초기값 inital에서 target으로 이동하는(학습하는) 모습을 예시로 들어보겠습니다. 아래 그림은 w1와 w2의 값을 축으로 설정한 그림입니다.


w1과 w2의 값을 축으로 설정해 표현한 그림. 2차원 빈 좌표계에 2사분면에 init된 모델과 4사분면에 목표하는 학습 시점이 있다.

앞서 수식으로 알아보았듯, 시그모이드에서는 모든 weight가 같은 방향(같은 부호)로만 이동이 가능합니다. 따라서, inital 값이 이동할 수 있는 방향은 0점을 기준으로 오른쪽 위(1사분면 방향 - w1과 w2가 모두 양수)와 왼쪽 아래(3사분면 방향 - w1과 w2가 모두 음수)뿐입니다.
따라서 주황색 그래프처럼 이동해야할 weight가 파란색 그래프처럼 zigzag하게 이동하며, 이로인해 학습이 느려지게 됩니다.

w1과 w2의 값을 축으로 설정해 표현한 그림. 2차원 빈 좌표계에 2사분면에 init된 모델과 4사분면에 목표하는 학습 시점이 있다. 2사분면에 있는 초기화된 점이 최적화된 경로로 이동하지 못하고 지그재그하게 목표하는 4사분면 점으로 이동한다.



이 문제점은 이후 hyperbolic tangent에서 해결하게 됩니다.

본 글에 작성된 모든 내용 및 이미지는 원작자의 허락없이 사용 및 배포를 금합니다.

질문은 편하게 댓글로 주세요🥳