cs231n 7강 정리
7강의 주제는 6강에 이어 NN을 학습시키는 것들에 대한 설명이다
1. Parameter Updates
- weight 값을 최적화 시키는 방법들이다
- 아래 그림을 보자
- 이전에 SGD 방식을 배웠지만 몇가지 단점이 있다
- SGD 단점
- 일반적으로 update 속도가 느림
- Local minima - Gradient 값이 0 인 경우 update 가 멈춘다
- Saddle point - Gradient 값이 0 에 가까울 만큼 작아 update 가 굉장히 느리다
- 이러한 단점을 해결하기 위한 방법이 있다
1) SGD + Momentum
- Momentum 은 물리에서 운동량의 개념이다
- 공이 언덕을 내려오다가 기울기가 0인 지점을 만나도 계속 내려오던 속도 때문에 그 지점을 지나 계속 굴러간다.
- update 가 멈추거나 굉장히 느려져도 Momentum 으로 인해 계속해서 update 는 진행된다
2) Nestero Momentum
- Momentum 의 변형이다
- Momentum 은 Velocity 와 Gradient 모두 직전지점에서의 합벡터로 다음 스텝의 지점을 구한다
- Nestero Momentum 은 직전지점의 Velocity 벡터의 종착점을 예상하고 그 지점에서의 Gradient 벡터를 합하여
다음 스텝의 지점을 구한다
3) AdaGrad update
- grad_squared 를 이용한다
- 기울기의 제곱값을 이용한다
4) RMSProp
- AdaGrad의 문제를 개선했다
5) Adam
- RMSProp + Momentum 형태이다
- Adam의 성능이 최고다
- Adam은 실제로 많이 쓰인다
6) 공통점
- 위의 방법들 모두 Learning rate를 Hyperpatameter 로 가진다
- 최적의 Learning rate 를 찾기 위해선 시간이 지남에 따라 Learning rate 를 decay 시켜야 된다
- decay 시키는 방법
- step decay - epoch를 돌 때마다 일정한 간격으로 학습률을 감소시킨다
- exponential decay
- 1/t decay
7) First-Order optimization method
- 선형 Gradient 를 이용해서 하는 방법을 First-Order optimization method 이라고 한다
8) Second-Order optimization method
- Hessian 사용한다
- Learning rate 필요하지 않다
- convergence 가 매우 빠르다
- Learning rate 같은 Hyperparameter 가 필요하지 않다
- 하지만 Deep NN 에서는 비실용적이어서 사용하지 않는다
- 방법으로는 BGFS, L-BFGS 가 있다
2. Model Ensembles
- 만든 NN 모델을 평가하는 방법이다
- 방법
- 여러 개의 독립적인 Model 들을 학습 시킴
- 테스트 time 에서 그들의 결과에 평균을 냄
- 성능이 약 2% 정도 향상 된다
- 여러개의 모델을 관리해야한다
- 테스트 대상이 많아 테스트 속도가 느리다
3. Regularization
- train data에 모델이 overfitting 되는 것을 줄이고 다른 data 에서도 잘 작동시키기 위해서 Regularization을 사용한다
- 그 방법은 몇가지 있다
1) Dropout
- Dropout 은 NN 에서 일부노드를 랜덤하게 0 으로 만들어 노드 스위치를 꺼버린다
- epoch를 돌때마다 forward pass 에서 꺼지는 노드는 계속 랜덤하게 변한다
- 장점
- 하나의 노드가 지워진 노드들의 역할도 조금씩 부담하면서 성능이 좋아진다 (redundancy(중복성)을 줄인다)
- Ensemble 의 효과를 낸다
- 일반적으로 test data 를 평가할때는 Dropout 을 하지 않고 모든 노드를 켜고 실행한다
- test 할 때는 무작위성을 평균화시켜 일반화 효과를 준다
2) 이외에 방법
- 이외에 Regularization 의 방식에는 아래것들이 있다
- Data Augmentation
- DropConnect
- Max pooling & Stochastic depth
- 정리하면
- 보통 Batch Normalization 으로 충분하지만 일부 overfitting이 심하면 Dropout을 추가한다
4. Training transferring
- CNN 학습시키는데 많은 data가 필요하다는 편견을 깨주는 내용이다
- 방식을 쉽게 설명하면
- Imagenet 과 같은 큰 Dataset을 가져와 모델을 학습시킨다
- 학습시킨 모델에 우리가 가진 Dataset 을 적용시켜 학습시킨다
- Training transferring 은 많이 이용한다
- 이유는 다시 모델을 만드는 것은 시간, 비용이 너무 많이 들기 때문이다
- Object Detection, Image Captioning 등 Training transferring 을 사용하는건 흔하다는 내용이다
- 빨간 박스에 있는 것들이 ImageNet 을 통해 미리 학습된 CNN 모델 이다
- 그 모델을 가져다가 각 분야에 맞게 적용하여 사용하는 걸 볼 수 있다