DL&ML/concept

Under/overfit, Validation, Regularization, Dropout, Normalization, Ensemble etc.

식피두 2021. 3. 10. 23:28

당부의 말

비판적인 시각으로 받아들이시오...

틀린 것이 있을 수 있으니...

 

1) Underfitting vs. Overfitting

Polynomial regression 문제를 생각해볼 때,

x -> y를 매핑함에 있어서

degree(차수)에 따라서 모델의 complexity/flexibility가 결정이 된다.

degree가 높아 모델이 최대한 많은 데이터 포인트를 설명이 가능할 때 -> Overfit

degree가 낮아 모델이 적은 수의 데이터 포인트 만을 설명할 수 있을 땐 -> Underfit

 

model capacity ; 파라미터의 개수가 증가할 수록 capacity도 증가

-> capacity가 높을 수록 복잡한 표현을 배울 수 있지만, 데이터를 외워버릴 가능서도 존재

 

여기서 모델의 generalization error에 대해서 정리.

generalization error는 여러 가지가 있고,

아래의 각각 요소들의 합으로 표현 됨

- Bias ; 이 에러는 데이터에 대한 잘못된 가정으로 부터 기인함.

   예를 들어, quadratic 으로 표현되는 데이터 인데 linear라고 가정하고 모델을 설계 했다면,

   underfit에 빠질 가능성이 큼

- Variance ; 이 에러는 모델이 데이터에 대해 지나치게 민감하게 반응할 때 생김.

   모델의 자유도가 높다면 (위 예시에선 degree가 높아서) 높은 variance를 가지게 될 여지가 있고,

   overfit에 빠질 가능성이 크다. (노이즈 마저 배워버림)

 

곡선(2 degree)으로 분포하는 데이터를 리니어 모델(1 degree polynomial model)로 설명할 경우

underfit에 빠지는데, 이 때

- Variance가 낮고

- Bias는 높다

 

만약 동일한 2차(degree) 곡선 모양으로 분포하는 데이터에 대해서 25 degree 모델로써

표현하고자 한다면?

거의 모든 데이터 포인트를 설명할 수 있게 되면서(memorize) overtfit에 빠지게 된다.

노이즈까지 학습해버릴 여지까지 있음. 이 때,

- Variance는 높고

- Bias는 낮다

 

underfit 모델의 경우 학습 / 테스트 에러가 모두 높고,

overfit 모델의 경우 학습 에러는 굉장히 낮지만, 테스트 에러가 굉장히 높다.

 

위의 예시의 경우엔, degree를 점차 높여 가면서 train/test error가 적절히 낮아지는 지점을 택해야 한다.

 

모델이 overfit 되었는지 여부를 판단 하는 방법?

- Cross Validation을 통해 모델의 generalization performace를 측정

   train/valid 모두에 대해 낮게 나오면 underfit, train은 높지만 valid 낮게 나오면 overfit

- Learning Curve 분석 

   학습한 데이터 대비 (x축), 에러의 변화량 (y축)을 플로팅 했을 때,

   train/valid 커브가 plateau에 수렴한 이후 좀 처럼 나아지지 않는다면 ; underfit 가능성

   좀 더 복잡한 모델을 써서 train 커브는 개선 되었지만 train/valid 커브가 서로 멀어 진다면 ; overfit 가능성

* 학습 도중 validation이 계속 낮아지다가 다시 올라가는 지점에서 Early Stopping을 함으로써 Overfit이 일어나기 전에 학습을 멈출 수 있는 옵션도 있다는 거

 

2) Validation Set & Cross Validation

1) 번의 예시에서, 학습데이터가 한정된 상태에서 적정한 degree를 찾아야 한다면?

학습/테스트 셋을 가지고 특정 하이퍼파라미터를 조정하다 보면,

오히려 테스트 셋에 피팅된 잘못된 결과로 이어질 수 있다.

 

이 때, Cross Validation을 이용해서

학습셋 자체를 fold라고 불리는 k개의 subset으로 분리하고

하나의 hold-out set을 validation set으로 삼고

나머지 데이터로 학습을해서 성능을 뽑고,

각 k 조합에서 나온 스코어를 평균 냄으로써 더 나은 성능 평가가 가능하다.

 

즉, polynomial model의 degree 같은 모델의 성능에 영향을 끼치는 하이퍼파라미터를

결정할 때는 CV를 사용해서 평가 & 결정을 한 이후에

베스트 하이퍼파라미터를 설정할 수 있다.

 

3) Regularization

모델의 weight의 크기를 제한함으로써, overfitting을 방지할 수 있는 방법 중 하나

학습을 위한 loss function에 regularization 텀을 추가해 줌으로써 모델의 weight을 가능한 작게 제한할 수 있다.

해당 텀이 로스 취급되어 최소화의 대상이 된다.

 

 

두 개의 파라미터 세타0, 세타1이 있다고 할 때

regularization 텀이 추가된 로스 함수를 그려보면 아래와 같아진다.

두 개의 contour가 생기는데,

최적화시 두 contour 사이의 어딘가에 위치한 미니멈 위치를 찾게 된다.

 

stanford, cs231n

 

