Parameter Update
SGD : 너무 느려서 실제 상황에선 쓰기 힘들다.
느린 이유 : loss function 이 수직으로는 경사가 급하기 때문에 빨리간다. 수평으론 반대로 느리게 간다. 지그재그로 가기 때문에 느리게 된다.
이런 문제를 개선하는 방법 :
Momentum Update : Gradient descemt 에선 x 의 위치 직접 Update , Momentum Update에선 v (속도 , 0.5,0.9) 를 업데이트하여 x를 Update한다.
If 언덕에서 공을 굴릴 때 :
Gradient : 가속도에 비례
mu : 마찰 계수 -> 점차 속도가 느려진다. ( 경사가 급하지 않을 때 갈 수록 빨라진다 , 경사가 급할 때 minimum 을 지나갔다가 다시 돌아온다. )
초반엔 Overshooting 발생 but minumum 에 더 빨리 도착한다.
Nesterov Momentum update
Momentum 은 두가지로 나뉘어진다. mu * v(momentum step), lr*gradient ( gradient step )
Neserov momentum update : momentum step 이동한 걸로 예상된 시점 을 시작점으로 취한다.
nag : Nesterov Accelerated Gradient -> 방향을 예측하기때문에 빠르다.
AdaGrad
cache 도입 , SGD같아 보이지만 cache(양수,계속 증가, parameter 와 동일한 size의 vector )에 루트를 씌워 나누어준다. ( per - parameter adaptive learning rate method : 파라미터별로 다른 lr 제공 )
수직축 : Gradient 가 커진다. -> cache값 커진다. -> x의 Update 속도 느림
수평축 : Gradient 가 작다. -> cache 값 작아진다. -> x 의 Update 속도 빠르다.
--> 경사에 경도되지 않는다.
문제점 : step size 가 시간에 흐름에 따라 cache 값이 계속 증가 한다. 따라서 lr 0에 매우 가까운 값이 된다. nueral network 에선 학습이 종료 될 수도 있다. -> energy 제공해야한다.
RMSProp update
decary_rate 도입 0.9 0.99 , cache 값이 서서히 줄어든다. AdaGrad 장점을 가지고 단점 보완
일반적으로 adagrad 는 stepsize 이 0이 되기때문에 조기에 stop되는 경우가 많다.
rmsprop 이 빠르고 끝까지 진행된다 .
Adam update :
bias correction : 최초의 m 과 v가 0으로 초기화 되었을때 warm-up
질문 : Learning rate를 hyperparameter 로 가지는데 어떤 Learning rate를 가져야 할까?
답 : 어떤것도 최선은 아니다. 처음엔 큰 lr 서서히 lr 을 decay 하여 값을 작게 만든다.
step decay : epoch 마다 줄인다.
일반적으로 Adam 을 사용한다.
loss function 을 구하는데 있어서 gradient 정보만 사용 . 1st order method
Second order optimization methods:
Hessian 을 통해 경사 뿐만 아니라 곡면이 어떻게 구성되어있는지 알 수 있다 .( 학습 할 필요 없이 바로 minumum 알 수 있다. )
learning rate도 필요가 없다.
장점 : 수렴이 매우 빠르다 . learning rate 같은 하이퍼 파라미터는 불필요 하다.
단점 : Deep Neural Nets에서 현실적으로 사용하기 힘들다. 엄청나게 큰 행렬,역행렬 연산 힘들다.
L-BFGS
모든 소스의 noise 제거 후 사용 , 일반적으로 full batch 에서 잘 동작 , batch 일땐 작동 x
대부분 Adam , full batch 일땐 L-BFGS 도 사용 가능
Model Ensembles
복수개의 단일 모델 학습 -> test time 때 이들의 결과를 평균 -> 2% 정도 향상
단점 : train 할 때 모델이 여러개이기 때문에 여러개의 모델 관리 필요 , test 시 linear 하게 속도가 느려진다 .
Fun Tips/Tricks
여러개의 모델이 아니라 단일 모델 내에서 한 epoch 을 돌때마다 체크포인트 생성 , 체크포인트들간 앙상블해도 성능 향상
parameter vector들 간에 앙상블도 성능향상
성능향상 이유 : step size 가 크기 때문에 지나치는 경우가 있을 수 있다. step들을 하나하나를 average 하게 되면 minumum에 가장 근접
Dropout ( Regularization )
: 성능향상
드랍아웃을 하게 되면 일부 Node 를 0으로 설정 ( random 하게 )
Dropout ratio : 0.5
Hidden layer 1 에서 linear 연산 ( Relu ) 후
U1 0.5 보다 작으면 0 , 0.5 보다 크면 1
H1 *= U1 -> 1이면 그대로 0이면 0
(* tuple -> unpack )
backward pass 일 때도 똑같이 적용
뉴런 0 이면 weight update X
Dropout 이 좋은 이유
: 모든 노드가 살아있으면 중복을 가지게 된다. 하나의 없어진 노드까지 학습
하나의 앙상블로 볼 수 있다. 동일한 parameter를 공유하는 모델로 생각
test 일 때
Monte Carlo approximation:
test 시에도 dropout 그대로 사용 -> 각각의 dropout에 대해서 평균을 내서 예측 -> 비효율적이다.
Dropout 사용 X
질문 : test 일 때 X 라는 Output . 만약 p = 0.5 라면 우리가 얻을 수 있는 training time 일 때 얻을 수 있는 결과값의 기대치는 ?
test time 때 training time 만큼 scaling 해줘야한다.
training 때 scaling해준다
Convolutional Neural Networks
Lenet vs AlexNet :
Lenet activation function -> tanh, Alex-> Relu, AlexNet이 Batch normalization 이 잘되었고, weight 초기화
AlexNet 나온 후 실생활에 적용
Detection : 하나의 Image 에서 여러 개의 object 를 찾는다.
Segmantation : Object 의 형태를 따낸다.
'딥러닝 공부' 카테고리의 다른 글
[cs231n 강의 정리] Lecture 7 : CNN (0) | 2021.06.20 |
---|---|
[cs231n 강의 정리] Lecture 5 : Training NN part 1 (0) | 2021.05.17 |
[cs231n 강의 정리] Lecture 4 : Backpropagation and Neural Networks part 1 (0) | 2021.05.16 |
[cs231n 강의 정리] Lecture 3 : Loss functions and Optimization (1) | 2021.05.15 |
[cs231n 강의 정리] Lecture 2 : Image classification (0) | 2021.05.15 |