cs231n 강의

cs231n 7강 정리

삼선차니 2022. 5. 21. 20:58

7강의 주제는 6강에 이어 NN을 학습시키는 것들에 대한 설명이다

 

1. Parameter Updates

- weight 값을 최적화 시키는 방법들이다

- 아래 그림을 보자

Optimization 코드와 이미지

- 이전에 SGD 방식을 배웠지만 몇가지 단점이 있다

- SGD 단점 

  1. 일반적으로 update 속도가 느림
  2. Local minima - Gradient 값이 0 인 경우 update 가 멈춘다
  3. Saddle point - Gradient 값이 0 에 가까울 만큼 작아 update 가 굉장히 느리다

- 이러한 단점을 해결하기 위한 방법이 있다

 

1) SGD + Momentum

SGD 와 SGD+Momentum의 식 & 코드

- Momentum 은 물리에서 운동량의 개념이다

- 공이 언덕을 내려오다가 기울기가 0인 지점을 만나도 계속 내려오던 속도 때문에 그 지점을 지나 계속 굴러간다.

- update 가 멈추거나 굉장히 느려져도 Momentum 으로 인해 계속해서 update 는 진행된다

 

 

2) Nestero Momentum 

- Momentum 의 변형이다

Momentum 과 Nestero Momentum

- Momentum 은 VelocityGradient 모두 직전지점에서의 합벡터로 다음 스텝의 지점을 구한다

- Nestero Momentum 은 직전지점의 Velocity 벡터의 종착점을 예상하고 그 지점에서의 Gradient 벡터를 합하여

  다음 스텝의 지점을 구한다

 

3) AdaGrad update

- grad_squared 를 이용한다

- 기울기의 제곱값을 이용한다

AdaGrad 코드

4) RMSProp

- AdaGrad의 문제를 개선했다

RMSProp 코드

5) Adam

- RMSProp + Momentum 형태이다

- Adam의 성능이 최고다

- Adam은 실제로 많이 쓰인다

Adam 코드

 

6) 공통점 

- 위의 방법들 모두 Learning rate를 Hyperpatameter 로 가진다
- 최적의 Learning rate 를 찾기 위해선 시간이 지남에 따라 Learning rate 를 decay 시켜야 된다
- decay 시키는 방법

  1. step decay - epoch를 돌 때마다 일정한 간격으로 학습률을 감소시킨다
  2. exponential decay
  3. 1/t decay

Learning rate 와 decay 방법

 

7) First-Order optimization method

- 선형 Gradient 를 이용해서 하는 방법을 First-Order optimization method 이라고 한다

First-Order optimization method

 

8) Second-Order optimization method 

- Hessian 사용한다

- Learning rate 필요하지 않다

- convergence 가 매우 빠르다

- Learning rate 같은 Hyperparameter 가 필요하지 않다

- 하지만 Deep NN 에서는 비실용적이어서 사용하지 않는다
- 방법으로는 BGFS, L-BFGS 가 있다

Second-Order optimization method

 

2. Model Ensembles

- 만든 NN 모델을 평가하는 방법이다

- 방법

  1. 여러 개의 독립적인 Model 들을 학습 시킴
  2. 테스트 time 에서 그들의 결과에 평균을 냄

- 성능이 약 2% 정도 향상 된다
- 여러개의 모델을 관리해야한다

- 테스트 대상이 많아 테스트 속도가 느리다

 

 

3. Regularization

- train data에 모델이 overfitting 되는 것을 줄이고 다른 data 에서도 잘 작동시키기 위해서 Regularization을 사용한다

- 그 방법은 몇가지 있다

 

1) Dropout

- Dropout 은 NN 에서 일부노드를 랜덤하게 0 으로 만들어 노드 스위치를 꺼버린다

- epoch를 돌때마다 forward pass 에서 꺼지는 노드는 계속 랜덤하게 변한다

- 장점

  1. 하나의 노드가 지워진 노드들의 역할도 조금씩 부담하면서 성능이 좋아진다 (redundancy(중복성)을 줄인다)
  2. Ensemble 의 효과를 낸다

Regularization: Dropout

- 일반적으로 test data 를 평가할때는 Dropout 을 하지 않고 모든 노드를 켜고 실행한다

- test 할 때는 무작위성을 평균화시켜 일반화 효과를 준다

 

2) 이외에 방법

- 이외에 Regularization 의 방식에는 아래것들이 있다

  • Data Augmentation
  • DropConnect
  • Max pooling & Stochastic depth

 

- 정리하면

- 보통 Batch Normalization 으로 충분하지만 일부 overfitting이 심하면 Dropout을 추가한다

 

 

 

4. Training transferring

- CNN 학습시키는데 많은 data가 필요하다는 편견을 깨주는 내용이다

- 방식을 쉽게 설명하면 

  1. Imagenet 과 같은 큰 Dataset을 가져와 모델을 학습시킨다
  2. 학습시킨 모델에 우리가 가진 Dataset 을 적용시켜 학습시킨다

Training transferring 구현 예시

- Training transferring 은 많이 이용한다

- 이유는 다시 모델을 만드는 것은 시간, 비용이 너무 많이 들기 때문이다

Training transferring 사용 예시

- Object Detection, Image Captioning 등 Training transferring 을 사용하는건 흔하다는 내용이다

- 빨간 박스에 있는 것들이 ImageNet 을 통해 미리 학습된 CNN 모델 이다

- 그 모델을 가져다가 각 분야에 맞게 적용하여 사용하는 걸 볼 수 있다

 

 

 

여기까지가 NN 을 학습시키는 방법이다.