본문 바로가기

머신러닝 읽어주는 남자

[오직 컨셉]Neural network training

반응형

성능 향상 기법


1. initailize

파라미터 학습도 중요하지만 초기화도 생각보다 중요하다.

초기화를 잘못하면 학습이 시작조차 되지 않는다. 특히 deep할때는 이게 중요하다.

하다보면 cost가 nan으로 별이유 없이 가버릴때 아래 방법을 쓰면 효과적이다. 


(1) Xavier initialization (Glorot)


의미: 뉴런에 들어오는 입력이 많아지면 자연스레 출력도 커지게 된다. 이런식으로 계속 커지다간 발산 크리를 먹을 수 있으니 입력 숫자 만큼 작게 초기화를 해보자


초기화 식

유니폼: [-√(6/(fan_in+fan_out )),√(6/(fan_in+fan_out ))]

가우시안: N(0,√(1/(fan_in )))


(2) HE initialization

의미: Xavier와 같은 의미지만 Relu 특화 용이다. 보통 Relu의 출력이 반은 0이므로, Xavier보단 2배 더 크게 initialize 해줘도 됨 

초기화 식

N(0,√(2/fan_in ))


2. Regularization

L1, L2 regularization

Dropout


3. Batch normalization



4. 여러가지 학습 방법 

Gradient descent: 

순수하게 기울기에 따라서 학습을 하는데, 기울기가 0인 local minima 혹은 saddle point에서 문제가 생김

모든 방법이 이걸 기준으로 발전한 형태이다.


momentum: 

의미 그대로 관성으로 기존 진행방향으로 더 학습을 시키는 방식. 그래서 속도가 좀더 빠르게 된다.

 t번째 update시 [t-1 업데이트 + 기울기]를 고려 


NAG

momentum+ 미리 gradient step을 계산하여 적용하므로 수렴을 좀 더 빠르게한다.


Adagrad

많이 변한 파라미터는 최적값에 가까워졌다고 가정하여 step size를 줄이고, 적게 변한 변수들은 아직 최적값이 멀었다고 가정하여 step size를 크게해준다.


RMSProp, Adamdelta

기본 컨섭은 adagrad와 동일하나 상황을 보면서 이동폭을 좀 더 조절함


Adam

momentum과 adagrad 방법을 잘 섞어 씀.


결론. 

이도 저도 모르겠으면 Adam을 쓰자

왜냐면 당연히 케바케지만 일반적인 퍼포먼스가 제일 좋은 걸로 알려짐.


반응형