AOC55

Backend, Devops, Cloud, kubernetes

Data & AI

데이터 :: [케라스 및 딥러닝] 머신러닝의 기본요소-2

aoc55.soft@gmail.com 2020. 8. 28. 16:10

아래 내용은 '케라스 창시자에게 배우는 딥러닝' 서적의 내용을 정리한 내용임

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

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

- 입력데이터는 무엇이고, 어떤 것을 예측할 것인지?

- 가용가능한 훈련데이터는 무엇이고 충분한지?

- 어떤 종류의 문제인지? 

  • ex) 이진분류/다중분류/회귀/다중레이블다중분류/ 군집/강화학습 등?

  • 문제 유형을 식별하게 되면, 모델 구조와 손실함수 선택에 도움이 된다

- 가설

    1. 주어진 입력으로, 출력을 예측 할 수 있다

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

 -> 실제 모델이 작동하기  까지는, 이는 가설에 불과

 

 

2) 성공지표 선택

-정확도, 정밀도, 재현율, 고객 재방문율 등

-결정한 성공의 지표가 모델이 최적화할 손실함수 선택의 기준이 된다

 

(성공지표 선택 샘플)

1)클래스 분포가 균일한 분류 -> 정확도, ROC-AUC

2)분포가 비균일한 분류 -> 정밀도, 재현율 등

3)랭킹 다중레이블 -> 평균 정밀도 등

cf) 성공측정 위해 자신만의 지표 정의하는 방식은 대체로 일반적이지 않음

 

3) 평가방법

(1) 홀드아웃 검증 세트 분리

(2) K겹 교차검증

(3) 반복 K겹 교차검증

 

-딥러닝의 경우 1번으로 충분함

-(애초에 딥러닝이면 데이터가 많다고 가정상태 인 것이고, 그에 따라 2/3번은 학습비용이 너무 크다)

-2,3번은 얕은 학습에서 주로 사용

 

4) 데이터 전처리(준비)

-데이터는 텐서로 구성

-텐서에는 작은 값으로 스케일 조정 (ex [-1, 1]이나 [0,1] 범위로)

-특성마다 범위 다를 경우 정규화 등의 필요

-Feature Engineering 수행 (특히 데이터의 숫자가 적을 때)

 

5) 기본보다 나은 모델 구현하기

-통계적 검정력(statistical power) 달성하기!

-아주 단순한 모델보다, 나은 수준의 작은 모델 구현하기

-2개의 가설 명심

  1. 주어진 입력으로 출력 예측 할 수 있음
  2. 입력과 출력사이의 관계를 학습하는데 충분한 정보다 가용 데이터에 있음

-가설 잘못될 수 도 있음 그러면 기획부터 다시하자.

 

첫번째 모델을 위한 주요 선택들 (활성화함수, 손실함수, 최적화 등)

1) 마지막 층의 활성화 함수: sigmoid, softmax, 사용X 등

2) 손실함수: crossentropy, mse 등

3) 최적화 설정: 어떤 Optimizer를 사용할 것인지?

   -대부분은 rmsprop 과 기본 Learining Rate로 충분하다

 

6) 과대적합 모델 구축하기

-통계적검정력 가진 모델 완성했으면, 충분한 성능을 내는지 검토

-(머신러닝은 최적화와 일반화 사이의 줄다리기, 과소적합과 과대적합 사이)

-얼마나 큰 모델 가능한지 파악하기 위해, 먼저 과대적합 모델을 만들어본다

  1. 층을 추가한다

  2. 각 층 크기를 키운다

  3. 더 많은 에포크 동안 훈련한다 등

위를 진행하면서 훈련/검증 지표 및 훈련/검증 손실 모니터링을 수행한다

=> 검증데이터에서 모델 성능 감소 시 과대적합 도달

 

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

반복적으로 모델 수정, 훈련하고 검증데이터에서 평가 (테스트 데이터 사용하면 안됨)

 

규제와 튜닝을 위해 시도할 항목들

  1. 드롭아웃

  2. 층 추가/제거 하여, 다른 구조를 시도한다

  3. L1, L2 규제 등 적용

  4. 하이퍼파라미터 바꾸어 본다

  5. 선택적으로 Feature Engineering 시도한다

* 단, 검증과정에서 얻은 피드백을 사용하며 모델 튜닝 시마다 검증 과정에 대한 정보를 모델에 누설하고 있는 것임.

-> 단순 몇번은 이슈가 없을지 모르나, 많이 반복하게 되면 모델이 검증 과정(사실 검증데이터에서 대해서 훈련되지 않았음에도)에 과대적합 -> 검증 과정의 신뢰도 감소

 

 

만족할만한 모델 설정 얻었다면

-가용가능한 모든 데이터(훈련+검증) 사용해서, 최종 모델 훈련 후 마지막 테스트 세트에서 평가

 

* 만약 테스트세트의 성능이 검증 데이터에서 측정한것보다 많이 나쁘다면, 

- 검증과정 신뢰성 없거나 하이퍼파라미터 튜닝 동안 검증 데이터에 과대적합이 발생한 것으로

- 반복 K겹 교차검증으로 바꾸는 등 검토