최적화(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)
xxxxxxxxxx
model.add(layers.Dense(
16,
kernel_regularizer=regularizers.l2(0.001),
activation='relu',
input_shape=(10000,)
))
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)
문제 유형 | 마지막 층 activation | loss func |
---|---|---|
binary classification | sigmoid | binary_crossentropy |
단일 label multi classification | softmax | categorical_crossentropy |
다중 label multi classfication | sigmoid | binary_crossentropy |
임의 값에 대한 regression | 없음 | mse(mean squared error) |
0과 1 사이 값에 대한 regression | sigmoid | mse or binary_crossentropy |
- 최적화 함수 설정
7) 과대 적합 모델 구축
- 충분한 층과 파라미터가 있는지 확인
- 층을 추가
- 층의 크기를 키운다(학습 파라미터 수 증가)
- 더 많은 epoch 동안 훈련
- 모델 성능이 감소하기 시작했을 때 과대적합에 도달한 것임
- 규제와 모델 튜닝을 통해 이상적인 모델에 가깝게 만든다
8) 모델 규제와 하이퍼파라미터 튜닝
- dropout 추가
- 층을 추가하거나 제거해서 다른 구조를 시도해본다.
- L1이나 L2 또는 두 가지 모두 추가한다
- 하이퍼파라미터 조정(유닛 수, 학습률)
- 선택적으로 특성 공학을 시도해본다.
- 검증 데이터에 과대적합되지 않도록 조심
'A·I' 카테고리의 다른 글
What is AI and an Agent? (0) | 2019.04.18 |
---|---|
DSP를 이용한 음성 인식 (speech recognition) 구현 1편 : 음성 데이터 분석 (9) | 2019.03.12 |
[keras] Boston Housing 데이터를 통한 주택 가격 예측(regression) (0) | 2019.01.05 |
[keras] 정확한 평가를 위한 검증(validation) 데이터 나누기 (0) | 2019.01.05 |
[keras] tensorflow-gpu ImportError 해결 및 keras 간단 설치 (0) | 2019.01.04 |
댓글