본문 바로가기
AI/딥러닝

[Optimization] Generalization , Under-fitting vs Over-fitting , Cross Validation

by 채채씨 2021. 8. 16.
728x90
반응형

 

1. Optimization


Optimization의 핵심 개념을 아래의 순서대로 다루어볼 것이다.

· Generalization
· Under-fitting vs Over-fitting
· Cross Validation
· Bias and Variance Tradeoff
· Bootstrapping
· Bagging and Boosting



■ Generalization

 


Generalization이란 Training Error와 Test Error 간 차이를 말한다. Training Error가 작다고 해서 Test Error가 작은 것은 아니다. 어느 순간 Over-fitting이 되면서 Test Error가 커지기 때문이다. 또한 Generalization gap이 작다고 Test Error가 작다고 말할 수도 없다. Network 성능이 좋지 않아서 Training Error 자체가 크면 Genalization gap이 작을 지라도 Test Error이 크기 때문이다. Generalization은 Training Error와 Test Error사이의 차이라는 것을 기억해두자.



■ Under-fitting vs Over-fitting

 


모델이 Train data에서도 오류를 잘 줄이지 못할 때를 Under-fitting이라고 하며, 주로 학습을 덜 시켰거나 network가 너무 단순할 때 발생한다. 모델이 Train data에서는 잘 작동하나 Test data에서 오류가 클 때를 Over-fitting이라고 한다. 너무 단순하지도 너무 과적합되지도 않도록 balance를 유지해야 한다.



■ Cross Validation

Validation을 만드는 이유는 Test data로 최종 성능을 확인하기 전에 미리 모델의 성능을 평가하기 위해서이다. 이를 통해 자신이 만든 모델이 Unseen data(=Test data)에 대해 잘 작동할 지 혹은 Train dat에 Over-fitting문제는 없는 지 등을 미리 체크해볼 수 있다. Validation data는 최적의 hyper-parameter를 찾기 위한 튜닝을 위해서도 사용하므로 Test data와 달리 Training 과정에 관여한다. 최종 모델이 결정되면 그 모델로 Validation data를 포함한 전체 Train data로 학습을 시킨다.


Cross Validation은 크게 Holdout Cross Validation, K-fold Cross Validation, Leave-p-out Cross Validation
이 3가지로 나뉘며, 여기서는 Holdout Cross Validation과 K-fold Cross Validation 두 가지를 소개할 것이다.


1) Holdout Cross Validation (기본)

 


Train data를 Train data와 Validation data로 나누어서 Train data로 학습된 모델의 최종 성능을 평가하기 전에 Validation data로 모델의 성능을 확인하며, 보통 Train data와 Validation data는 8:2로 나눈다. 그러나 이 방법은 validation data의 편파 문제가 존재할 수 있다.


2) K-fold Cross Validation

 


K-fold Corss Validation은 평가하고자 하는 모델로 k개의 인스턴스를 만들고 Train data를 k개로 나눈 후 fold 1부터 fold k까지 하나씩 Validation data로 지정하여 모델을 학습하고 검증하는 방식을 말한다. fold 1이 Validation data라면 fold 2 ~ fold 5이 Train data가 되는 것이다.

Validation data가 중복되지 않도록 하면서 Holdout Cross Validation을 k번 시행하는 것으로 생각할 수 있다. k-fold cross validation작업이 끝나면 k개의 Validation결과를 평균내어 성능을 파악한다.


· 장점

모든 Train data를 검증에 사용하기 때문에 위의 Holdout Validation이 가지는 Validation data 편중 문제를 보완할 수 있으며, 따라서 더 일반화 가능한 성능이 도출되므로 Unseen data 추론 결과와 유사할 가능성이 높아진다. 동시에 모든 Train data를 학습에 사용하기 때문에 Under-fitting 문제도 방지할 수 있다.


