AI Tech - Optimization

YeonJu Kim·2021년 8월 13일
0

Boostcamp AI Tech 2nd

목록 보기
9/13
post-thumbnail

Optimization

용어에 대해 명확한 개념을 잡고 넘어가자.

Important Concepts in Optimization

1. Generalization

Generalization gap : 학습데이터의 Training error와 테스트데이터의 Test error의 차이

일반적으로 어느 정도 시간이 지나면, 학습에 사용하지 않은 test error 성능이 오히려 떨어지게 된다.

Generalization의 퍼포먼스가 좋다 = 네트워크 성능이 학습 데이터와 비슷하게 나온다

Q. generalization 성능을 높이면, 모델의 성능이 무조건 좋은가?

-> 학습 데이터 성능 자체가 좋지 않으면, generalization 퍼포먼스가 좋아도 test data의 성능이 좋다고 할 수 없다.

2. Under-fitting vs Over-fitting

underfitting : 네트워크가 지나치게 간단하거나, training을 조금만 시켜서 학습 데이터도 제대로 맞지 않는 현상

overfitting : 학습 데이터에 대해서는 잘 동작하지만, test 데이터는 그렇지 않는 현상

training data가 학습하고자 하는 목적에서 나오는 data라고 가정하고 있을 뿐, 실제로는 overfitting이 target일 수 있기 때문에, 1차 회귀 문제를 풀기 위해서 나오는 다소 concept적인 얘기라 볼 수도 있다.

3. Cross Validation (K-fold Validation)

학습 데이터로 학습시킨 모델이, 학습시키지 않은 validation data 기준으로 얼마나 성능이 좋은지 확인하는 것. 학습 데이터를 K개로 나누고 K-1개는 학습, 1개로 validation check하는 과정을 K번 반복한다.

학습시 어떤 방법으로든 test data를 사용하면 안된다

neural network 학습시, 많은 hyperparameter 가 존재하는데, cross-validation으로 최적의 hyper parameter를 찾은 후 고정시키고, 학습시킬 때 all 데이터를 활용한다.

4-1. Bias and variance

underfitting, overfitting과 이어지는 개념. bias란 mean 값이 true target에 얼마나 접근했는지, variance란 비슷한 입력값일때, 출력이 얼마나 일관적인지를 나타내는 개념이다.

bias가 높으면 target이 mean에서 많이 벗어났다는 의미이고, variance가 높으면 overfitting 가능성이 커진다

4-2. Bias-variance tradeoff

tt : 노이즈 있는 target data

f^\hat{f} : neural network 출력값

학습 데이터에 노이즈가 있다고 가정했을 때, 노이즈가 있는 target 데이터를 minimize하는 방법은 bias, variance, noise 3가지를 minimize 하는 것이다

이 때, bias가 높아지면 variance는 낮아질 가능성이 높아 bias와 variance 둘 다 minimize하는 것은 사실상 힘들다.

5. Bootstrapping

학습 데이터가 고정되어 있을 때, subsampling을 통해서 학습 데이터를 여러 개 만들어 여러 모델을 만드는 것

ex) 학습 데이터 100개 중, 80개로 이루어진 5개의 모델을 만들고, 하나의 입력에 대해 각 모델이 예측하는 값의 일관성이 얼마나 일치하는지, 전체적인 모델의 uncertainty를 예측

6. Bagging and Boosting

Bagging(Bootstrapping aggregating)

  • 학습 데이터가 고정되어 있을 때, 학습 데이터를 여러 개 만드는 것. 여러 모델을 random subsampling해서 만들고 , 여러 모델의 output으로 voting 또는 averaging하는 방법론
  • bootstrapping으로 데이터 여러 셋 만들고, 각각의 독립적 모델을 만들어 결과를 얻는다
  • 하나의 모델보다, subsampling을 통해 여러 모델을 만드는 것이 더 좋은 성능을 낼 때가 많다

Boosting

  • 학습 데이터를 sequential하게 바라보고 간단한 모델을 만든 후, 학습 데이터에 대해 test를 해 본다

    제대로 예측되지 않은 data로 두 번째 모델을 만든 후 마찬가지로 test를 해본다.

    이런 방식으로 여러 모델을 만들고, 하나하나의 모델을(weak learner) 하나의 strong learner로 만든다

  • 이 때 만들어진 weak learner는 독립적 결과로 보지 않는다

