부스트캠프 AI Tech

3주차 - 최적화

이니니 2022. 10. 5. 16:10

3강. Optimization

 

Important Concepts in Optimization

Generalization : 일반화 성능을 높이는 것이 우리의 목적이다. 

일반적으로 학습을 시킬 때, iteration이 진행됨에 따라서 train data에 대한 error는 점점 줄어들게 된다. 하지만, training error가 줄어든다고해서 test error가 줄어든다는 말은 아니다. 일반적으로는 학습이 계속 진행됨에 따라서 training error는 계속해서 줄어들지만, test error는 줄어들다가 어느 지점부터 다시 높아지게 된다. 

Generalization gap은 training error와 test error의 차이이다. 즉, generalization이 좋다는 의미는 generalization gap이 작다는 의미이다. 다만, training error가 높은 경우는 generalization이 좋아도 성능자체가 좋진 않을 것이다.

 

Underfitting / Overfitting

train data에 대해서는 잘 동작하지만, test data에 대해서는 잘 동작하지 않는 현상을 overfitting이라고 한다. 네트워크가 너무 간단하거나 train을 많이 시키지 않아 train data조차도 잘 맞추지 못하는 것을 underfitting이라고 한다. 

 

cross-validation (k-fold validation)

train data와 test data를 나눈 후, train data를 k개로 나눈 후, 1개의 data를 validation data로 사용하고 나머지 k-1개의 data를 train data로 사용한다. 이 과정을 k번 반복하는 것이다.

보통 hyperparameter tuning을 할 때, cross-validation을 통해서 최적의 hyperparameter를 찾는다. 학습 시킬 때에는 이 hyperparameter를 고정시킨 후, 전체 data로 학습을 시킨다.

여기에서 test data는 train을 할 때 절대로 사용되어서는 안된다.

 

Bias & Variance

variance란, 입력을 주었을 때 출력이 얼마나 일관적인지를 말한다. Bias란, 입력을 주었을 때 출력이 내가 원하는 값에 모여 있는지를 말한다.

 

Bagging vs Boosting

bagging은 train data를 여러 개의 모델에 넣은 후 그 여러 개의 결과값을 평균을 내는 방법을 말한다. 앙상블이 bagging에 속한다. 하나의 모델을 사용했을 때보다 이렇게 앙상블 방식을 사용할 경우 더 좋은 성능을 보이는 것이 일반적이다.

boosting은 여러 개의 모델을 만든 후, 이 모델들이 종속적으로 다른 모델들에 영향을 끼쳐 결과 값을 만들어내는 것이다.

 

 

Gradient Descent Methods

  • Stochastic gradient descent : single sample을 통해 gradient를 업데이트 하는 방법
  • Mini-batch gradient descent : 총 data 중 몇 개를 사용해서 gradient를 업데이트 하는 방법
  • Batch gradient descent : 모든 data를 사용해서 gradient를 업데이트 하는 방법

딥러닝에서는 대부분 mini-batch gradient descent를 활용하게 된다.

 

Batch-size matters

batch size를 크게 할 수록 sharp minimizer에 가까워지고, 작게 할 수록 flat minimizer에 가까워진다. 보통 sharp보다는 flat에 도달하는 것이 더 좋다. 그 이유는, training function과 testing function에서 flat minimum는 큰 차이를 보이지 않지만, sharp에서는 조금만 달라져도 큰 차이를 보이기 때문이다.

 

stochastic gradient descent

W는 weight를 의미한다. g는 gradient를 의미한다. gradient descent는 gradient에 learning rate를 곱해준 후, weight에서 이것을 뺀 것을 말한다. 이것의 문제점은 step size를 정하기 어렵다는 것이다.

 

momentum

이전 gradient의 방향을 어느정도 유지시켜주기 때문에, 어느 정도 잘 학습이 되는 효과가 생긴다.

 

Nesterov Accelerated Gradient (NAG)

gradient를 계산할 때, lookahead gradient를 계산하는 것이다. 이는 local minimum에 조금 더 빨리 도달하는 효과를 보인다.

 

adagrad

neural network의 parameter가 얼마나 변해왔는지, 변하지 않았는지를 토대로 결정한다. parameter가 많이 변해왔다면, 적게 변화시키고, 변화되지 않은 parameter에 대해서는 많이 변화시킨다. 

학습이 되면 될수록, G가 너무 커지므로 W가 더이상 업데이트 되지 않게 되는 문제점이 생긴다.

 

adadelta

adagrad가 가지는 문제점을 막기 위해 나타났다. 아래와 같은 식을 통해 G를 업데이트해준다. adadelta는 learning rate가 없다는 것이 가장 큰 특징이다. 바꿀 수 있는 부분이 많이 없기 때문에 많이 쓰이지는 않는다.

 

RMSprop

adagrad와 비슷하지만 stepsize를 넣어주었다. 성능이 괜찮았다.

 

Adam

 

 

Regularization : 학습을 방해함으로써 train data뿐만 아니라, test data에도 잘 적용되게 하는 것

 

Early stopping

학습을 중간에 멈추는 것이다. 학습을 할 때, validation error를 사용해서 loss가 커지기 시작할 때, 멈춘다.

 

Parameter Norm Penalty

parameter가 너무 커지지 않게 하는 것이다.(크기 관점) parameter들을 제곱한 다음, 더한 것 숫자를 줄이는 것이다. 부드러운 함수일수록 generalization performance가 높을 것이라고 가정한다.

 

Data augmentation

dataset을 늘리는 것이다. 라벨이 변하지 않을 한도까지 변화시키는 것이다.( ex. 조금 회전시키거나 뒤집는 것 )

 

Noise Robustness

input data에 noise를 넣는 것이다. 이 noise는 weight에도 넣어서 학습을 시킨다. 그렇게 하면 결과가 좋을 것이라는 가정을 한다.

 

Label smoothing

data를 두 개를 뽑아서, 이 두 개를 섞어주는 것이다. decision boundary를 부드럽게 만들어주는 효과가 있다.

mixup 방법론은 생각보다 효과가 좋다.

 

Dropout

일부 weight를 0으로 바꾸어주는 것이다. 일반적으로 dropout을 사용하면 성능이 많이 올라간다.

 

Batch normalization

적용하고자하는 layer에 statics를 정규화 시키는 것이다. 


회고

모델 최적화를 위한 다양한 방법론들을 배웠다. 자세한 설명은 하나하나 찾아보는 것이 좋을 것 같다.


위 내용은 부스트캠프 AI Tech 에서 제공한 내용을 바탕으로 작성하였습니다.

'부스트캠프 AI Tech' 카테고리의 다른 글

[NLP] Intro to NLP  (0) 2023.04.06
3주차 - CNN (Convolutional Neural Network)  (1) 2022.10.06
3주차 - 딥러닝 기본  (0) 2022.10.04
2주차 - PyTorch 구조 학습하기  (0) 2022.09.30
2주차 - Pytorch 기본  (0) 2022.09.29