교재링크(광고 아님): freelec.co.kr/book/인공지능을-위한-수학/

 

시그모이드 함수(sigmoid function)

우선 함수의 설명은 아래 포스트를 참조

 

1장 기초 수학(8~10절) - 기본편 - 인공지능을 위한 수학

교재링크(광고 아님): freelec.co.kr/book/인공지능을-위한-수학/ 1-8 시그모이드 함수 시그모이드 함수(sigmoid function) : 아래 수식으로 표현되는 함수. 인공지능 분야에서 활성화 함수로 많이 쓰임 $$ \v

swjman.tistory.com

그래프를 그려 보면 쌍곡선 함수(hyperbolic function)라는 걸 알 수 있다.

출처 : 영문 위키피디아

 

이 함수의 일계미분(first derivative)을 그래프로 그려보면 (아마 감이 올텐데)모자 모양이다. (어린왕자에 나오는 코끼리를 잡아 먹은 보아뱀의 느낌도)

출처 : towardsdatascience.com

 

그런데, 서양에선 이 모양을 종모양(bell-shaped)이라고 한단다. 잘 보면 첨탑에 걸려있는 종 느낌이 나는 것 같지만, 동서양의 감성 차이인가 난 사실 와닿지는 않았다.

 

1계미분은 연쇄법칙을 이용하여 쉽게 유도할 수 있다.

$$ \varsigma_{a}(x) = \frac{1}{1 + e^{-ax}} $$ $$ u = 1 + e^{-ax} $$ $$ \varsigma_{a}'(x) = (\frac{1}{u})' = (u^{-1})' = \frac{du^{-1}}{du} \cdot \frac{d(1 + e^{-ax})}{dx} = -u^{-2} \cdot (-ae^{-ax}) = \frac {ae^{-ax}} {(1 + e^{-ax})^2} $$

 

이 도함수를 잘 정리하면 재귀 함수로 만들 수 있다. 편의를 위해 저 위에 u를 가져다 쓴다.

$$ \varsigma_{a}'(x) = \frac {ae^{-ax}} {u^2} = (ae^{-ax} + a - a) \cdot u^{-2} = (au - a) \cdot u^{-2} = au \cdot (1 - u^{-1}) \cdot u^{-2} $$

$$ = au^{-1} \cdot (1 - u^{-1}) = a \varsigma_{a}(x) \{1 - \varsigma_{a}(x)\} $$

 

모양이 우아해졌다. 이 도함수를 다시 미분 즉, 이계도함수(second derivative)가 인공지능에서 필요한가 본데, 2계도함수를 유도하는 방법은 당장 두가지가 떠오른다.

우선, 교재에 기술된 내용처럼 1계도함수를 아래 두개의 함수의 곱으로 보고

$$ f(x) = a \varsigma_{a}(x) $$ $$ g(x) = 1 - \varsigma_{a}(x) $$

곱의 법칙(product rule)을 이용하여 유도하는 방법이 있겠고,

 

도함수의 괄호를 풀어서 다항식으로 만든 다음

$$ \varsigma_{a}'(x) = a \varsigma_{a}(x) - a \{ \varsigma_{a}(x) \}^2 $$

합의 법칙(sum rule)을 이용해 각 항을 미분하는 방법이 있겠다.

곱의 법칙은 교재에 나와 있기 때문에 나는 MathJax(LaTex문법) 훈련(?)도 할겸 합의 법칙으로 유도를 해봤다.

 

우선 위의 괄호를 푼 1계도함수의 각 항을 함수로 놓으면 함수의 합으로 표현이 가능하다.

$$ f(x) = a \varsigma_{a}(x) $$ $$ g(x) = - a \{ \varsigma_{a}(x) \}^2 $$ $$ \varsigma_{a}'(x) = f(x) + g(x) $$

여기에 재차 미분을 가하면 아래와 같이 되므로, f(x)와 g(x)의 1계도함수를 구한 후 합하면 된다.

$$ \varsigma_{a}''(x) = f'(x) + g'(x) $$

 

