728x90
학습 내용
- 일반화 성능을 향상 시키기 위한 여러가지 방법에 대해 알아보자
- 과대적합 방지기법들에 대해 알아보자
일반화 성능 극대화 + 과대적합 방지하기 위한 방법 요약
- 훈련 데이터를 더 모음. 더 나은 데이터를 모음
- 더 나은 특성을 개발
- 네트워크 용량 감소
- (작은 모델을 만들기 위해) 가중치 규제를 추가
- 드롭아웃 추가
- 배치 정규화
데이터셋 큐레이션
- 적절한 데이터셋으로 작업하고 있는지 확인하는 것이 중요
- 데이터가 충분한지 확인
- 입력에서 출력을 매핑하는 공간을 조밀하게 샘플링
- 데이터가 많을 수록 좋은 모델
- 레이블 할당 에러 최소화
- 입력 시각화하여 이상치 확인, 레이블 교정
- 데이터 정제, 누락된 값 처리
- 많은 특성 중에서 어떤 것이 유용한지 확실하지 않다면 특성 선택을 수행
- 데이터가 충분한지 확인
특성 공학
- 데이터와 머신 러닝 알고리즘(신경망)에 관한 지식을 사용하는 단계
- 모델에 데이터를 주입하기 전에 (학습이 아닌) 하드코딩된 변환을 적용하여 알고리즘이 더 잘 수행되도록 만들어줌
- 모델이 수월하게 작업할 수 있는 어떤 방식으로 데이터가 표현될 필요가 있음
- 특성을 더 간단한 방식으로 표현하여 문제를 쉽게 만듦
- 잠재 매니폴드를 더 매끄럽고, 간단하고, 구조적으로 만듦
- 해당 문제에 대한 이해도가 높아야 함
- 최신 딥러닝 : 특성 공학 필요하지 않음
- 신경망이 자동으로 원본 데이터에서 유용한 특성을 추출할 수 있기 때문
- 좋은 특성은 적은 자원을 사용해서 문제를 더 멋지게 풀어낼 수 있음
- 좋은 특성은 더 적은 데이터로 문제를 풀 수 있게함
- 샘플 개수가 적다면 특성에 있는 정보가 유용해짐
조기 종료 사용하기 (Early Stopping)
- 딥러닝에서는 항상 지나치게 파라미터가 많은 모델을 사용함
- 잠재 매니폴드를 학습하기 위해 필요한 최소한 것보다 훨씬 많은 자유도를 가짐
- 훈련 중 일반화 성능이 가장 높은 정확한 최적적합의 지점(과소적합과 과대적합 사이의 정확한 경계)을 찾는 것은 일반화 성능을 향상시킬 수 있는 가장 효과적인 방법 중 하나임
- epoch가 끝날 때마다 모델을 저장하고 최상의 epoch를 찾은 후 저장된 모델 재사용
- EarlyStopping callback
모델 규제하기 (Regularization)
가중치 규제 추가
- 오캄의 면도날 이론 : 어떤 것에 대한 두 가지 설명이 있다면 더 적은 가정이 필요한 간단한 설명이 옳을 것
- 간단한 모델이 복잡한 모델보다 덜 과대적합될 가능성이 높음
- 간단한 모델 : 파라미터 값 분포의 엔트로피가 작은 모델
- 과대적합 완화하기 위한 방법 : 모델의 복잡도에 제한을 두어 가중치가 작은 값을 가지도록 강제
- L1 규제 : 가중치의 절댓값에 비례하는 비용 추가(가중치의 L1 norm)
- L2 규제(가중치 감쇠) : 가중치의 제곱에 비례하는 비용이 추가(가중치의 L2 norm)
→ 가중치값의 분포가 더 균일하게 됨 : 가중치 규제
- 규제
- 훈련 데이터에 완벽하게 맞추려는 모델의 능력을 적극적으로 방해하는 일련의 모범 사례
- 모델의 검증 점수 향상이 목적
- L1 Regularization
$$Cost = \sum_{i=0}^N(y_i - \sum_{j=0}^M x_{ij}W_j)^2 + \lambda \sum_{j=0}^M \left| W_j \right|$$
- L2 Regularization
$$Cost = \sum_{i=0}^N(y_i - \sum_{j=0}^M x_{ij}W_j)^2 + \lambda \sum_{j=0}^M W_j^2 $$
적절한 모델 크기를 찾는 일반적인 작업 흐름
- 비교적 적은 수의 층과 파라미터로 시작
- 검증 손실이 감소되기 시작할 때까지 층이나 유닛 개수를 늘림
- 작은 모델이 기본 모델보다 더 나중에 과대적합되기 시작
- 용량이 큰 모델은 첫 번째 epoch이후 거의 바로 과대적합이 시작되어 갈수록 더 심해짐
- 용량이 클수록 더 빠르게 훈련 데이터를 모델링
- 과대적합에 민감해짐
드롭아웃 추가
- 훈련하는 동안 무작위로 층의 출력 특성을 일부 제외시킴(0으로 만듦)
- 테스트 단계에서는 어떤 유닛도 드롭아웃되지 않고 대신에 층의 출력을 드롭아웃 비율에 비례하여 줄여줌
- 훈련할 때보다 더 많은 유닛이 활성화되기 때문
- 각 샘플에 대해 뉴런의 일부를 무작위하게 제거하면 뉴런의 부정한 협업을 방지하고 과대적합을 감소시킴
생각 정리
- regularizer와 dropout등 개념들에 대한 수식적인 이해가 좀 더 필요할 것 같다
- 시간을 가지고 꼼꼼하게 정리하는 시간을 가지자
참고자료
케라스 창시자에게 배우는 딥러닝
728x90
'AIFFLE > STUDY' 카테고리의 다른 글
[DL] keras API (Sequential, Functional, Subclassing) 이해하기 (1) | 2024.06.02 |
---|---|
평가지표 - accuracy, precision, recall, F score, PR curve, AUC-ROC (0) | 2024.05.23 |
텐서의 이해 (0) | 2024.05.21 |
머신러닝과 딥러닝 (0) | 2024.05.21 |
[Linux] 리눅스(Linux) 명령어 쉽게 찾아보기 - man, tldr (0) | 2024.05.14 |