당부의 말
비판적인 시각으로 받아들이시오...
틀린 것이 있을 수 있으니...
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 사이의 어딘가에 위치한 미니멈 위치를 찾게 된다.
- L1 norm (lasso) ; 중요하지 않은 피쳐의 특정 weight(coefficient)을 거의 0으로 만들어버리는 효과 (feature selection)
- L2 norm (ridge) ; weight을 분산시킨다 (영향력을 분산) ; 특정 feature에만 치중하지 않도록... 좀 더 모델이 robust해 질 수 있다.
- Elastic Net ; lasso + ridge
기본적으로 ridge는 무난한 디폴트 옵션이고, 만약 입력 피쳐중 몇 가지만 의미가 있다 싶은 경우엔 lasso를 시도해보자.
특정 피쳐가 출력과 높은 correlation을 갖는 상황에선 Elastic Net이 Lasso만 쓰는 것 보다 낫다고 함.
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에 대해선 패널티를 줌
이후에 추가로 공부할 자료
'DL&ML > concept' 카테고리의 다른 글
확률 관련 개념 (Random Variable, Covariance Matrix, Multivariate Gaussian) (0) | 2021.03.13 |
---|---|
Measure (Precision, Recall, F1-score, ROC, AUC) (0) | 2021.03.11 |
Cross Entropy, KL-Divergence (0) | 2021.03.10 |
MAP(Maximum A Posterior) (0) | 2021.03.10 |
Likelihood & MLE(최대 우도 추정) (0) | 2021.03.10 |