꺼내먹는지식 준
딥러닝 앙상블 (Ensemble) 본문
앙상블
: 싱글 모델보다 더 나은 성능을 위해 서로 다른 여러 학습 모델을 사용하는 것
실제 기업들에서는 딥러닝 모델로 앙상블을 하는 경우는 드물다.
성능 향상 대비 computational cost 가 너무 크다.
기존 만든 여러 모델과 weight들을 버리지말고 결합해서 좀 더 좋은 결과를 만들고자 하는 방법
(각자 잘하는 부분이 다르다.)
딥러닝의 경우 앙상블을 이야기 할 때, 일반적으로 variance가 높아서 overfitting이 일어난다.(데이터가 많아서)
(물론 data가 작으면 bias가 높기도하다.)
Boosting Algorithm
보통 bias가 높은 모델들을 앙상블 하는 기법이 boosting
순차적으로 학습을 진행하면서 조금 더 나은 방향으로 fitting 되도록 하는 것
(ex. graident boosting)
Bagging
보통 variance가 높은 모델들을 앙상블 하는 기법이 Bagging
데이터 샘플을 만들고, 각각 학습시킨 결과를 바탕으로 취합해서 평균을 낸다.
(Overfitting이 되는 모델들을 일반화 하는 작업)
데이터 set을 나눌 때 sample 로 한다.
(ex. random forest)
앙상블 기법(Voting)
딥러닝 알고리즘은 보통 모델 averaging 방법 즉, voting방법을 사용한다.
모델 averaging이 잘 동작하는 이유는, 다른 모델이 일반적으로 test set에 대해서 같은 error를 만들어내지 않는다는 가정
같은 쓰임 에러가 아니라, 다른 모델들을 바탕으로 만들면 효과가 좋을 것으로 기대된다.
Hard Voting
다수결
Soft Voting
0.49 0.51 / 0.49 0.51 / 0.9 0.1 모델 예측이 다음과 같아도 hard voting은 1로 간다. 이걸 방지.
즉 모든 확률을 보는 것. 이상치가 결과를 바꿔서 문제가 생길 수도 있다.
일반적으로 soft voting이 좀 더 결과가 좋더라고 한다.
모두 항상 그런건 아니다.
Cross Validation (줄여서 CV)
필수 요건
분포를 섞으면서, 여러 validation을 해보고 앙상블 해보자.
https://jinnyjinny.github.io/deep%20learning/2020/04/02/Kfold/
K-fold 개념과 Stratified cross validation 적용해보기 · Hyojin Kim's blog
K-fold 개념과 Stratified cross validation 적용해보기 02 Apr 2020 | Deep learning K-fold K-fold 개념 데이터를 k개의 분할(k개의 fold, 일반적으로 k=4 or 5)로 나누고 k개의 모델을 만들어 k-1개의 분할에서 훈련하고
jinnyjinny.github.io
k 가 5면 validation 20% 5개, k가 10이면 validation 10% 10개
k 숫자에 따라 validation %가 바뀐다. 일반적으로는 5개부터 시작.
그 후 앙상블
class가 imbalance 한 경우
그냥 random으로 뽑으면 fold안에 class 가 다른 경우가 있다. 어떤 validation set은 특정 class가 없고, 특정 class는 많을 수 있다. fold를 그냥 나누는 것이 아니라 분포를 일정하게 가져가는 것이 골자이다. stratified k-fold는 각각의 train 과 validation의 분포가 최대한 비슷하게 맞춰지는 것.
아래의 내용 해당 블로그 발췌
StratifiedKFold 함수는 매개변수로 n_splits, shuffle, random_state를 가진다. n_splits은 몇 개로 분할할지를 정하는 매개변수이고, shuffle의 기본값 False 대신 True를 넣으면 Fold를 나누기 전에 무작위로 섞는다. 그 후, cross_val_score함수의 cv 매개변수에 넣으면 된다.
일반적으로 회귀에는 기본 k-겹 교차검증을 사용하고, 분류에는 StratifiedKFold를 사용한다.
또한, cross_val_score 함수에는 KFold의 매개변수를 제어할 수가 없으므로, 따로 KFold 객체를 만들고 매개변수를 조정한 다음에 cross_val_score의 cv 매개변수에 넣어야 한다.
Image 분야에서 앙상블은 test time augmentation도 등장을 한다.
TTA
Train 시에도 augmentation으로 일반적으로 다양한 상태를 참고해서 robust하도록 만들었었다. 테스트 타임에도 다른 환경에서 다른 feature가 관측이 될 수도 있다. test 시간에 augmentaion 을 해도 똑같은 결과를 낼까? 과연 noise가 섞인 이 데이터를 모델에 넣었을 때, 어떻게 답할까? test time 에서 이미지마다 augmentation을 하여 여러 결과를 얻어서 그 결과들을 기반으로 결정을 내리는 것이다.
각각의 test 결과를 앙상블 과정에 따라 결과들이 달라진다.
이를 일반화 된 정답이라고 기대한다. 앙상블 과정이라고 볼 수 있다.
앙상블은 주로 마지막 단계.
그만큼 효과 향상은 있지만 추론 시간이 배로 된다.
그래서 현업에서도 잘 사용하지 않는 것이다.
score 올리는 경진대회 등에서는 많이 활용한다.
Hyperparameter Optimization
이도 정말 많은 시간이 걸리고 성능 향상도 생각보다 적어서 요새 많이 하지는 않는다고 한다.
시스템의 메커니즘에 영향을 주는 주요한 파라미터
Learning rate, Hidden Layer 개수, k-fold, dropout, loss 파라미터, batch size, optimzer 파라미터, regularization 등..
시스템의 부분을 수정하는 관장하는 것들이 바로 하이퍼 파리미터
실험전까지는 알 수 없어서 반복적으로 training해보면서 적절한 값을 찾는 것.
단점은 시간이 너무 오래 걸린다.
그래서 시간과 장비가 충분하면 하지만, 시간 여유가 별로 없어서 딥러닝에서는 생각보다 잘 안한다.
기법자체는 reasonable 하다.
grid search, random search, 제일 잘 동작하는 방법은 bayesian search(optimization) 등..
Optuna 파라미터 범위를 주고 그 범위 안에서 trials 만큼 시행
'AI > 딥러닝 기초' 카테고리의 다른 글
신경망 개념 완벽 이해 (0) | 2022.02.12 |
---|---|
딥러닝 Optimization (최적화) 및 최적화 용어 정리 (0) | 2022.02.07 |
Multi layer Perceptron 간단 구현 (0) | 2022.02.07 |
Neural Net, Multi-layer Perceptron (0) | 2022.02.07 |
딥러닝 역사, 기본 및 용어 (0) | 2022.02.07 |