Neural Network 개념은 인공지능 수업때 수학적으로 더 자세히 공부했어서 이번에는 수학적인 것보다 특징을 중심으로 공부해보려고 한다
수식 복습!
- sigmoid
activation function 중 제일 기초적으로 쓰이는 function
$ \frac{1}{1+e^{-z}} $
$ g'(z) = g(z)(1-g(z)) $
0~1 범위로 결과가 나오는게 보장된다
단점 : exp가 계산하는데 오래걸리고 gradient가 죽을때가 있고 결과의 중앙이 0이 아니라 0.5이다
z가 10이상이 되면 g'(z)가 0에 가까워져서 학습이 느려진다
이 activation function을 지나가면 모두 0보다 크거나 같은 값이라고 생각할 수 있다
따라서 gradient값의 부호가 전부 양수 혹은 음수가 되어 버린다
이런 특징에 의해 비효율적이고 느리게 학습되는 문제가 zig-zagging이다
zig-zagging을 해결하기 위해 부호가 한쪽으로 치우져지지 않게 평균값이 0이 되도록 평행이동 하는 경우도 있다
- tanh(hyperbolic tangent)
sigmoid를 평행이동한 것과 같다
학습을 쉽게 만들어 대부분 sigmoid보다 좋은 성능을 나타낸다
$ \frac{e^{z}-e^{-z}}{e^{z}+e^{-z}} $
$ g'(z) = 1-{g(z)}^2 $
얘도 마찬가지로 z가 10이상이 되면 느린 학습
sigmoid와 tanh 모두 이러한 특징을 나타내는데 이러한 특징 때문에 학습이 매우 느려지는 vanishing gradient라는 문제를 갖는다
- ReLU(rectified linear unit)
vanishing gradient를 해결한 activation function
$ max(0,z) $
$ g'(z) = \begin{cases}
0 & \text{if } z<0 \\
1 & \text{if } z \geq0\\
\end{cases} $
0인 지점에서는 미분이 되지 않는데 원래는 activation function은 미분이 되어야한다
하지만 딱 0인점에서만 미분이 안되는건데 0이 실제로 들어올 확률은 높지 않고
만약 0이 들어오더라도 0으로 할지 1로 할지 임의로 정해서 쓰면 된다
중요한 부분은 신호를 살려두고 안중요하면 죽인다는 느낌
0~1 사이의 값을 갖지 않으므로 layer의 마지막에서는 sigmoid를 써주기는 해야한다!
계산이 쉬운 장점이 있다
입력값이 커지면 출력값도 무한대로 커지기 때문에 일정 수준 이하의 출력값을 만들어야하는 경우에는 쓰기 어렵다
또한 모든 x가 0보다 작아지면 학습이 더이상 불가능하다
그래서 파라미터 초기값을 0보다 조금 크게 설정해주는 것이 좋다
- Leaky ReLU
$ max(0.01z,z) $
$ g'(z) = \begin{cases}
0.01 & \text{if } z<0 \\
1 & \text{if } z \geq0\\
\end{cases} $
z가 음수일때 derivate가 모두 0이 되는 것을 막아준다
계산이 무겁지도 않고 절대 죽지 않는다는 장점을 가졌지만
기존에 쓰던 ReLU를 많이 쓰기때문에 비교를 위해 학계에서는 막상 잘 쓰지는 않는다고 한다
- PReLU
$max(\alpha z,z)$
alpha가 0.01이면 Leaky ReLU와 같다
alpha도 gradient descent로 학습시켜주어야 한다
안좋은 feature에 대해서는 gradient를 작게 주는 것
- ELU
$\begin{cases}
z & \text{if } z<0 \\
\alpha (e^z-1) & \text{if } z \geq0\\
\end{cases}$
ReLU의 모든 장점을 가지고 있으면서 평균이 ReLU보다 0에 가깝다
Leaky ReLU는 너무 안좋은 Input이 들어와도 gradient를 0으로 죽이지 못하는데 ELU는 -100000000과 같이 쓰레기값이 들어오면 gradient를 거의 0으로 죽인다는 장점이 있다
- Maxout
$ max(w_1^Tx+b1,w_2^Tx+b2) $
직선 두개의 max 값
PReLU와 다르게 y절편이 0이 아닐수도 있고 PReLU의 업데이트된 버전이라고 생각 가능하다
trainable parameter가 너무 많아서 아무도 안쓴다
이렇게 non-linear한 activation function들을 사용하는 이유는
linear한 activation function을 사용한다면 layer를 여러개 쓰더라도 결국 최초의 input에 linear function을 씌운 결과와 같기 때문이다
ITE4053 : Deep Lerarning ( Hanyang University )
'AI' 카테고리의 다른 글
Regularization 2 - Dropout regularization (0) | 2021.04.18 |
---|---|
Regularization 1 - L1,L2 regularization (0) | 2021.04.18 |
Logistic Regression (0) | 2021.04.07 |
[Kaggle] Titanic Competition 타이타닉 생존자 예측하기 (0) | 2021.01.03 |
Neural Networks (1) | 2020.10.03 |