페이지

2022년 7월 30일 토요일

4.6 요약

 1) 주어진 문제와 훈련할 데이터를 정의 합니다. 이 데이터를 수집하고 필요하면 레이블을 태킹합니다.

2) 성공을 어떻게 측정할지 선택하세요. 검증 데이터에서 모니터링할 지표는 무엇인가요?

3) 평가 방법을 결정하세요. 홀드아웃 검증이나 K-겹 교차 검증인가요? 검증에 사용해야 할 데이터의 양은 얼마나 되나요?

4) 단순한 랜덤 선택 모델보다 나은 통꼐적 검정려이 있는 첫 번째 모델을 만듭니다.

5) 과대적합된 모델을 만듭니다.

6) 검증 데이터ㅢ 성능에 기초하여 모델에 규제를 적용하고 하이퍼파라미터를 튜닝합니다. 머신러닝 연구의 대부분은 이단계에 집중됩니다. 하지만 큰 그림을 놓치지 마세요.

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

 이 단계가 대부분의 시간을 차지합니다. 반복적으로 모델을 수정하고 훈련하고 검증 데이터에서 평가합니다(이때 테스트 데이터를 사용하지 않습니다). 그리고 다시 수정하고 가능한 좋은 모델을 얻을 때까지 반복합니다. 적용해 볼 것은 다음과 같습니다.

1) 드롭아웃을 추가합니다.

2) 층을 추가하거나 제거해서 다른 구졸르 시도해 봅니다.

3)L1이나 L2또는 두 가지 모두 차가합니다.

4) 최적의 설정을 찾기 위해 하이퍼파라미터를 바꾸어 시도해 봅니다(층의 유닛 수나 옵티마이저의 학습률 등).

5) 선택적으로 특성 공학을 시도해 봅니다. 새로운 특성을 추가하거나 유용하지 않을 것 같은 특성을 제거합니다.

다음사항을 유념하세요. 검증 과정에서 얻은 피드백을 사용하여 모델을 튜닝할 때마다 검증 과정에 대한 정보를 모델에 누설하고 있다는 것입니다. 몇 번만 반복하는 것은 큰 문제가 되지 않습니다. 하지만 많이 반복하게 되면 결국 모델이 검증 과정에 과대적합될 것입니다(모델이 검증 데이터에서 전혀 훈련되지 않는데도 말입니다). 이는 검증 과정의 신뢰도를 감소시킵니다.

만족할 만한 모델 설정을 얻었다면 가용한 모든 데이터(훈려 데이터와 검증 데이터)를 사용해서 제품에 투입할 최종 모델을 훈련시킵니다. 그리고 마지막에 딱 한번 테스트 세트에서 평가합니다. 테스트 세트의 성능이 검증 데이터에서 측정한 것보다 많이 나쁘다면, 검증 과정에 전혀 신뢰성이 없거나 모델의 하이퍼파라미터를 튜닝하는 동안 검증 데이터에 과대적합된 것입니다. 이런 경우에는 좀 더 신뢰할 만한 평가 방법으로 바꾸는 것이 좋습니다(반복 K-겹 교차검증)

4.5.6 몸집 키우기: 과대적합 모델 구축

 통계적 검정력을 가진 모델을 얻었다면 이제 모델이 충분히 성능을 내느지 질문해 보야야 합니다. 주어진 문제를 적절히 모델링하기에 충분한 층과 파라미터가 있나요? 예를 들어 2개의 유닛을 가진 하나의 은닉 층으로 구성된 ㅔㄴ트워크가 있다고 가정합시다. 이 네트워크가 MNIST데이터셋에서 통계적 검정력을 가질 수 있지만 문제를 잘 해결하기에는 충분하지 않을 것입니다. 머신 러닝은 최적화와 일반화 사아의 줄다리기라는 점을 기억하세요. 과서적합과 과대적합 사이, 즉 과서용량과 과대용량의 경계에 적절히 위치한 모델이 이상적입니다. 이 경계가 어디에 위치하는 지 찾기 위해서는 먼저 지나쳐 보아야 합니다.

얼마나 큰 모델을 만들어야 하는지 알기 위해서는 과대적합된 모델을 만들어야 합니다. 이는 아주 쉽습니다.

1) 층을 추가합니다.

2) 층의 크기를 키웁니다.

3) 더 많은 에포크 동안 훈련합니다.

관심 대상인 훈련과 검증 지표는 물론 항상 훈련 손실과 검증 손실을 모니터링하세요. 검증 데이터에서 모델 성능이 감소하기 시작했을 때 과대적합에 도달한 것입니다.

다음 단계에서 규제와 모델 튜닝을 시작하여 과소적합도 아니고 과대적합도 아닌 이상적인 모델에 가능한 가깝도록 만듭니다.

4.5.5 기본보다 나은 모델 훈련하기

 이 단계의 목표는 통계적 검정력(statistial power)을 달성하는 것입니다. 즉 아주 단순한 모델보다 나은 수준의 작은 모델을 개발합니다. MNIST숫자 이미지 분류 예에서는 0.1보다 높은 정확도를 내는 모델이 통계적 검정력을 가졌다고 말할 수 있습니다. IMDB예에서는 0.5보다 높은 정확도를 갖는 것입니다. 

통계적 검정력을 달성하는 것이 항상 가능하지는 않습니다. 여러 개의 타당성 있는 네트워크 구조를 시도해 보고 무작위로 예측하는 모델보다 낫지 않다면 입력 데이터에 존재하지 않는 것을 얻으려고 한다는 신호일 것입니다. 2개의 가설이 있다는 것을 기억하세요.

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

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