Practical Gradient Descent Methods

  • Stochastic gradient descent : n개의 데이터 중 한번에 하나의 gradient를 구하고 update
  • Mini-batch gradient descent : batch size만큼 sample 활용해서 gradient를 구하고 update
  • Batch gradient descent : 한번에 모든 data로, 모든 gradient 평균을 구해 update

Batch-size Matters

Flat minimum : training function에서 다소 멀어져도, testing function값과 크게 다르지 않음.

=> generalization 퍼포먼스가 좋다. train data에서 성능이 좋으면, test data에서도 어느정도 성능을 보장한다

Sharp minimum : generalization 퍼포먼스가 좋지 않다. training 단계에서 얻어지는 값이 test data 기준으로는 잘 동작하지 않을 수 있다.

  • "It has been observed in practice that when using a larger batch there is a degradation in the quality of the model, as measured by its ability to generalize."

(batch size가 작은 경우가 일반적으로 성능이 더 좋다)

  • "We ... present numerical evidence that supports the view that large batch methods tend to converge to sharp minimizers of the training and testing functions. In contrast, small-batch methods consistently converge to flat minimizers ... this is due to the inherent noise in the gradient estimation."

(sharp minimizer < flat minimizer)

On Large-batch Training for Deep Learning: Generalization Gap and Sharp Minima, 2017

batch size를 줄일 경우, 일반적으로 generalization performance가 좋아지고, large batch size를 어떻게 활용하면 좋을지, 테크닉을 알려주는 실험적 논문

Gradient Descent Methods

pytorch나 tensorflow에서 loss function을 구한 후 gradient를 계산할 때, automatic하게 미분 계산을 해주는데, 이 때 적절한 optimizer를 골라야 한다.

1. Stochastic gradient descent

W : neural network의 weight

적절한 learning rate 값을 잡는것이 어렵다. (1)

2. Momentum(관성)

똑같이 gradient information만 활용해도, 더 빨리 더 좋은 성능의 모델을 학습시킬 수 없을까? (1)을 발전시켜보자.

momentum은, 한번 gradient가 특정 방향으로 흐르면, 다음 번 gradient가 다소 다르게 흘러도 동일한 방향으로 흐르는 정보를 이어가는 방법론이다.

mini batch 사용시, 다음 번 batch는 동일한 방향으로 흐르지 않을 수도 있지만, 이전 batch의 정보를 활용한다.

momentum + 현재 gt를 합한 값으로 update (momentum이 포함된 gradient)

3. Nesterov accelerated gradient

momentum의 경우 현재 주어져 있는 parameter에서 gradient를 계산하고, 그 값으로 momentum을 accumulate 한다. 이 경우, local minimum으로 수렴하지 못하는 경우가 생길 수 있다. gradient만큼 하강시켰는데, local minimum을 지나친 값이라면 그 지나간 방향대로 흘러가기 때문이다.

NAG는 한번 지나간 점에서 gradient를 계산하게 된다. local minimum을 지나치게 되어도, 지나친 점에서 다시 gradient를 계산하기 때문에 momentum보다 빨리 local minimum에 수렴하게 된다

4. Adagrad

neural network의 parameter가 지금까지 얼마나 많이 변해왔는지를 계산한다.

neural network의 parameter가 많이 변한 경우, 더 적게 변화시키고, parameter가 적게 변한 경우 더 많이 변화시킨다. (Wt+1과 Gt는 반비례)

이 때 입실론 값은, zero division을 방지하는 값이다.

Gt는 각 parameter가 얼마나 변했는지에 대해 sum한 값이기 때문에 무한대로 커질 수가 있다. Gt가 무한으로 수렴하게 되면 Wt는 더이상 update되지 않는, 갈수록 학습이 멈추는 현상이 발생한다.

5. Adadelta

Gt가 무한으로 수렴할때 학습이 멈추는 현상을 방지하기 위해, EMA(Exponential Moving Average)로 Gt를 업데이트 하는 방법론이다.