먼저 f(x)의 미분은 시그모이드함수의 1계미분이므로 재귀적인 표현으로 간단히 구해진다.

$$ f'(x) = a \varsigma_{a}'(x) = a \cdot a \varsigma_{a}(x) \{1 - \varsigma_{a}(x)\} $$

 

g(x)의 미분은 연쇄법칙(chain rule)을 이용하면 좋을 것 같다. 제곱항의 밑을 초등함수로 놓고 풀어보자.

$$ w = \varsigma_{a}(x) $$

$$ g(x) = -a \cdot w^2 $$

$$ g'(x) = - a \cdot \frac{dg(x)}{dw} \cdot \frac{dw}{dx} = - a \cdot \frac{dw^2}{dw} \cdot \frac{d\varsigma_{a}(x)}{dx} $$

이렇게 하니 g(x)의 미분도 재귀적으로 표현된다. 식을 다 풀어보면

$$ = - a \cdot 2w \cdot \varsigma_{a}'(x) = - a \cdot 2 \varsigma_{a}(x) \cdot a \varsigma_{a}(x) \{1 - \varsigma_{a}(x)\} $$

 

이제 합쳐본다. 묶어서(grouping) 보기도 좋게 만든다.

$$ \varsigma_{a}''(x) = f'(x) + g'(x) = \{ a \cdot \varsigma_{a}'(x) \} + \{- a \cdot 2 \varsigma_{a}(x) \cdot \varsigma_{a}'(x) \} $$ $$ = a \cdot \varsigma_{a}'(x) \cdot \{1 - 2\varsigma_{a}(x)\} $$

 

$$ \varsigma_{a}''(x) = a^2 \varsigma_{a}(x) \{1 - \varsigma_{a}(x)\} \{1 - 2\varsigma_{a}(x)\} $$

 

시그모이드 함수의 도함수의 도함수의 그래프는(...) 묘하게 생겼다. 아마 미분을 할수록 곡선이 늘어나는 것 같다.

출처 : https://keisan.casio.com/

 

 

ReLU 함수(Rectified Linear Unit)

간단히 rectifier라고 부르는 활성화 함수이다. 현재 가장 많이 사용되는 활성화 함수라고 한다.

정의는 아래와 같다.

$$ \phi (x) = max(0, x) $$

C++언어의 std::max()와 똑같이 생긴 max 함수로 정의하는게 신기하다. 이 정의의 뜻은 x > 0 일 경우에만 값이 유효하다는 의미이다. x<=0에 대해 0이라는 치역이 존재하기 때문에 의아하게 생각할 수 있는데, 0의 본질을 생각해보면 이해가 쉽게 된다. 0은 무효화(곱하기)하거나 무의미(더하기)한 값이기 때문이다.

이 함수의 미분은 비연속적인데, 왜냐하면 x = 0을 기점으로 기울기가 급변하기 때문이다.

$$ \phi ' (x) = \begin{cases} 1 & \text{ $(x > 0)$ } \\ 0 & \text{ $(x \le 0)$ } \\ \end{cases} $$

 

아래 그래프를 보면 본래의 함수는 x = 0인 지점에도 연속적인 반면 도함수는 0에서 단절이 일어난다.

출처 : https://www.hindawi.com/journals/js/2019/6134610/

 

이 특징에 대해 곰곰히 생각해보면 x=0 에서 미분이 불가능하다는 것을 알 수 있다. 그래서, 인공지능(신경망)에서는 x=0 일 때 0과 1 중에 임의로 선택한다고 한다.

교재에는 시그모이드 함수에 대한 도함수의 최대값(0.25)이 너무 작아서 기울기 소실 문제(vanishing gradient problem)가 발생한다고 한다. 이 문제가 뭔지는 모르겠지만 어쨌든, 이 때문에 ReLU를 많이 쓴다고 기술되어 있으나, 다른 자료를 잠시 살펴보니 ReLU 역시 기울기가 0이 되는 dead state에 빠지는 문제(기울기 소실)는 마찬가지로 가지고 있는 것으로 보인다.

 

 

 

Posted by JMAN