[딥러닝 입문] 훈련 노하우

do it! 딥러닝 입문 강의 들으며 필기용..


데이터 세트는 보통 80 20의 비율로 준비하고 이는 훈련 세트+ 검증세트 와 테스트 세트의 비율이다.

80비율을 훈련세트 60%, 검증세트 (또는 개발세트)20%, 테스트 세트 20%으로 구성한다.

  • 학습률(Learning rate)
    : 학습률이 적절해야 가중치의 변화가 안정적이므로 전역 최솟값에 잘 도달한다.
    학습률이 너무 높으면 가중치의 변화가 크므로 전역 최솟값을 지나칠 수도 있다.

스케일을 조정해 모델을 훈련하는데, 일반적으로 표준화로 전처리해서 훈련시킨다.

검증 세트를 (검증 세트의) 평균, 표준 편차로 전처리하려고 할 때 원데이터보다 스케일이 작아진다.
(이동되는, 변환되는 거리가 달라짐)

훈련데이터의 평균과 표준편차 이용해서 훈련했는데 다른 평균 표준편차 이용하면 당연히 엉터리 값 나옴.

검증 세트를 훈련할 때는 '훈련 데이터'의 평균과 표준편차를 이용해서 전처리 해야한다.
(그래프를 통해서 직관적으로 확인 가능)

그러므로 훈련 데이터의 평균과 표준편차를 저장해두었다가 나중에 사용.


과대적합과 과소적합

정확도와 훈련 세트 크기를 가지고 비교할 수 있음.
훈련 세트 정확도가 높으면 검증세트 정확도가 떨어짐.

과대 적합은 분산이 크다고도 이야기하며 훈련세트 정확도와 검증 세트 정확도 사이의 갭이 클 때를 이야기함.

과소 적합은 훈련 세트 크기 키움에 따라서 훈련세트 정확도와 검증 세트 정확도가 가깝게 비슷해지고, 전반적인 정확도는 (기대하는 정확도에 비해) 낮아지는 것을 이야기하며, 편향이 크다고도 이야기한다.

바람직한 모델은 원하는 정확도 기대치에 부합하고 데이터 양이 많아짐에 따라 훈련 세트 정확도가 감소하되 검증세트의 정확도를 높여서 근사하게 가까워지는 모델이다. (너무 가까워도 너무 벌어져도 X)

일반적으로는 모델을 과대 적합 시킨 후 규제해서 적절한 모델을 찾는다.
규제의 방법은 가중치 규제하거나 드롭아웃 방법을 쓰는 등의 방법을 쓴다.


규제 방법, 단일층 신경망 적용

L1 규제, L2 규제
       이 부분 다시 공부하기

사이킷런에서는 L1과 L2규제를 모두 사용하는 엘라스틱 넷(Elastic Net) 을 제공하고 있음

L1가 높아지면 (규제가 높아지면) 손실값이 높아진다. (L1=0.0001, L1= 0.001, L1=0.01)
훈련에서도 검증에서도 손실 점수가 좋지 않다.
적절한 epoke 횟수만큼 훈련하면서 훈련 세트의 특정들을 학습하게 하려면 과대적합 되지 않도록 억제할 필요 있음 .

L2를 높아지면 손실함수 손실값이 억제, 가중치가 0에 가까워지고(=일관성 높은 모델) (L1처럼 완전히 0이 되지 않음, 그래서 L2 조금 더 선호함)


교차 검증 과정

교차 검증 과정

5 폴드 교차 검증

검증 세트를 따로 나누지 않고 훈련 세트 전체를 사용한다.
사이킷런에는 파이프라인 PipeLine 클래스 있음 .
전처리와 모델을 하나의 하이프라인으로 정의한다.
pipe = make_pipeline(StandardScaler(), sgd)

from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
pipe = make_pipeline(StandardScaler(), sgd)
scores = cross_validate(pipe, x_train_all, y_train_all, cv=10, return_train_score=True)
print(np.mean(scores['test_score']))

좋은 웹페이지 즐겨찾기