딥러닝 기초 -3 딥러닝의 문제점 (과적합(overfiting))

2022. 1. 16. 17:38머신러닝/딥러닝

과적합(Overfitting)

과적합(Overfitting)은 모델이 학습 데이터에만 너무 치중되어 학습 데이터에 대한 예측 성능은 좋으나 테스트 데이터에 대한 예측 성능이 떨어지는 경우를 말합니다.

모델이 과적합되면 일반화되지 않은 모델이라고도 합니다. 과적합이 발생하는 원인은 아래와 같습니다.


  • 데이터의 퍼진 정도, 즉 분산(variance)이 높은 경우
  • 너무 많이 학습 데이터를 학습시킨 경우 (epochs가 매우 큰 경우)
  • 학습에 사용된 파라미터가 너무 많은 경우
  • 데이터에 비해 모델이 너무 복잡한 경우
  • 데이터에 노이즈 & 이상치(outlier)가 너무 많은 경우

 

 

L1, L2 정규화(Regularization) 기법

L1 정규화

L1 정규화 가중치(weight)의 절댓값에 비례하는 손실(loss)이 기존 손실 함수(loss function)에 추가되는 형태입니다.

L1 정규화는 모델 내의 일부 가중치를 0으로 만들어 의미있는 가중치만 남도록 만들어줍니다. 이를 통해 모델을 일반화시킬 수 있습니다. 다른 말로 Sparse Model을 만든다라고도 합니다.


L1 정규화를 적용하기 위해 사용하는 함수/라이브러리

  • tf.keras.layers.Dense(kernel_regularizer = tf.keras.regularizers.l1(ratio))
    • ratio : 가중치에 L1 정규화를 적용하는 비율 (0.001 ~0.005)

L2 정규화

L2 정규화 가중치의 제곱에 비례하는 손실이 기존 손실 함수에 추가되는 형태입니다.

L2 정규화는 학습이 진행될 때 가중치의 값이 0에 가까워지도록 만들어줍니다. 가중치를 0으로 만들어주는 L1 정규화와는 차이가 있습니다.

이를 통해 특정 가중치에 치중되지 않도록 가중치 값을 조율하게 되며 가중치 감쇠 (Weight Decay)라고도 부릅니다.


L2 정규화를 적용하기 위해 사용하는 함수/라이브러리

  • tf.keras.layers.Dense(kernel_regularizer = tf.keras.regularizers.l2(ratio))
    • ratio : 가중치에 L2 정규화를 적용하는 비율 (0.001 ~0.005)

 

 

 

드롭 아웃(Drop out) 기법

드롭 아웃(Drop Out)은 모델이 과적합되는 것을 막기 위한 가장 보편적인 정규화(Regularization) 기법 중 하나입니다.

드롭 아웃은 데이터를 학습할 때, 일부 퍼셉트론(뉴런)을 랜덤하게 0으로 만들어 모델 내부의 특정 가중치(Weight)에 치중되는 것을 막습니다.

이를 통해 모델이 일부 데이터에 가중되는 것을 막고 일반화된 모델을 만들 수 있습니다.

드롭 아웃을 사용하는데 있어 주의할 점은 학습이 끝난 후 테스트 과정에서는 드롭 아웃을 사용하면 안된다는 점입니다.

 

 

드롭 아웃을 사용하기 위한 함수/라이브러리

  • tf.keras.layers.Dropout(prob)
    • prob : 드롭 아웃을 적용할 확률 (0.1 ~ 0.5)

 

배치 정규화(Batch Normalization)

배치 정규화(Batch Normalization)는 정규화를 모델에 들어가는 입력 데이터뿐만 아니라 모델 내부 히든층의 입력 노드에도 적용하는 것입니다.

배치 정규화를 적용하면 매 층마다 정규화를 진행하므로 가중치 초기값에 크게 의존하지 않습니다. 즉, 가중치 초기화의 중요도가 감소합니다.

또한 과적합을 억제합니다. 즉, 드롭 아웃(Drop out)과 L1, L2 정규화의 필요성이 감소합니다.

가장 큰 장점은 학습 속도도 빨라진다는 것입니다.


배치 정규화를 사용하기 위한 함수/라이브러리

배치 정규화는 하나의 레이어로써 Dense 레이어와 활성화 함수 사이에서 작용합니다.

따라서 이번 실습에서는 기본 모델을 생성할 때 활성화 함수와 똑같은 역할을 하는 Activation 레이어를 따로 활용해야 합니다.

  • tf.keras.layers.BatchNormalization()
    • 배치 정규화를 하는 레이어입니다.
  • tf.keras.layers.Activation()
  • 활성화 함수를 추가하는 레이어입니다.

활성화 함수 레이어와 Dense 레이어를 활용하는 예시는 아래와 같습니다. 즉, 활성화 함수 레이어를 사용하면 Dense 레이어에서 activation을 설정하지 않아도 됩니다.

...
tf.keras.layers.Dense(256),
tf.keras.layers.Activation('relu')
...

 

728x90