제가 공부하면서 느낀 내용을 게시하기 때문에 이론이 실제와 다를 수 있습니다. 문제점과 틀린점이 있다면 댓글로 말해주시면 감사하겠습니다.
kook의 AI 공부 블로그 주인장
Unit Step Function 계단 함수
Unit Step Function
$$ Step(x) = \begin{cases} 1 & (x > 0) \\ 0 & (x \le 0) \end{cases} $$
이 함수는 [인공지능] 퍼셉트론과 신경망 에서 주로 사용한 활성화 함수다.
결과값이 0이하이면 0을 출력하고 0보다 크면 1을 출력하는 간단한 함수라고 생각하면 된다. !
활성화함수는 이 계단함수말고도 여러개가 존재하는데 대표적인 활성화함수들을 알아보고 왜 활성화함수가 필요한지까지 알아보겠다.
Sigmoid Function 시그모이드 함수
Sigmoid Function
$$ Sigmoid(x) = \frac{1}{1+e^{-x}} $$
시그모이드 함수의 특징을 살펴보자.
- \(x\)의 범위는 \((-\infty, \infty)\), \(y\)의 범위는 \((0, 1)\)까지이다.
-> 수 많은 x값에 대해서 y가 0에서1사이의 값을 출력하니 확률값으로도 계산할 수 있겠다. !
- 그래프가 모든 x에 대해서 미분가능하다.
-> 경사하강법을 사용할 수 있다.
이렇게 두가지의 특징을 그래프를 보고 알 수 있다.
따라서 시그모이드 함수는 인공지능에서 입력값을 확률 값으로 바꿔주는 역할을 하며, 미분가능하기때문에 경사하강법을 통해 역전파알고리즘을 사용할 수 있게 해준다.
시그모이드함수는 어떻게 만들어졌을까?
로지스틱에서 시그모이드가 되는 과정은 다른 글에서 작성도록 하겠습니다. !
Vanishing Gradient 기울기 소실 문제
Vanishing Gradient (Backpropagation)
시그모이드함수의 여러 특성 덕분에 인공지능 학습에서 없어서는 안 될 존재가 되었지만 가장 큰 문제점이 있었다.
그것은 바로 기울기 소실 문제이다.
기울기 소실 문제는 역전파를 진행할 때 전달되는 값이 점점 작아져 입력층에 가까워지면 미분값이 0에 수렴하게 되는 문제다.
시그모이드함수가 왜 Vanishing Gradient를 만들까?
첫번째 이유,
입력값이 (-4, 4) 보다 크거나 작아질수록 출력값이 0과 1로 수렴하게 된다. 즉, 입력을 받은 값을 0과 1사이로 만드려고하니 손실되는 데이터들이 생긴다.
예를들어, 신경망의 값이 10이 나왔을 때의 값과 5가 나왔을 때를 비교해보면 이해가 쉽다.
Sigmoid(10) = 0.9995
sigmoid(5) = 0.9933
이렇게 두 배나 되는 값의 결과가 비슷하게 나오는 것으로 볼 수 있다. 따라서, 값의 절댓값이 클수록 데이터의 특징을 못 담는 현상이 벌어진다.
두번째 이유,
역전파 알고리즘을 살펴보면 각 노드가 Loss에 대한 미분값으로 자기자신을 업데이트 한다.
여기서 시그모이드함수의 미분은 아래와 같다.
$$ \sigma'(x) = \sigma(x)(1-\sigma(x)) $$
시그모이드 함수의 결과가 0.7이면 미분값은 0.7 x 0.3 = 0.21 이다.
시그모이드 함수의 결과만 알면 미분값도 쉽게 구할 수 있다는 장점이 있다.
하지만 문제는 \( \sigma(x)(1-\sigma(x))\)가 나올 수 있는 범위가 0 ~ 0.25 사이라는 점이다. !!
왜인지 살펴보자.
Sigmoid & Derivative
출력값(y)가 0부터 0.25인 것을 볼 수 있다.
예시 - 시그모이드 출력이 0.7, 0.9, 0.5 일 때
그래프를 보면 이해가 되는데 식만 봤을 때는 한번에 와닿지않았다. 그래서 예시를 준비했다.
0.7 일 때 \(\sigma(x)(1-\sigma(x))=0.7\cdot(1 - 0.7) = 0.21 \)
0.9 일 때 \(0.9\cdot(1-0.9) = 0.09\)
0.5 일 때 \(0.5\cdot(1-0.5) = 0.25\)
좋다 그럼 (0 ~ 0.25)가 뭐가 중요하냐 !!
인공지능에서 역전파를 진행할 때 체인룰이라는 기술을 사용하는데 이 체인룰은
$$ \frac{dL}{dw} = \frac{dL}{dy} \cdot \frac{dy}{dz} \cdot \frac{dz}{dw} \cdot ...$$
이런 식으로 계속 곱해진다. 그러면 0~0.25 사이에 값이 계속 곱해지면서 결국에는 0에 수렴하는 형태가 된다는 말이다 !
0.21 x 0.13 x 0.07 x 0.24 x ...
ReLU Function 렐루 함수
ReLU Function
$$ ReLU(x) = \begin{cases} x & (x>0) \\ 0 & (x \le 0) \end{cases} $$
시그모이드함수의 두가지 문제점을 해결한 함수가 바로 이 ReLU 함수다.
나도 뭐 문제점을 개선하고 그러니까 엄청 대단하고 멋있게 생긴 함수라고 생각했는데 보기에는 간단한 함수여서 신기했다.
ReLU함수의 특징
- 어떠한 입력값이 들어와도 0보다 큰 부분은 자기자신과 똑같은 신호를 출력해준다.
- 미분값이 0이하는 0, 0보다 큰 쪽은 1로 간단하다.
ReLU함수의 단점
- 원점(0,0)을 보면 미분 불가능하다는 문제점이 있다.
- 0 이하인 부분은 전부 0이기 때문에 데이터 소실의 문제도 갖고있다.
이러한 단점을 보완한 다양한 ReLU함수가 존재한다.
다양한 렐루함수들
Leaky ReLU
GeLU
Leaky ReLU : 0이하인 부분도 조금의 기울기를 포함하자.
GeLU : 0 근처에서 미분값이 없으므로 미분가능하게 만들어보자. !
활성화 함수가 필요한 이유
신경망의 기본적인 형태를 보면 \(Wx + b\)이다 .
신경망 층을 여러개 쌓으면 \(W(W(Wx+b)+b)+b\) 이런식이 된다. 이 식을 잘 풀면 결국에는 \(Ax + b\) 형태가 되고 이 형태는 기존과 비슷한 형태가 된다. 따라서 우리가 해결하고자 하는 문제의 함수를 모방할 수 없는 구조가 되는 것이다. ! \((Ax + b\) 형태를 선형적이라고 한다.)
그리하여 활성화 함수의 역할은 선형적인 신경망과 결합하여 신경망에 비선형성을 추가하는 것이다.(이때 활성화 함수는 비선형적이어야함)
보편 근사 정리(Universal Approximation Theorem, UAT)
그럼 신경망에 비선형적인 활성화 함수를 추가했다고 우리가 알고자하는 엄청 복잡한 함수들을 모방할 수 있을까?
바로 보편근사정리를 통하여 가능하게 된다.
보편 근사 정리란 뉴런과 비선형적인 활성화 함수가 충분히 많이 더해지면 세상의 모든 연속함수를 모방할 수 있다는 정리이다.
이게 사실인지 아래 실습을 통해 확인해보자 !
Universal Approximation Theorem
MSE: -
위 그래프의 식은 이렇게 된다.
$$ \hat{y} = \sum_{i=1}^{N} \theta_i \cdot \phi(w_i x + b_i) $$
- \(\hat{y}\) : 모델의 출력값
- \(\theta_i\) : 각 뉴런 출력에 곱해지는 가중치 - 이걸로 활성화함수의 형태를 결정
- \(\phi\) : 활성화 함수
뉴런 개수가 1개일때는 기본적인 활성화함수 형태였다가 점점 늘릴수록 타겟함수에 가까워지는 것을 볼 수 있다.
실제 신경망에서는 타겟함수가 없지만 이 실습에서처럼 보편 근사 정리를 통해 어떠한 함수도 모방이 가능하니 우리가 해결하고자하는 문제의 알려지지 않은 함수도 학습 가능하다고 생각한다. 또한 신경망에 이러한 특징이 있어 오늘날 AI가 활발한 이유같기도 하다. !