Optimization (최적화)
이 파트에서는 여러 용어가 나오는데, 용어에 대한 정리가 제대로 안 되어 있으면 혼란이 올 수 있음!
Optimization 중요 개념
Generalization
일반화
- Train Error가 0이 됐다고, 최적값에 도달했다고 보장할 수 없음
- 어느정도 시간이 흐른 후 Test Error의 성능은 더 떨어지게 됨
일반화 성능
- Train Error와 Test Error 사이의 차이
그럼 일반화 성능이 좋으면 무조건 모델 성능이 좋을까?
-> Train Error 자체가 높아버리면 Test Error와 차이가 적어도 당연히 좋은 모델이 아님!
Overfitting, Underfitting
과(대)적합, 과소적합
Overfitting: Train Data는 잘 맞추는데, 그에 비해 Test 데이터는 잘 못 맞춤
Underfitting: 애초에 학습 오류를 잘 못 줄이고 있음
Cross-Validation
교차 검증
Train 데이터로 사용하지 않은 데이터를 Validation 데이터로 나누고 검증하기
- 결론적으로 최적의 하이퍼 파라미터를 찾기 위해 여러번 검증을 진행하는 것
- 단, Test 데이터는 학습에 어떤 방법으로든 사용하면 안 됨!
Bias, Variance
편향, 분산
Bias: 평균적으로 봤을 때, 실제 값에 잘 접근하면 Bias가 낮음
Variance: 어떤 입력을 넣었을 때 출력이 일관적이면 Variance가 낮음
- 단순한 모델에서 Variance가 낮게 나옴
- Bias와 Variance는 Trade-off 관계를 가짐
$$ \text{cost} = \text{bias}^2 + \text{Variance} + \text{Noise} $$
Bootstrapping
복원 추출을 기반으로 전체 학습데이터에서 랜덤 서브 샘플링으로 여러개를 만들어서 사용하는 테스트
Bagging, Boosting
Bagging (Bootstrapping and aggregating)
학습 데이터 여러개 만들어서 독립적으로 돌려보고 Output의 평균 내기
Boosting
예시:
- 학습 데이터를 Sequential하게 보고, 모델을 간단하게 만들어서 학습 데이터에 대해 돌려보기
- 80개 예측, 20개 미예측했다고 가정하면, 20개의 못 맞춘 데이터를 잘 맞추기 위한 2번째 모델을 만듦
- 이렇게 Sequential하게 만들어지는 모델을 Weak Learner라고 부름
- Weak Learner를 모두 합친 전체 모델을 Strong Learner라고 부름
https://commons.wikimedia.org/wiki/File:Ensemble_Boosting.svg
Gradient Descent Methods
Stochastic gradient descent
Mini-Batch gradient descent
Batch gradient descent
요즘은 대부분 SGD 기반의 Mini-Batch를 사용함
Batch size 이슈
- Batch size는 생각보다 중요함
- Batch size를 크게 하면 Sharp Minimizer에 도달함
- Batch size를 크게 하면 Flat Minimizer에 도달함
- 결론: Batch size를 줄이는 게 좋음
- Flat Minimizer가 일반화 성능이 더 높음
- 왜 그런지는 증명이 되어있다기보다 실험적으로 확인됨
Gradient Descent을 기반으로 한 최적화 방법은 다양하게 있는데,
아래 그림 정도로 이해하고 웬만하면 Adam을 사용한다는 것을 알아두기
Regularization
오히려 학습을 방해해서 Train 뿐만 아니라 test 데이터에서도 잘 동작하도록 하는 기법
Early Stopping
Validation 데이터의 Loss를 지켜보다가 커지는 어느 지점에서 멈추자
Parameter Norm Penalty
( =Weight Decay)
- 파라미터들이 너무 커지지 않도록 하자
- 부드러운 함수를 만들자
Data Augmentation
- 데이터가 많아지면 딥러닝이 고전적인 머신러닝에 비해 훨씬 성능이 좋아짐
- 이 기법으로 데이터를 늘려보자
- 데이터에 변형을 가해서 추가하기
<참고>
- MNIST 데이터에서 상하 뒤집기를 하면 6이 9가 되어버리니까 이러면 안 됨!
- 이렇게 데이터의 특성을 파악하고 Data Augmentation을 진행해야 함
Noise Robustness
- Input 데이터 또는 Weight에 노이즈를 추가하는 것
- 왜 잘 되는지는 아직 의문
Label Smoothing
예시 - Mixup
강아지와 고양이 전체를 섞은 이미지의 라벨에 강아지 0.5, 고양이 0.5를 준다.
예시 - CutMix
강아지 몸에 얼굴만 고양이를 합성한 사진의 라벨에 강아지 0.6, 고양이 0.4를 준다.
- 데이터가 한정될 때 이걸 활용하면 좋음
- 코드 자체는 간단해서 가성비가 좋다!
꽤 성능 향상을 기대할 수 있는 기법이라고 한다.
Dropout
일부 뉴런의 값을 0으로 만들어서 더 Robust하게 만드는 것
Batch Normalization
내가 적용하는 Layer의 통계량을 정규화하는 것
'boostcamp AI Tech > 기타 정리' 카테고리의 다른 글
[DL Basic] Generative Models - Autoregressive Models (0) | 2023.03.26 |
---|---|
[DL Basic] Neural Networks 기본 (0) | 2023.03.20 |
[DL Basic] 딥러닝의 개념과 역사 (0) | 2023.03.20 |
[torchtext, sklearn] get_tokenizer(), vocab(), get_stoi(), get_itos(), CountVectorizer() (0) | 2023.03.17 |