데이터분석 공부/DSBA 4기

16/04/24 TIL 딥러닝 컨볼루션 신경망, 과대적합 방지, 전이 학습, 파인 튜닝

이삼오 2024. 4. 16. 16:34

과대적합을 방지할 수 있는 방법

  • 예방책일 뿐 100% 해결해주지 않음
  • 규제화 함수
  • 드롭아웃
  • 배치 정규화

규제화 함수

  • tensorflow.keras.regularizers
  • 케라스에서 제공
  • L1, L2, ElasticNet
  • 규제화함수는 기능에 맞게 가중치의 합을 구해 손실함수에 더해줌
  • 안정적인 그래프가 그려짐

드롭아웃

  • 학습이 진행되는 동안 신경망의 일부 유닛을 제외(드롭)
  • 일부 유닛의 가중치를 학습에서 제외시킴 -> 학습 데이터에 대한 모델의 예측 성능을 저하시켜서 과적합을 방지함
  • 테스트 시에는 드롭아웃이 작동하지 않고 모든 유닛이 활성화되는 대신, 출력값을 드롭아웃 비율만큼 줄여줌
  • Dropout rate는 일반적으로 0.2~0.5 사용
  • 과적합 해소
  • 정확도 역시 개선됨

배치 정규화

  • 드롭아웃과 비교되어 사용되는 기법
  • 내부 공선성(Internal Covariance Shift)을 해결하기 위해 고안된 방법
  • 공선성 : 하나의 독립변수가 다른 하나의 독립변수로 잘 예측되는 경우 혹은 서로 상관이 높은 경우 -> 과대적합의 위험 
  • 다중 공선성 : https://dacon.io/codeshare/4443?page&dtype&ptype
  • 신경망의 층의 출력값은 다양한 입력 데이터에 따라 쉽게 변할 수 있는데, 매우 큰 범위의 출력값은 신경망을 불안정하게 할 수 있음
  • ->이 범위를 제한시켜 불확실성을 감소시킴
  • 그래디언트 손실/폭방 없이 높은 학습률을 사용할 수 있음
  • 자체적인 규제효과가 표함되어 있음

배치 정규화 사용 순서

  • Dense or Conv2D -> BatchNormalization() -> Activation()
  • loss의 범위가 기존 1.75에서 1.6으로 줄어들긴 했으나 과적합은 일어남
  • 과적합 방법론은 아니지만 어느정도 효과는 있다

 

전체 결과

  • 그래프가 벌어지지 않는 것 : 드롭 아웃
  • 배치정규화는 과대적합이 발생했지만 가장 높은 성능을 보여줌
  • 하지만 과대적합에 매우 강력하거나 항상 높은 성능을 얻을 수 있는 건 아님

전이 학습(VGG16)

  • 전이 학습 Transfer Learning
  • 해결하려는 문제에서 빠른 속도로 일정 수준의 베이스라인 성능을 얻고 싶을 때 가장 빠른 방법
  • 만들어진 층과 가중치를 가져와 개조시켜서 사용
  • 사전 학습(Pre-trained)된 네트워크의 가중치를 사용하는 것
  • 대표적인 세 가지 전이 학습 방법
    • 모델을 변형하지 않고 사용 = 학습된 모델의 층과 가중치를 그대로 사용. 학습시켰던 클래스만 분류 가능. 거의 사용되지 않음
    • 모델 분류기를 재학습(가장 대표적) = 출력단의 분류기(Classifier)만 수정해서 모델에 부착. 분류기에 새로운 클래스를 추가하면 학습할 때 사용하지 않았던 클래스도 분류 가능
    • 모델 일부를 동결 해제하여 재학습 = 모델의 일부 층(혹은 모델 전체 층)과 분류기만 재학습
 
  • 사전 학습 모델 사용 시 주요 세 가지 인자를 사용
  • weights : ImageNet 데이터를 학습시킨 가중치의 사용 여부 결정. 기본값은 None. 가중치 사용할 경우 'imagenet' 전달
  • input_shape : 입력 데이터의 형태를 전달
  • include_top : 모델의 분류기를 포함해서 구성할 건지 결정. False를 전달할 경우 데이터셋에 적합한 분류기를 직접 정의해야 됨

동결 해제하는 방법

  • 사용하는 데이터셋 특성이 고유하다면 모델의 일부분만 동결을 해제시키고 재학습시킬 필요가 있다
  • 모델 끝에 존재하는 층을 동결 해제하는 이유?
  • 모델은 상위층(출력과 가까운층)에서 데이터의 구체적인 특성을 학습하고
  • 하위층(입력과 가까운 층)에서 단순한(일반적인) 특징을 학습하기 때문
  • 상위층-> 눈코입 모양 학습 / 하위층-> 얼굴 모양 학습
  • 출력과 가까워질 수록 디테일한 특성을 찾는다