심층학습 최적화
성능 향상을 위한 요령
기존의 평균제곱 오차(MSE)에는 오차에러 값이 크게 나와 큰 교정이 필요함에도 갱신되는 값은 작은 경사도로 작게 갱신된다는 문제가 있다.
즉, 갱신이 늦어지는 것이다.
그 이유는 시그모이드가 가지고 있는 특성 때문이며,
이런 MSE의 느린 학습 문제를 해결하기위해 교차 엔트로피 함수가 사용된다.
교차 엔트로피 함수를 사용해서 가중치를 크게하라는 시그널을 제대로 전달해 줄 수 있다!
예측이 잘된 경우 오류 는 낮게 나오고, 잘못 된 경우 큰값이 나온다.
소프트맥스는 최대(max)를 모방한다.
그러나 max는 극단적인 확률이 나온다. 융통성있게 어떤 값들이 어떤 의미를 가지고 있는지 보고자 할 대는 좋은 결과를 기대하기 힘들다.
소프트맥스는 출력 노드의 중간 계산 결과의 최대값을 더욱 활성화하고 다른 작은 값들은 억제한다. (결과를 모두 더하면 1이 됨)
출력증의 변화에 따라 소프트맥스의 결과도 최대 출력에 더 가까워지며,
그렇기 때문에 부드러운 최대 함수라고 불리기도 한다.
소프트맥스일때 사용한다.
MSE나 교차 엔트로피와 달리 라는 하나의 노드에만 적용한다.
정답에 해당하는 노드의 출력값을 볼 때,
잘못 분류한다면 목적함수값은 커지며, 제대로 분류한 경우 목적함수값은 작아진다.
데이터의 단위가 다를경우 나타나는 문제
특정 데이터에 대한 의존성이 높아질 수 있으며, 불균형하게 학습이 진행된다.
이는 느린 학습의 요인이 된다.
인 가중치가 뭉치로 증가하거나 감소한다면,
최저점을 찾아가는 경로가 갈팡질팡하여 수렴이 느리게 된다.
정규화는 규모문제와 양수 문제를 해결해준다.
특징별로 독립적으로 적용된다.
정규분포를 활용한 표준화 변환을 적용한 경우가 일반적인 추세이다.
명목 변수를 one-hot 코드로 변환한다.
같은 값으로 갱신되면 두 노드가 같은 일을 하는 중복이 발생한다.
이때 난수를 초기화함으로써 대칭을 파괴하여 문제를 해결할 수 있다.
난수로 가중치 초기화
가우시안이나 균일 분포에서 난수를 추출한다.(두 분포의 성능차이는 거의 없음)
초기화가 너무 작다면, 모든 활성 값이 0이 된다.
반대로 초기화가 너무 크다면, 활성 값이 포화 상태가 된다.
적당한게 제일 좋음! (그러나 제일 어려운말 적당히..)
경사도의 잡음 현상
훈련집합을 이용해서 매개변수의 경사도를 추정하므로 잡음 가능성이 높다.
momentum은 경사도에 부드러움을 가해서 잡음 효과를 줄이고, 과거에 이동했던 방식을 기억해서 기존 방향을 유지할 수 있다.
(매개값이 많은 경우에는 saddle point 문제가 더 많이 발생한다.)
관성의 효과는 overshooting 현상을 누그러트리며,
네스테로프 가속 경사도 관성이라는 것이 있다.
: 현재 값으로 다음 이동할 곳 를 예견해서 먼저 이동시켜놓고, 이 이동시킨 점에서부터 gradiant를 계산한다.
네스테로프 모멘텀은 멈춤 조건이 더 좋아서 수렴이 더 잘된다고 한다..
너무 크면 overshooting에 따른 진자 현상, 너무 작으면 수렴이 느리게 나타난다.
매개변수마다 자신의 상황에 따라 학습률을 조절해서 사용한다.
학습률 담금질
: 이전 경사도와 현재 경사도의 부호가 같은 매개변수는 값을 키우고 다른 learning rate는 줄여가는 전략
AdaGrad
: 이 이전 경사도를 누적한 벡터라고했을때, 이 이 크면 갱신값은 작아서 조금만 이동되고, 이 작으면 갱신값은 커서 많이 이동하게 된다.
그러나 AdaGrad의 단점도 존재한다.
단순히 경사도의 제곱을 더하므로, 오래된 경사도와 최근 경사도가 같은 비중의 역할을 할 가능성이 있다.
👉 즉, 이 점점 커져서 수렴을 방해할 가능성이 있다.
Adam
RMSprop + Momentum
RMSProp에 관성을 추가로 적용한 알고리즘이다.