본문 바로가기
A·I

Regularization과 딥러닝의 일반적인 흐름 정리

by 방구석 몽상가 2019. 1. 13.
2019-01-13-deeplearning-flow-

최적화(optimization) : 가능한 훈련 데이터에서 최고의 성능을 얻으려고 모델을 조정하는 과정

일반화(generalization) : 훈련된 모델이 이전에 본 적 없는 데이터에서 얼마나 잘 수행되는지를 의미

하지만, 일반화 성능을 제어할 방법이 없기 때문에 단지 훈련 데이터를 기반으로 모델을 조정할 수 있음

과소적합(underfitting) : 훈련 데이터의 손실이 낮아질수록 테스트 데이터의 손실도 낮아진다. 즉, 모델 성능이 계속 발전될 여지가 있음.

과대적합(overfitting) : 모델이 훈련 데이터에 특화되어 일반화 성능이 높아지지 않고 오히려 감소

즉, 훈련 데이터에 특화된 패턴을 학습하기 시작했다는 의미, 이 패턴은 새로운 데이터와 관련성이 적어 잘못된 판단을 하게 만듦

 

Regularization : 과대적합을 피하는 처리 과정

1) 가장 좋은 방법은 더 많은 훈련 데이터를 모으는 것

2) 차선책은 모델이 수용할 수 있는 정보의 양을 조절하거나 저장할 수 있는 정보에 제약(constraint)을 가하는 것

3) 모델에 있는 학습 파라미터의 수를 줄이는 것 (학습되는 가중치)

파라미터의 수는 층의 수와 각 층의 유닛 수에 의해 결정된다.

Capacity of model : 학습 파라미터 수

4) 적절한 layer 수와 capacity 크기를 결정해야 됨. 작게 시작해서 검증 손실에 따라 크게 하면서 모델을 구축

5) weight regularization(가중치 규제) : 네트워크의 복잡도에 제한을 두어 가중치가 작은 값을 가지도록 강제하는 것 (이렇게 하면 가중치 값의 분포가 더 균일하게 됨)

5.1) L1 regularization : 가중치의 절댓값에 비례하는 비용이 추가됨(가중치의 L1 norm)

5.2) L2 regularization(=weight decay) : 가중치의 제곱에 비례하는 비용이 추가됨(가중치의 L2 norm)

regularizers.l2(0.001) : 가중치 행렬의 모든 원소를 제곱하고 0.001을 곱하여 네트워크의 전체 손실에 더해진다는 의미, 이 규제(패널티)는 훈련할 때만 추가됨

6) Drop out : 입력 벡터 중 일부를 무작위로 0으로 바꿈, 테스트 단계에선 어떤 유닛도 드롭아웃되지 않으나 대신 층의 출력을 드롭아웃 비율에 비례해서 줄여준다.

Dropout 비율 : 0이 될 특성의 비율, 비율이 높을수록 0이 많이 됨, 보통 0.2~0.5 사이

*Occam's razor(오캄의 면도날) 이론 : 어떤 것에 대한 두 가지의 설명이 있다면 더 적은 가정이 필요한 간단한 설명이 옳을 것이라는 이론.

 

보편적인 머신 러닝 작업 흐름

1) 문제 정의와 데이터셋 수집

  • 입력 데이터는 무엇인가?
  • 어떤 것을 예측하려 하는가?
  • 가용한 훈련 데이터가 있어야 어떤 것을 예측하도록 학습할 수 있다.
  • 당면한 문제가 어떤 종류인가? (이진 분류, 다중 분류, 스칼라 회귀, 벡터 회귀, 다중 레이블 다중 분류, 군집, 생성, 강화학습 등)
  • 문제의 유형을 식별하면 모델의 구조와 손실 함수 등을 선택하는데 도움이 된다.

입력과 출력이 무엇인지와 어떤 데이터를 사용할 것인지 알아야 함!

1) 주어진 입력으로 출력을 예측할 수 있다고 가설을 세운다.

2) 가용한 데이터에 입력과 출력 사이의 관계를 학습하는 데 충분한 정보가 있다고 가설을 세운다.

  • nonstationary problem(시간에 따라 변하는 문제) : 최근 데이터로 주기적으로 훈련하거나, 시간 분포에 맞게 데이터를 수집하여 시간에 따라 변하지 않는 문제로 바꾼다.

2) 성공 지표 선택

  • 클래스 분포가 균일한 분류 문제에서는 정확도, ROC, AUC가 일반적인 지표
  • 클래스 분포가 균일하지 않은 문제에서는 정밀도, 재현율 사용
  • 랭킹 문제나 다중 레이블 문제에는 평균 정밀도를 사용할 수 있음

3) 평가 방법 선택

  • Hold-out validation set 분리 : 데이터가 풍부할 때 사용 (그냥 검증데이터만 나누는 것)
  • K-fold cross validation : 홀드아웃 검증을 사용하기에 샘플의 수가 너무 적을 때 사용
  • 반복 k-fold cross validation : 데이터가 적고 매우 정확한 모델 평가가 필요할 때 사용

4) 데이터 준비

  • feature마다 범위가 다르면 정규화해야 한다.
  • feature engineering를 수행할 수 있다. 특히, 데이터가 적을 때

5) 기본보다 나은 모델 훈련하기

  • 마지막 층의 활성화 함수
  • 손실 함수 : 성공 지표에 대한 손실 함수로 바꿀 수 없는 경우도 있음(ROC, AUC)
문제 유형마지막 층 activationloss func
binary classificationsigmoidbinary_crossentropy
단일 label multi classificationsoftmaxcategorical_crossentropy
다중 label multi classficationsigmoidbinary_crossentropy
임의 값에 대한 regression없음mse(mean squared error)
0과 1 사이 값에 대한 regressionsigmoidmse or binary_crossentropy
  • 최적화 함수 설정

7) 과대 적합 모델 구축

  • 충분한 층과 파라미터가 있는지 확인
  • 층을 추가
  • 층의 크기를 키운다(학습 파라미터 수 증가)
  • 더 많은 epoch 동안 훈련
  • 모델 성능이 감소하기 시작했을 때 과대적합에 도달한 것임
  • 규제와 모델 튜닝을 통해 이상적인 모델에 가깝게 만든다

8) 모델 규제와 하이퍼파라미터 튜닝

  • dropout 추가
  • 층을 추가하거나 제거해서 다른 구조를 시도해본다.
  • L1이나 L2 또는 두 가지 모두 추가한다
  • 하이퍼파라미터 조정(유닛 수, 학습률)
  • 선택적으로 특성 공학을 시도해본다.
  • 검증 데이터에 과대적합되지 않도록 조심

댓글