- L1 norm (lasso) ; 중요하지 않은 피쳐의 특정 weight(coefficient)을 거의 0으로 만들어버리는 효과 (feature selection)

- L2 norm (ridge) ; weight을 분산시킨다 (영향력을 분산) ; 특정 feature에만 치중하지 않도록... 좀 더 모델이 robust해 질 수 있다.

- Elastic Net ; lasso + ridge

기본적으로 ridge는 무난한 디폴트 옵션이고, 만약 입력 피쳐중 몇 가지만 의미가 있다 싶은 경우엔 lasso를 시도해보자.

특정 피쳐가 출력과 높은 correlation을 갖는 상황에선 Elastic Net이 Lasso만 쓰는 것 보다 낫다고 함.

 

Intuitive and Visual Explanation on the differences between L1 and L2 regularization

Published: May 28, 2018. This blog is quite easy in math. But it is still interesting.

www.linkedin.com

 

4) Dropout

학습시 확률적으로 노드를 비활성 해버린다.

옆의 노드가 비활성화 된다면, 해당 노드가 더 좋은 표현을 학습하려고 노력하지 않을까?

이렇게 되면 각 뉴런을 좀 더 효율적으로 사용할 수 있게 되고

하나의 모델 안에서 여러 구조의 모델에 대해 학습 시키게 되는 셈이다.

예측 단계에서는 모두 활성화 시켜 앙상블의 효과를 가져오게 된다.

 

5) Data Normalization

값을 특정 범위로 fit 시키는 방법

back-propagation시 좀 더 나은 수렴으로 이어질 수 있다!

일반적으로 데이터에서 평균을 빼고 표준편차로 나눠서..

모든 피쳐를 동등하게 취급 될 수(weighted) 있도록 만들어 주는 효과가 있다.

만약 normalize를 해주지 않는다면

값의 스케일이 큰 피쳐들이 그렇지 않은 피쳐들에 비해 cost func에서 더 많은 가중치를 받게 되기 때문.

 

6) Batch Normalization

딥뉴럴넷을 학습할 때, 각 레이어의 입력의 분포는 학습이 진행됨에 따라 계속해서 바뀐다.

(그 이전 레이어의 파라미터의 변화에 희해 현재 레이어의 입력 분포가 바뀌는 현상을 internal covariate shift라고 함)

이 때, 각 레이어의 입력을 평균이 0, 표준편차는 1이 되도록 맞춰주자는 아이디어에서 나온 기법.

미니 배치의 평균 및 분산(학습 과정에서 moving average를 이용해 저장)을 구한 뒤 값을 정규화 하고,

정규화 된 값에 학습 가능한 파라미터(감마/베타)를 곱하고 더하는 과정으로 이루어져있다(scale & shift)

이렇게 '정규화를 위한 별도의 레이어'로서 추가되어 back-propagation을 통해 같이 학습되면서

분포를 조절해주도록 학습된다.

 

이해를 돕기 위한 예시..

액티베이션 함수를 ReLU를 썼을 때, 입력값을 통과한 결과 모두 양수였다면?

액티베이션의 의미가 있을까?

 

여러 레이어로 구성된 네트워크가 있는데, W0*W1*W2...

레이어 사이에 (W 사이에) non-linear 액티베이션이 없다면

하나의 레이어를 쓴 것과 다를게 없어진다.

 

반대로 모두 음수가 나온다면 기울기가 0이되어 학습이 안된다.

 

따라서 배치놈을 써줌으로써 입력의 분포를 적절히 조절해준다면?

액티베이션 함수가 제 역할을 하게 되면서

학습이 좀 더 효과적으로 진행될 여지가 생긴다.

 

7) Ensemble

왜 Ang상블을 하면 보통 개별 모델 보다 성능이 높아질까?

여러 모델이 있을 때, 각 모델이 만드는 에러는 서로 다르다면(다양성)

특정 모델의 에러는 다른 모델의 올바른 예측에 의해 상쇄 될 여지가 있기 때문이다.

- 서로 다른 알고리즘에 기반한 모델로 구성하거나

- 서로 다른 subset의 데이터를 이용해 학습된 여러 개의 동일한 모델 (bagging ; bootstrap samples with replacement)

- 모든 데이터를 사용하되 이전 모델이 잘못 분류한 데이터에 대해서는 가중치를 더 주어

  이후의 모델이 더 잘 맞출 수 있도록 여러 모델을 학습하는 방법 (boosting)

 

8) Imbalanced Dataset

여러 카테고리를 예측해야하는 분류 모델을 학습함에 있어

각 카테고리에 대한 학습 데이터 양의 비율이 서로 다르다면 어찌해야 하는감?

- Oversampling / Undersampling

- Data augmentation (noise, transformation, ...)

- 적절한 metric 사용

- CrossEntropy를 사용한다면 각 클래스에 대한 weight을 지정해줌 (1-비율)

- Focal Loss를 사용해서 모델이 확신을 가지는 example에 대해선 패널티를 줌

 

 

이후에 추가로 공부할 자료

 

shafaypro/CrackingMachineLearningInterview

A repository to prepare you for your machine learning interview, involving most of the questions asked by all the tech giants and local companies. Do this to Ace your Machine Learning Engineer Inte...

github.com