[DL] DNN(Deep Neural Networks) 성능 개선

2022. 8. 2. 15:36인공지능,딥러닝,머신러닝 기초

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발생

 

2. DNN 모델 크기 변경

0) 개요

- 모델의 Layer나 Unit수가 많을 수록 복잡한 모델이 됨

- OVerfittign의 경우 모델을 간단하게 만들고 Underfitting일 경우 모델을 크게 만든다.

- 큰 모델에서 시작하여 Layer나 Unit수를 줄여가며 Validation Loss의 감소 추세를 관찰한다

 

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은 입력 데이터와 파라미터의 가중 합을 구한 결과에 적용한 뒤 그 결과를Activarion함수에 전달함

 

3) 효과

· 랜덤하게 생성되는 초기 가중치에 대한 영향력을 줄일 수 있음

· 학습하는 동안 과대적합에 대한 규제의 효과를 줌

 

5. Optimizer의 Learning Rate (학습률) 조정을 통한 성능 향상

 

0) 개요

- Optimizer 의 learning rate이 너무 크거나 너무 작으면 최적의 파라미터를 찾지 못할 수 있음

- Lerning rate를 하나로 지정할 수 있으나, 학습이 반복되는  동안 그 값을 변경하여 성능 향상을 꾀하기도 함

1) Learning Rate Decay

- 일정한 step마다 일정한 비율로 Learning rate를 변경함

- 초반에는 크게 설정하고, 갈수록 rate를 줄여주는 방향으로 구함

-> 일반적으로 5 epochs마다 절반으로 줄이거나 20epochs마다 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