우리는 지난시간에 6개의 activation function을 배웠다.
이중에서 Sigmoid
와 ReLU
만 다시 봐보자!
Sigmoid는 과거에 유명했지만 Vanishing Gradients
의 문제점 때문에 이제는 잘 쓰지 않는다.
이제는 ReLU
를 쓰는 것이 가장 좋은 보편적인 선택이다.
가중치를 지나치게 작게 초기화하면?
➡️ 작은 값이 계속해서 곱해지므로 gradient가 0이 된다.
➡️ 모든 activation이 0이 되고 학습은 이루어지지 않는다.
가중치를 지나치게 크게 초기화하면?
➡️ 큰 값이 계속해서 곱해지므로 activation이 saturate
➡️ gradient는 0이 되고 학습은 이루어지지 않는다.
Xavier/MSRA Initialization을 사용해 가중치 초기화를 잘해주면?
➡️ activation 분포를 좋게 유지할 수 있다.
➡️ 학습이 잘 이루어진다.
Network가 깊어질수록 가중치를 더 많이 곱하게 된다.
➡️ 가중치 초기화는 Network가 깊어질수록 더 중요!!
데이터 전처리를 통해 zero-mean
, unit variance
➡️ 손실 함수가 가중치의 변동에 덜 민감하다.
➡️ 최적화, 학습이 더 쉽다.
train set 성능 계속 올라감 & loss 줄고 있음
but, val 침체중!
➡️ 학습이 overfitting된 것. Regularization 필요!!
가장 간단한 최적화 알고리즘
1
, 2
의 과정을 반복한다.loss 방향이 한 방향으로만 빠르게 바뀌고 반대 방향으로는 느리게 바뀌면?
➡️ 불균형한 방향이 존재해 SGD는 잘 작동하지 않는다.
x축은 하나의 가중치, y축은 loss
휘어진 손실함수의 중간에 local minima
가 있다.
➡️ 순간적으로 기울기가 0이 되어 SGD는 멈춘다.
한쪽 방향으로는 증가하고 다른 방향으로는 감소하는 saddle point
가 이싿.
➡️ 마찬가지로 순간적으로 기울기가 0이 되어 SGD는 멈춘다.
minibatches에서 gradient 값이 노이즈에 의해 많이 변할 수 있다.
아래의 그림처럼 gradient가 꼬불꼬불하게 update될 수 있다.
앞서 본 SGD의 문제점들을 해결하기 위해 Momentum이라는 개념이 도입되었다.
Momentum은 기울기가 0인 지점에 빠지더라도 가속도로 탐색을 진행하도록 SGD에서 gradient를 계산할 때 velocity
를 추가하는 방법이다.
기존 SGD에서 momentum의 비율인 하이퍼파라미터 rho
가 추가되었다.