아래 내용은 '케라스 창시자에게 배우는 딥러닝' 서적의 내용을 정리한 내용임
보편적인 머신러닝/딥러닝의 작업 흐름
1) 문제 정의와 데이터 셋 수집
- 입력데이터는 무엇이고, 어떤 것을 예측할 것인지?
- 가용가능한 훈련데이터는 무엇이고 충분한지?
- 어떤 종류의 문제인지?
-
ex) 이진분류/다중분류/회귀/다중레이블다중분류/ 군집/강화학습 등?
-
문제 유형을 식별하게 되면, 모델 구조와 손실함수 선택에 도움이 된다
- 가설
-
주어진 입력으로, 출력을 예측 할 수 있다
-
가용한 데이터에 입력과 출력 사이의 관계를 학습하는 데 충분한 정보가 있다
-> 실제 모델이 작동하기 전 까지는, 이는 가설에 불과
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) 마지막 층의 활성화 함수: sigmoid, softmax, 사용X 등
2) 손실함수: crossentropy, mse 등
3) 최적화 설정: 어떤 Optimizer를 사용할 것인지?
-대부분은 rmsprop 과 기본 Learining Rate로 충분하다
6) 과대적합 모델 구축하기
-통계적검정력 가진 모델 완성했으면, 충분한 성능을 내는지 검토
-(머신러닝은 최적화와 일반화 사이의 줄다리기, 과소적합과 과대적합 사이)
-얼마나 큰 모델 가능한지 파악하기 위해, 먼저 과대적합 모델을 만들어본다
-
층을 추가한다
-
각 층 크기를 키운다
-
더 많은 에포크 동안 훈련한다 등
위를 진행하면서 훈련/검증 지표 및 훈련/검증 손실 모니터링을 수행한다
=> 검증데이터에서 모델 성능 감소 시 과대적합 도달
7) 모델 규제와 하이퍼파라미터 튜닝
반복적으로 모델 수정, 훈련하고 검증데이터에서 평가 (테스트 데이터 사용하면 안됨)
규제와 튜닝을 위해 시도할 항목들
-
드롭아웃
-
층 추가/제거 하여, 다른 구조를 시도한다
-
L1, L2 규제 등 적용
-
하이퍼파라미터 바꾸어 본다
-
선택적으로 Feature Engineering 시도한다
* 단, 검증과정에서 얻은 피드백을 사용하며 모델 튜닝 시마다 검증 과정에 대한 정보를 모델에 누설하고 있는 것임.
-> 단순 몇번은 이슈가 없을지 모르나, 많이 반복하게 되면 모델이 검증 과정(사실 검증데이터에서 대해서 훈련되지 않았음에도)에 과대적합 -> 검증 과정의 신뢰도 감소
만족할만한 모델 설정 얻었다면
-가용가능한 모든 데이터(훈련+검증) 사용해서, 최종 모델 훈련 후 마지막 테스트 세트에서 평가
* 만약 테스트세트의 성능이 검증 데이터에서 측정한것보다 많이 나쁘다면,
- 검증과정 신뢰성 없거나 하이퍼파라미터 튜닝 동안 검증 데이터에 과대적합이 발생한 것으로
- 반복 K겹 교차검증으로 바꾸는 등 검토
'IT > Data & AI' 카테고리의 다른 글
데이터 :: 경사하강법의 종류와 개념(배치, 확률적, 미니배치) - BGD, SGD, MSGD (0) | 2021.02.04 |
---|---|
데이터 :: [케라스 및 딥러닝] 머신러닝의 기본요소-1 (0) | 2020.08.28 |
데이터 :: [캐글 Kaggle] Competitions 카테고리 타입 (0) | 2020.08.04 |
데이터 :: Reducible error 과 Irreducible error (0) | 2020.01.22 |