(time window만큼의 값을 저장하고 있는 값)

gt는 모든 parameter에 대한 gradient 값을 가지고 있다.

만약 window size를 100으로 잡게 되면, 이전 100개의 gradient 정보를 가지고 있어야 한다.

이부분 다시 정리해야함..

6. RMSprop

RMSprop의 경우 논문을 통해 제안되었 것은 아니고, Geoff Hinton의 딥러닝 강의에서 나왔던 것이라고 한다.

gradient squares를 활용한 EMA에, step size를 추가한 방법론이다

7. Adam

현재 가장 잘 되고, 가장 무난히 사용되는 optimizer이다.

gradient의 크기 변화에 따라, gradient square의 크기에 따라 adaptive하게 (1)learning rate를 바꾸고, 이전 gradient 정보에 해당하는 (2)momentum을 합하는 방법이다.

Adam의 hyperparameter는 (1) momentum을 얼마나 잘 유지시키는지, (2) gradient square에 대한 EMA 정보, (3) learning rate, (4) 입실론 값(zero division) 총 4개이다.

캠퍼분이 올려주신 정리!

SGD, momentum, Adam 등 직접 구현하기 보다, 적절히 사용하는 것을 목표로 하자

Regularization

neural network를 학습시킬 때 사용하는 일종의 도구, 학습을 방해하기 위한 방법론으로, generalization performance를 높이는 것이 목적이다. 이 때 학습을 방해한다는 의미는, 모델이 학습 데이터에서만 잘 동작하는 것이 아니라, 테스트 데이터에서도 잘 동작하도록 한다는 의미이다.

1. Early stopping

loss가 어느 시점보다 커지기 시작하는 때 학습을 멈춤

2. Parameter norm penalty

neural network가 만들어 내는 function space에서, 최대한 부드러운 functino이 generalization performance를 높인다는 개념.

네트워크의 parameter squre값의 합을 줄이고, 학습시 W가 작으면 작을수록 좋다.

3. Data augmentation

만약 데이터 수가 무한히 많다면, 모델의 성능은 웬만하면 매우 좋을 것이다.

하지만 데이터의 수가 충분하지 않다면, 아무리 딥러닝을 잘 해도 모델의 성능이 좋지 않을 가능성이 높아, 기존 ML에서 사용하던 방법론의 performance가 더 좋아진다.

이 때, data augumentation이 필요해진다.

이미지 데이터의 경우, 회전, 대칭 등으로 데이터를 늘일 수 있다. 단 변화를 해도 이미지 label이 바뀌지 않는 한도 내에서 변화시켜야 한다.

4. Noise robustness

data augumentation과의 차이점은 입력 데이터뿐 아니라 neural network에도 noise를 추가하는 방법이다. 성능이 높아지는 이유에 대해서는 아직 의문점이 많다.

5. Label smoothing

data augumentation과 비슷한 방법론으로, 2개의 random 데이터를 뽑고, 섞어 성능을 높인다.
분류문제에서, 내 image가 있는 공간 속 decision 바운더리를 찾아서, 해당 바운더리로 두 class 분류를 잘 되게 하는것이 목적이다

mixup : 두 이미지를 골라 blending하게 섞고, label 또한 mix한다

cutout : 일정 영역을 제외한다

CutMix : 특정 영역을 기준으로 이미지를 혼합한다.

6. Dropout

neural network의 일부 뉴런 W값을 0으로 바꾸는 것.

만약 dropout ratio = 0.5라면, 레이아웃마다 뉴런의 50% 가중치를 0으로 바꾼다

7. Batch normalization

각 layer에 대해 평균과 분산을 독립적으로 계산하고 정규화하는 방법론이다.

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift, 2015

Internal Covariate(feature) Shift 에 대해 논란이 있지만, 일반적으로 (특히 layer가 깊은 경우) BN을 사용하면 네트워크가 잘 학습되어 성능이 개선된다.

여러 optimizer에 대해 간략히 공부해 보았는데, 수학적 증명, 해석보다 각각의 optimizer의 특성을 알고 어떻게 쓸 것인지에 대해 더 생각해보자....

0개의 댓글