Training NN part2
Parameter update schemes
gradient descent를 반영
SGD가 느린이유? loss가 수평으로는 경사가 얕,수직으로는 경사가 급함.
그런데 SGD는 수평으로 지그재그한 형태로 진행되므로 느리다.
Momentum>
update에서는 gradient는 force,마찰계수는 momentum으로 비교 될 수 있음.
nerterov momentum>
update 일반적인 momentum보다 좋다.
이미 알고 있는 momentumstep 종료점으로 이동한 후 gradient step 진행(shift를 진행)
불편한점 ? ...치환된 식으로 변형하면 보기좋은 형태로 변형 가능. nag 는 momentum보다 빠르게 converge하는 것을 알 수 있ㄷ음
adagrad>
주어진 식에서 cache의 루트 +일정값을 나누는 term이 있음.(아래와 같이)
/cache의 루트 +일정 값
파라미터별로 다른 learning rate을 제공해준다.
수직축의 gradient크다->cache값이 크다 x의 update속도 느려짐.
따라서 정리하면 수직축의 gradient update속도는 빠름->느림
수평축에 대해서는 느림->빠름
RMSProp>
decay_rate term을 도입함으로써 adagrad의 단점이었던 stepsize가 0이 되어서 학습이 종료되는 경우가 사라짐.
ada,rms가 다른 것들보다는 빠르게 convergence한다.
adam>
RMSProp과 모멘텀개념
dx->m
어떤것도 최적이라고 할 수는 없고, 최근 default는 주로 adam
위에서 언급한 것들은 모두 first order optimization methods
Second order optimization methods는
Hessian도입해서 곡면을 구성. newton method
no 하이퍼파라미터. 그러나 현실적으로는 불가능 computation이 너무 크므로.
그럼에도 불구하고 사용해보자는 개념이 BGFS,L-BFGS
L-BFGS는 모든 노이즈제거후 사용해야되며 full-batch에서는 작동하지만 mini-batch에서는 잘 사용하지 않는다.
ensemble(앙상블)>
단일모델대신 복수개의 독립적인 모델을 학습해서 평균을 내주면 성능이 향상 된다.
단점은 training시 오래걸림
여러개의 모델이 아니라 단일 모델내에서 checkpoints들 간에 앙상블을 하더라도 성능향상 가능
파라미터 벡터간에 앙상블도 성능향상을 가져온다.
Dropout(Regularization)>
일부노드들을 0으로 설정해서 연결이 끊긴거와 같게 한다. (forward pass시)
왜 좋은가?
우리 network가 redundancy가 있도록 하나의 노드가 다른 노드까지 유측할 수 있도록하면서 성능향상으로 생각할 수도 있고
일종의 앙상블이라고 생각하기도 한다.
test time일 때는
모든 뉴런을 켜야한다. 그래야 좋은 성능을 낼 수 있다.
Convolution Neural Network
서론