Pytorch로 시작하는 딥러닝 입문(06-09. 과적합을 막은 방법들/augmentation, regularization, Dropout, Early stopping)

2024. 3. 16. 14:29딥러닝 모델: 파이토치

모델이 과적합되면 훈련 데이터에 대한 정확도는 높을지라도 새로운 데이터에 대해서는 제대로 동작하지 않는다. 이번에는 모델의 과적합을 막을 수 있는 여러 가지 방법에 대해서 논의한다. 

 

♣ 데이터의 양 늘리기

데이터의 양이 적을 경우, 모델은 헤당 데이터의 특정 패턴이나 노이즈까지 쉽게 암기하게 되므로 과적합 현상이 발생할 확률이 늘어난다. 데이터의 양을 늘릴수록 모델은 데이터의 일반적인 패턴을 학습하여 과적합을 방지할 수 있다. 

 

데이터의 양이 적은 경우, 의도적으로 기존 데이터를 조금씩 변형하고 추가하여 데이터의 양을 늘리기도 하는데, 이를 데이터 증식, 또는 증강(Data Augmentation)이라고 한다. 이미지의 경우에 데이터 증식이 많이 사용되는데 이미지를 돌리거나 노이즈를 추가하고, 일부분을 수정하는 식으로 데이터를 증식시킨다. 

 

 

♣ 모델의 복잡도 줄이기

인공신경망의 복잡도는 은닉층(hidden layer)의 수나 매개변수의 수 등으로 결정된다. 과적합 현상이 포착되었을 때, 인공신경망 모델에 대해서 할 수 있는 조치 중 하나는 인공신경망의 복잡도를 줄이는 것이다. 

 

다음과 같이 클래스를 사용하여 구현한 인공신경망이 있다고 가정해보자. 

 

위의 인공신경망은 3개의 선형 레이어(Linear)를 가지고 있다. 위 인공신경망이 입력 데이터에 과적합 현상을 보인다면, 다음과 같이 인공신경망의 복잡도를 줄일 수 있다. 

 

위의 인공신경망은 2개의 선형 레이어를 가지고 있다. 인공신경망에서는 모델에 있는 매개변수들의 수를 모델의 수용력(capacity)이라고도 한다. 

 

 

 

♣ 가중치 규제(Regularization = Penalization) 적용하기

1. regularization이란?

신경망 모델이 너무 복잡해지지 않도록 model complexity를 통제하는 방법을 말한다. 학습 데이터셋에 대해 과적합되는 것을 막기 위해서 신경망 모델의 복잡도를 통제한다. 복잡한 모델이 간단한 모델보다 과적합될 가능성이 높기 때문이다. 간단한 모델은 적은 수의 매개변수를 가진 모델을 의미한다. 복잡도를 낮추기 위해 가중치 규제를 적용한다. 

 

2. regularization의 종류

- L1 regularization

- L2 regularization(Weight Decay)

- Dropout

- Early Stopping

 

  • L1 규제: 가중치 w들의 절대값 합계를 비용 함수에 추가한다. L1 노름이라고도 한다. 
  • L2 규제: 모든 가중치 w들의 제곱합을 비용 함수에 추가한다. L2 노름이라고도 한다. 

두 식 모두 비용 함수를 최소화하기 위해서는 가중치 w들의 값이 작아져야 한다는 특징이 있다. 

L1 규제를 예로 들면 비용함수가 최소가 되게 하는 가중치와 편향을 찾는 동시에 가중치들의 절대값의 합도 최소가 되어야 한다. 따라서 가중치 w의 값들은 0 또는 0에 가깝게 작아져야 하므로 어떤 특성들은 모델을 만들 때 거의 사용하지 않게 된다. 

 

L2 규제는 L1 규제와 달리 가중치들의 제곱합을 최소화하므로 w의 값이 완전히 0이 되기보다는 0에 가까워지는 경향을 띈다. L1 규제는 어떤 특성들이 모델에 영향을 주고 있는지를 판단하고자 할 때 유용하다. 만약 이런 판단이 필요하지 않다면 L2 규제가 더 잘 동작하므로 L2 규제를 더 권장한다. 인공신경망에서 L2 규제를 '가중치 감쇠(weight decay)'라고 부른다. 

 

파이토치에서는 옵티마이저의 weight_decay 매개변수를 설정하므로 L2 규제를 적용한다. weight_decay 매개변수의 기본값은 0이다. weight_decay 매개변수에 다른 값을 설정할 수도 있다. 

 

 

3. L1 regularization 이나 L2 regularization을 사용하면 과적합을 완화할 수 있는 이유

W1과 W2로 구성된 신경망이 있다고 가정해보자 .

L1 regularization의 경우, 원래의 손실함수를 최소화한다. 또한 |W1| + |W2| <= s 조건을 만족시키는 W1과 W2를 찾아야 한다. 이렇게 절댓값 조건을 사용함으로써, 손실함수를 지나치게 최소화하느라고 나타날 수 있는 과적합이 나타나지 않게 해준다. 즉 손실함수를 최소화하는 조건을 통제해주는 것이다. 

 

L2 regulariztion의 경우, 원래의 손실함수를 최소화함과 동시에 (W1)의 제곱 + (W2)의 제곱 <=  s  조건을 만족시키는 W1과 W2를 찾아야 한다. 여기서도 역시 손실함수를 최소화하면서 나타날 수 있는 과적합을 막아준다. 

 

 

♣ 드롭아웃(Dropout)

드롭아웃은 학습 과정에서 신경망의 일부를 사용하지 않는 방법을 말한다. 

예를 들어 드롭아웃의 비율을 0.5로 한다면 학습 과정마다 랜덤으로 절반의 뉴런만을 사용한다. 

 

드롭아웃은 신경망 학습 시에만 사용하고, 예측 시에는 사용하지 않는 것이 일반적이다. 학습 시에는 인공신경망이 특정 뉴런 또는 특정 조합에 너무 의존적이게 되는 것을 방지하고, 매번 랜덤 선택으로 뉴런들을 사용하므로 서로 다른 신경망들을 앙상블하여 사용하는 것 같은 효과를 내어서 과적합을 방지한다. 

 

 

 

♣ Early Stopping

valid loss가 증가하는 것은 과적합의 징조이다. Early Stopping이란 valid loss가 증가하기 시작할 때 학습을 중단하는 것이다. 이는 number of Gradient Descent의 step에 제한을 거는 것이기 때문에 regulariztion의 역할을 한다. 

 

 

♣ 참고 자료

L2 Normalization(Weight Decay)

https://sanghyu.tistory.com/88

 

[PyTorch] Weight Decay (L2 penalty)

Weight decay를 하는 이유 한마디로 말하자면 overfitting을 방지하기 위해 weight decay를 한다. overfitting은 train dataset에 과도하게 맞춰져서 generalization성능이 낮은 것을 의미한다. 그래서 처음 본 test set

sanghyu.tistory.com