· 검증 과정

  1. 평가하고자 하는 모델로 k개의 객체를 만든다.
  2. Dataset을 Training data와 Test data로 나눈다.
  3. Train data로부터 Validation data를 만들기 위해 Train data를 k개의 fold로 나눈다.
  4. i번째 fold를 Validation data로 지정하고 나머지 fold는 Train data로 사용한다.
  5. Train data로 모델을 학습한 후, Validation data로 검증한다.
  6. 다음 i+1번째 fold를 Validation data로 지정하고 나머지 fold를 Train data로 사용한다. 이것을 k=i일 때까지 반복한다.
  7. k개의 성능 결과를 평균내어 모델의 성능으로 본다.




■ Bias and Variance Tradeoff

먼저 BiasValidation이 무엇인지 살펴보자.

 

Bias and Variance 설명


위의 과녁을 보면 Bias는 data가 얼마나 퍼져있는 지와 관계없이 가운데(정답) 근처에 분포하는지에 따라 Low Bias와 Hight Bias로 나뉜다. 반면에 Variance는 data가 가운데(정답) 근처에 있는지와는 관계없이 퍼져있는지 한 곳에 모여있는지에 따라 Low Variance와 High Variance로 나뉜다. 즉, Bias는 예측이 얼마나 정확한지를 나타내는 지표이며, Variance는 예측이 얼마나 일관적인지를 나타내는 지표이다. 통계학 용어로 말하자면 Bias는 타당도, Variance는 신뢰도에 해당된다.


이제 Bias and Variance Tradeoff를 보자.


말 그대로 Bias와 Variance는 상충 관계(Tradeoff)이므로, 한쪽을 추구하면 다른 한쪽을 희생할 수 밖에 없다. Cost(=Loss)를 Minimizing하는 식이 Bias, Variance, noise 세 가지 부분으로 구성되므로, 목적식을 최소화할 때 Bias와 Validation의 Trade off 문제에 부딪히게 된다.


만약 Bias를 포기한다면?
High Bias의 경우 Under-fitting을 초래할 수 있다.

만약 Variance를 포기한다면?
High Variance의 경우 Over-fitting을 초래할 수 있다.


따라서, 두 가지의 Balance를 잘 맞추는 것이 중요하다. 참고로 Trainig data를 돌려봄으로써 High Bias인지 아닌지 감을 잡을 수 있고, Validation data를 돌려봄으로써 High Variance에 대한 감을 잡을 수 있다.

Bias and Variance Tradeoff


- Bias부분은 정답과 예측값이 얼마나 차이나는지, Variance부분은 예측값이 예측값의 평균들과 얼마나 차이가 나는지로 표현되어 있다.



■ Bootstrapping

Bootstrapping이란 확률변수의 분포를 모를 때, 추정치들에 정확도(신뢰도)를 부여하는 것이다. Train data에서 n개의 data를 복원추출로 random sampling을 한다. 예를 들어, Train data로 부터 random sampling을 한 후 평균을 구하고, 또 다시 random sampling하여 평균을 구하고, 이런 작업을 n번 반복하면 평균의 분포를 알 수 있고 그로부터 표본 평균을 구한다는 것이다. 이를 통해 Train data를 늘리는 효과를 볼 수 있다. 보통 n번 random sampling한 결과를 ensemble하여 사용하는데 ensemble방법에는 Bagging과 Boosting 두 가지 방법이 있다. 아래에서 보자.



■ Bagging and Boosting

Bagging은 random sampling한 n개의 표본들을 병렬적으로 각각 처리하여 여러 모델 객체를 생성한 후 그 결과들을 결합하는 방식이다. Bagging방식은 모집단을 더 잘 대표할 수 있으며 알고리즘의 안정성 효과를 볼 수 있다는 특징을 갖는다.


Boosting은 random sampling을 하여 모델을 학습시킨 후, 잘 학습이 되지 않는 data에 대해서 추가적으로 처리를 하는 모델을 덧붙여가는 방식이다. Boosting방식은 오답에 집중함으로써 정확도를 높일 수 있다는 특징을 갖는다.

 

Bagging과 Boosting



위의 그림을 보면 병렬적으로 학습하는 Bagging순차적으로 학습하는 Boosting의 특징을 잘 파악할 수 있다.

728x90
반응형

댓글