DNN(Deep Neural Networks) 성능 개선
by Cori개요
Deep Neural Networks의 성능을 개선하는 방법에 대해 알아본다.
내용 정리
1. 최적화 (Optimization)
0) 정의
-> Train data에서 최고의 성능을 얻으려고 모델 파라미터들을 조정하는 과정
1) 일반화 (Generalization)
· 훈련된 모델이 처음 보는 데이터에 대해 잘 추론할 수 있는 상태
· 학습을 통해 일반화된 특징들을 잘 찾은 상태
2) 과대적합 (Overfitting)
· 검증 결과 Train set에 대한 성능은 좋은데 validation dataset에 대한 성능은 안 좋은 상태로, 학습을 과하게 한 상태를 말함
· 학습이 과하게 되어 쓸데 없는 패턴을 모두 외워버려, 오히려 처음 본 데이터에 대한 예측 성능이 떨어진다.
· 보통 Train Dataset의 크기에 비해 모델이 너무 복잡한 경우 발생
개선
· 더 많은 데이터를 수집 -> 모델이 복잡해도 학습 시킬 데이터가 충분히 많으면 괜찮다.
· 모델의 복잡도를 낮춰 단순한 모델을 만듬 -> 네트워크 모델의 크기를 작게 만들고, 모델의 학습을 규제하는 기법을 적용
· Epoch (또는 Step) 수를 줄인다. -> Validation의 성능 지표가 가장 좋았던 Epoch까지만 학습
· 과대적합을 방지하기 위한 규제 방식 = 모두 모델을 간단하게 만드는 방법
3) 과소적합 (Underfitting)
· 검증 결과 Train set과 Validation Set 모두 성능이 안 좋은 상태로, 모델의 학습이 덜 된 상태를 의미한다.
· Train Dataset의 크기에 비해 모델이 너무 단순해서 데이터에 대한 특징들을 다 찾지 못한 상태를 의미한다.
개선
· 모델의 복잡도를 높임 -> 모델 네트워크의 크기를 키움 (Layer or Unit의 수를 늘림)
· Epoch (또는 Step) 수를 늘린다. -> Train / Validation의 성능이 계속 좋아지는 상태에서 끝난 경우 더 학습을 시킴
4) Epochs와 최적화
· 데이터셋을 여러번 반복 학습을 하게 되면 초반에는 train, validation 성능이 모두 개선됨
· Bt 학습이 계속 반복되면 Train 성능은 계속 좋아지지만 어느 시점부터는 Overfitting이 발생하여 Validation의 성능은 나빠짐
· Epochs를 반복하는 것은 같은 데이터셋을 반복적으로 학습하는 것이기 때문에 적절한 Epoch 수를 넘어가면 Overfitting 발생
· Validation Set의 성능이 더 나빠지기 전의 반복 횟수를 모델의 최적 Epoch으로 선택한다.
2. DNN 모델 크기 변경
0) 개요
· 모델의 Layer나 Unit 수가 많을수록 복잡한 모델이 된다.
· Overfitting의 경우 모델을 간단하게 만들고 Underfitting일 경우 모델을 크게 만든다. (Layer의 수, 각 Layer의 Unit 수 조정)
· 큰 모델에서 시작하여 Layer나 Unit 수를 줄여가며 Validation Loss의 감소 추세를 관찰한다. (or 반대로 수행)
1) 데이터에 비해 작은 모델의 특징
· Train / Validation 성능 개선의 속도가 느리다 -> 반복 횟수가 충분하지 않으면 학습이 덜 된 상태에서 중단될 수 있음
· Underfitting이 발생할 가능성이 크다.
2) 데이터에 비해 큰 모델의 특징
· Validation 성능이 학습 초반부터 나빠진다.
· Train에 대한 성능은 빠르게 개선된다.
· Overfitting이 발생할 가능성이 크다.
3. Dropout Layer 추가를 통한 Overfitting 규제
0) 정의
· Neural Network의 Overfitting 방지를 위한 규제 기법
· Overfitting이 발생하는 이유는 모델이 너무 복잡하기 때문으로, 너무 복잡한 모델은 학습 시 Train Dataset으로부터 너무 많은 특징을
찾기 때문에 일반성이 떨어지게 된다.
1) Dropout
· 학습 시 일부 Unit(Node)들을 Random하게 빼고 학습한다. 이때 빠지는 노드들을 Dropout Node라고 함
· 선택된 노드들의 weight들을 모두 0으로 학습시키며, 이 노드들은 최적화 대상에서 빠진다.
· Dropout이 적용되는 Layer에서 Dropout Node의 비율을 너무 크게 지정하면 Underfitting이 발생하기 때문에 비율은 0.2 ~ 0.5를 지정
· 매 Step마다 Dropout Node들은 Random하게 바뀐다.
2) 효과
· Dropout은 Overfitting의 원인인 co-adaptation 현상을 감소 / 방지하는 효과가 있다.
· Dropout 적용 시 Step마다 다른 network를 학습시키는 형태가 되어 앙상블(ensemble) 효과가 있다.
* co-adaptation 현상이란 ?
학습 시 생기는 오차를 줄이기 위해 네트워크 내의 모든 Node들의 모든 파라미터들이 업데이트 되는 현상.
발생한 오차에 대해 모든 파라미터가 공동 책임으로 업데이트 되는 것이며, 이에 각 노드들의 역할이 나눠지지 못하고 공동화되며
그로 인해 쓸데없는 패턴까지 학습하게 되는 것이 된다. (Overfitting의 원인)
Dropout을 사용하게 되면, 학습시마다 Node들을 학습에서 제외하므로 이런 co-adaptation 현상을 줄일 수 있다.
3) 적용
· Dropout은 학습시에만 적용하고 검증, 테스트, 새로운 데이터 추론 시에는 적용되지 않는다.
4. Batch Normalization (배치 정규화)
0) 정의
-> 각 Layer에서 출력된 값을 평균: 0, 표준편차: 1로 정규화하여 각 Layer의 입력분포를 균일하게 만들어 준다.
1) Internal Covariate Shift (내부 공변량 변화) 문제
· 내부 공변량 변화 = 학습 과정에서 각 층을 통과할 때마다 입력 데이터 분포가 달라지는 현상
· 입력 데이터의 분포가 정규 분포를 따르더라도 레이어를 통과하면서 그 분포가 바뀌어 성능이 떨어지는 문제가 발생
· 각 레이어를 통과할 때 마다 분포를 정규 분포로 정규화하여 성능을 올린다.
2) 작동 방식
· Batch Normalization은 입력 데이터와 파라미터의 가중 합을 구한 결과에 적용한 뒤 그 결과를 Activation 함수에 전달한다.
3) 효과
· 랜덤하게 생성되는 초기 가중치에 대한 영향력을 줄일 수 있다.
· 학습하는 동안 과대적합에 대한 규제의 효과를 준다.
5. Optimizer의 Learning Rate (학습률) 조정을 통한 성능 향상
0) 개요
· Optimizer의 Learning Rate이 너무 크거나 너무 작으면 최적의 파라미터를 찾지 못할 수 있다.
· Learning Rate를 하나로 지정할 수도 있으나, 학습이 반복되는 동안 그 값을 변경하여 성능 향상을 꾀하기도 한다.
1) Learning Rate Decay
· 일정한 Step마다 일정한 비율로 Learning rate를 변경한다.
· 초반에는 크게 설정하고, 갈수록 rate를 줄여주는 방향으로 구한다.
-> 일반적으로 5 epochs마다 절반으로 줄이거나, 20 epochs마다 1/10씩 줄이기도 하며, 보통 고정된 학습 속도로 검증 오차를
살펴보다 검증오차가 개선되지 않을 때마다 학습 속도를 감소시키는 방법을 택한다.
2) Callback을 이용한 조정
· 특정 횟수의 반복동안 성능 지표가 향상되지 않으면 learning rate을 조정한다.
* Callback이란 ?
-> 학습 도중 특정 이벤트가 발생하면 호출되도록 정의한 기능
6. Hyper Parameter Tuning
0) parameter
-> 모델이 학습하여 데이터에 가장 적합한 값을 찾아내는 파라미터로, Weights (W)와 Bias (b)가 있다.
1) Hyper Parameters
-> 모형의 구조를 결정하거나 optimization 방법을 결정하는 변수들로, 개발자가 직접 설정하는 파라미터다.
① Optimizer의 종류
② Learning Rate (alpha)
③ Hidden Laryer의 수
④ Hidden Unit의 수
⑤ Activation Function의 종류
⑥ Minibatch Size
⑦ Regularization
⑧ Dropout Rate
'AI' 카테고리의 다른 글
LLM 모델 메모리 사용량 계산하는 방법 (2) | 2024.12.16 |
---|---|
Vector DB - Milvus (0) | 2024.07.26 |
Vector DB 선택하기 (0) | 2024.07.22 |
Llama Index 살펴보기 (0) | 2024.03.11 |
대학원 AI 면접, 필기 시험 대비 기초 지식 정리 (0) | 2021.12.11 |
블로그의 정보
코딩하는 오리
Cori