이가설이 잘못된 것일 수 있습니다. 이때는 기획부터 다시 해야 합니다.

일이 잘 진행되다고 가정하면 첫 번째 모델을 만들기 위해 세가지 중요한 선택을 해야 합니다.

1) 마지막 층의 활성화 함수: 네트워크의 출력에 필요한 제한을 가합니다. 예를 들어 IMDB분류 예는 마지막 츠에 시그모이드 함수를 사용합니다. 회귀 예에서는 마지막 층에 활성화 함수를 사용하지 않습니다.

2) 손실 함수: 툴려고 하는 문제의 종류에 적합해야 합니다. 예를 들어 IMDB 예제는 binary_crossentrop를 사용하고, 회귀 예제는 mse를 사용하는 식입니다.

3) 최적화 설정: 어떤 옵티마이저를 사용하나요? 학습률은 얼마인가요? 대부분의 경우 rmsprop과 기본 학습률을 사용하는 것이 무난합니다.

손실 함수의 선택에 대ㅑ해서 언급할 것은 주어진 문제의 성고 지표를 직접 최적화하는 것이 항상 가능하지 않다는 점입니다. 때로는 이 지표를 손실 함수로 바꿀 수 있는 방법이 없습니다. 무엇보다도 손실 함수는 주어진 미니 배치 데이터에서 계산 가능해야 하고(이상적으로 손실 함수는 하나의 데이터 포인트에서 계산 가능해야 합니다), 미분 가능해야 합니다(그렇지 않으면 역전파 알고리즘을 사용하여 네트워크를 훈련 시킬수 없습니다). 예를 들어 널리 사용되는 분류 지표인 ROC AUC는 직접 최적화 될 수 없습니다. 그래서 분류 작업에는 크로스엔트로피처럼 ROC AUC를 대신할 지표를 최적홧하는 것이 보통입니다. 일반적으로 크로스엔트로피가 낮을수록 ROC AUC가 높다고 기대할 수 있습니다.

표 4-1 에 자주 등장하는 문제 유형에 따라 선택할 수 있는 마지막 츠의 활성화 함수와 손실 함수를 정리했습니다.

문제유형    마지막 층의 활성화 함수    손실함수

이진 분류    시그로이드    binary_crossentropy

단일 레이블 다중 분류    소프트맥스    categorical__crossentropy

다중 레이블 다중 분류    시그모이드     binary_crossentropy

임의 값에 대한 회귀    없음        mse

0과 1사이 값에 대한 회귀    시그모이드    mse또는 binary_crossentropy

4.5.4 데이터 준비

 무엇을 훈련할지와 무엇을 최적화할지, 그리고 어떻게 평가할지를 정했다면 거의 모델을 훈련시킬 준비가 되었습니다. 하지만 먼저 머신 러닝 모델에 주입할 데이터를 구성해야 합니다. 여기에서는 이 머신 러닝 모델을 심층 신경망이라고 가정합니다.

1) 앞서 보았듯이 텐서로 구성됩니다.

2) 이 텐서에 있는 값은 일반적으로 작은 값으로 스케일 조정되어 있습니다. 예를 들어 [-1,1]이나 [0,1] 범위입니다.

3) 특성마다 범위가 다르면(여러 종류의 값으로 이루어진 데이터라면) 정규화 해야 합니다.

4) 특성 공학을 수행할 수 있습니다. 특히 데이터가 적을 때입니다.

입력 데이터와 타깃 데이터의 텐서가 준비되면 모델을 훈련시킬 수 있습니다.

4.5.3 평가 방법 선택

 목표를 ㅅ정했다면 현재의 진척 상황을 평가할 방법을 정해야 합니다. 앞서 잘 알려진 세 가지의 평가 방식을 소개했습니다.

1) 홀드아웃 검증 세트 분리: 데이터가 풍부할 때 사용합니다.

2) K-겹 교차 검증: 홀드아웃 검증을 사용하기에 샘플의 수가 너무 적을 때 사용합니다.

3) 반복 K-겹 교차 검증: 데이터가 적고 매우 정확한 모델 평가가 필요할 때 사용합니다.

이 중에 하나를 선택하면 됩니다. 대부분의 경우 첫 번째로 충분할 것입니다.

4.5.2 성공 지표 선택

 어떤 것을 제어하려면 관측할 수 있어야 합니다. 성공하기 위해서는 성공은 무엇인가를 정의해야 합니다. 정확도일까요? 정밀도나 재현유일까요? 고객 재방문율일까요? 성공의 지표가 모델의 최적화활 손실 함수를 선택하는 기준이 됩니다. 비즈니스 성고처럼 고수준의 목표와 직접적으로 연결되어 있어야 합니다.

클래스 분포가 균일한 분류 문제에서는 정확도와 ROC AUC 가 일반적이 지표입니다. 클래스 분포가 균일하지 않은 문제에서는 정밀도와 재현율을 사용할 수 있습니다. 랭킹 문제나 다중 레이블 문제에는 평균 정밀도를 사용할 수 있습니다. 성공을 측정하기 위해 자신만의 지표를 정의하는 일은 일반적이지 않습니다. 머신 러닝의 다양한 성공 지표가 여러 가지 종류의 문제에 어떻게 관련되어 있는지 알고 싶다면 캐글(https://kaggle.com)의 데이터 과학 경연 대회를 살펴보는 것이 도움이 됩니다. 캐글에서 굉장이 다양한 문제들과 측정 지표들을 볼 수 있습니다.