인생에서 사라진다는 것은 굉장히 가슴 아픈 일이다.
이와 같은 "사라짐"의 문제는 인간뿐이 아닌 기계에서도 발생한다.
당연한 말이지만 존재라는 것을 하게 된다면 사라진다는 것은 당연한 것이 아닐까...
오늘은 무엇이 사라지고, 사라지는 이유가 무엇인지에 대해 그리고...
사라지지 않게 하고 싶다면 어떻게 해야할 것인가...
대책도 한 번 세워보자...
📌 Vanishing Gradients Problem
- gradient(기울기)는 알고리즘이 lower layer으로 진행될 때 점점 더 작아지는 경우가 많다.
- gradient descent update에서는 gradient를 보고, 가중치를 수정해나가는데 gradient가 0에 가까워진다면 가중치를 사실상 변경하지 않고 그대로 유지하게 된다.
- 가중치가 변경되지 않는다는 것은 모델의 성능이 더 이상 좋아질 수 없다는 것을 의미한다.
- 따라서 훈련은 이 상황에서 결코 좋은 해결책이 아니다.
📌 Logistic activation function saturation
- input이 아주 커지거나, 아주 작아지게 된다면 함수의 output은 0 또는 1이 될 것이고, 이상황에서 도함수(기울기)는 0에 가깝게 된다.
- 기울기가 양수면 값을 줄이는 방향, 기울기가 음수면 값을 늘리는 방향으로 학습이 진행되게 되는데, 기울기가 0이라는 것은 back propagation를 통해 학습할 때 갱신할 가중치가 없다는 것을 의미한다.
Solution
📌 ReLU (Rectified Linear Unit)
- $ReLU(z) = max(0, z)$
- output : 음수부분은 0, 양수부분은 input값
- 장점
- 양수에서 점근선 1을 가지는 sigmoid 함수에서 변형을 하여 점근선을 가지지 않고, 일정하게 발산하게 만든다.
- 이로 인해 값이 커지더라도, 일정한 gradient를 가지게 되어, saturate의 문제를 해결할 수 있다.
- 또한 직선이기에 계산 속도도 향상된다.
- 단점
- dying ReLU : 학습을 진행하는 동안 몇몇 가중치들은 죽을 수 있다.
- 0보다 작은 input에 대해서는 output도 0이고, gradient도 0이다. -> 가중치 갱신의 문제를 극복하지 못한다
- 장점
📌 Leaky ReLU
- $LeakyReLU(z) = max(az, z)$
- 장점
- hyperparameter(사용자 지정) $a$를 사용한다 -> 따라서 음수의 값에 대해서도 output의 차이를 만들고, gradient도 차이를 만들어 낸다 -> 가중치 갱신이 가능하다.
- 단점
- negative, positive input의 값이 커지면 output의 값이 너무 커지게 되어 특정 노드의 영역이 크게 될 수도 있다. -> 학습 이 이상한 방향으로 진행될 수도 있음을 의미한다.
- 장점
📌 Parametric Leaky ReLU
- 아... 난 파라미터 a 조차도 내가 지정하기 싫다... 기계야 ... 니가 알아서 최적의 a를 찾아봐라... 라는 관점에서 나오게 되었다.
- a는 학습을 하면서 back propagation 알고리즘으로 수정해나가며 최적의 값을 찾아낸다.
- image dataset이 매우 큰 경우에는 좋은 성능을 보여준다.
- dataset이 작은 경우에는 overfitting의 위험이 발생한다.
📌 ELU(Exponential linear unit)
- ELU는 exponential 함수를 사용하기에 계산 속도(back propagation)는 느려진다.
📌 Scaled ELU(SELU)
- self-normalization : 각각의 layer의 output을 정규화를 진행하여, $N(0, 1)$에 맞추어 vanishing/exploding gradients problem을 해결한다
- 다른 활성화함수에 비해서 월등하게 좋은 성능을 낸다
- self-normalization을 위한 몇몇 조건이 존재(단점)
- input feature들은 정규화가 진행되어 있어야 한다
- 모든 hidden layer들은 LeCun normal initialization으로 초기화되어있어야 한다
- architecture는 sequential 해야 한다(layer들이 차곡차곡 쌓여있어야 한다)
- 모든 layer가 dense해야 한다
📌 Batch Normalization(BN)
- 각 input을 0 기준으로 중심화하고, 정규화한 다음 layer 당 2개의 새로운 paprmeter를 사용하여 결과를 조정하고 이동한다
- parameter : scaling 용(표준편차를 맞추기 위해), shifting 용(평균을 맞추기 위해)
- hidden layer의 activation function 직전 또는 직후에 추가하여 사용한다
📌 Another problem in training DNN
- ReLU를 사용하더라도 deep neural network를 training하는 것은 매우느리다
- 일반적 gradient descent optimizer를 사용하는 것보다 더 빠른 optimizer를 사용해야 한다
- momentum optimization, Nesterov, Accelerated Gradient, RMSProp, Adam, Nadam
📌 Momentum Optimization
- momentum은 이전 방향 정보 $v$를 고려하는 것이 단순히 $w$를 갱신하는 SGD와 다르다
- 최적으로 가고 있으면 값을 더 크게 주어 빠르게 최적으로 갈 수 있게 해준다
- 고전적 SGD : $w = w -p\frac{\theta J}{\theta w}$
- 모멘텀 적용한 SGD : $v = \alpha v-p\frac{\theta J}{\theta w}, \ \ w=w+v$
- $\alpha$가 0인 경우가 고전적 SGD, $\alpha$가 1에 가까울수록 이전 정보에 큰 가중치를 부여하는 것이다
📌 RMSProp
- $ r =\alpha r + (1-\alpha)g \times g $
- 단순히 제곱을 하게 되면 오래된 gradient와 최근 gradient가 같은 비중의 역할을 가져 $r$이 커질수록 수렴을 방해할 가능성이 높다
- 따라서 가중 이동 평균 기법 적용
- $\alpha$가 작을수록 최근 것에 비중을 둔다(보통 $\alpha$로 0.9, 0.999를 사용)
📌 Adam
- momentum optimization + RMSProp
- past gradient를 keep하는 것은 동일하다
- momentum optimization처럼 past gradient를 사용하여 기하급수적으로 감소하는 gradient의 평균을 추적한다
- RMSProp처럼 past squared gradient를 사용하여 기하급수적으로 감소하는 gradient의 평균을 추적한다
📌 Avoiding Overfitting by Regularization
- $l$1 norm
- $l$2 norm
- Dropout
'학교 공부 > 기계학습개론' 카테고리의 다른 글
21. RNN Part II(Code) & Autoencoder (0) | 2022.12.14 |
---|---|
20. RNN (0) | 2022.12.14 |
19. Famous CNN architecture - Part 2 (0) | 2022.12.14 |
18. Famous CNN Architectures (2) | 2022.12.12 |
17. CNN (Convolution Neural Network) (0) | 2022.12.07 |