소소한 컴퓨터 이야기

DNN(Deep Neural Networks) 성능 개선

by Cori

AI

개요

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

활동하기