정보 기반 탐색: 거칠게부터 정밀하게

Python에서의 하이퍼파라미터 튜닝

Alex Scriven

Data Scientist

정보 기반 vs 비정보 탐색

 

지금까지는 모두 비정보 탐색이었습니다:

비정보 탐색: 하이퍼파라미터 튜닝의 각 반복이 이전 반복에서 학습하지 않는 경우.

이 덕분에 병렬화가 가능하지만, 효율적이지는 않습니다.

Python에서의 하이퍼파라미터 튜닝

정보 기반 vs 비정보

지금까지의 프로세스:

비정보 프로세스 맵

대안 방법:

정보 기반 프로세스 맵

Python에서의 하이퍼파라미터 튜닝

거칠게부터 정밀하게 튜닝

기본 정보 기반 탐색 방법론:

거칠고 무작위로 시작해, 반복적으로 범위를 좁혀 정밀 탐색합니다.

프로세스:

  1. 무작위 탐색
  2. 유망한 영역 찾기
  3. 좁힌 영역에서 그리드 탐색
  4. 최적 점수를 얻을 때까지 반복

(3) 대신 그리드 탐색 전 무작위 탐색을 더 할 수도 있습니다.

Python에서의 하이퍼파라미터 튜닝

왜 거칠게부터 정밀하게?

거칠게부터 정밀하게 튜닝의 장점:

  • 그리드와 무작위 탐색의 장점 활용
    • 처음엔 넓게 탐색
    • 좋은 지점이 보이면 그 구간을 깊게 탐색
  • 시간과 계산 자원을 더 효율적으로 써서 빠르게 반복 가능

성과가 낮은 공간에 시간을 낭비할 필요가 없습니다!

참고: 단일 모델이 아니라 배치 단위로 정보가 쌓입니다.

Python에서의 하이퍼파라미터 튜닝

거칠게부터 정밀하게 수행하기

다음 하이퍼파라미터 범위 예시를 보겠습니다:

  • max_depth_list 1~65
  • min_sample_list 3~17
  • learn_rate_list 0.01~150 사이 150개 값

가능한 모델은 몇 개입니까?

combinations_list = [list(x) for x in product(max_depth_list, min_sample_list, learn_rate_list)]
print(len(combinations_list))
134400
Python에서의 하이퍼파라미터 튜닝

거칠게부터 정밀하게 시각화

무작위 탐색을 500개 조합에만 수행해 봅니다.

정확도 점수를 다음과 같이 그립니다:

모델 정확도 밀도 플롯

좋은 모델은 어떤 것이었나요?

Python에서의 하이퍼파라미터 튜닝

거칠게부터 정밀하게 시각화

상위 결과:

max_depth min_samples_leaf learn_rate accuracy
10 7 0.01 96
19 7 0.023355705 96
30 6 1.038389262 93
27 7 1.11852349 91
16 7 0.597651007 91
Python에서의 하이퍼파라미터 튜닝

거칠게부터 정밀하게 시각화

max_depth 대비 정확도 점수를 시각화해 봅시다:

최대 깊이 vs 정확도 산점도

Python에서의 하이퍼파라미터 튜닝

거칠게부터 정밀하게 시각화

min_samples_leaf는 8 미만이 더 좋음

min samples leaf vs 정확도 산점도

learn_rate는 1.3 초과에서 성능 저하

학습률 vs 정확도 산점도

Python에서의 하이퍼파라미터 튜닝

다음 단계

1차 반복에서 얻은 사실:

  • max_depth 8~30
  • learn_rate 1.3 미만
  • min_samples_leaf는 8 미만이 좋을 듯

다음은? 지금까지의 정보로 무작위 또는 그리드 탐색을 다시 수행합니다!

참고: 이는 이변량 분석만입니다. 한 그래프에서 여러 하이퍼파라미터(3, 4개 이상)를 볼 수도 있으나, 본 과정 범위를 벗어납니다.

Python에서의 하이퍼파라미터 튜닝

연습해 봅시다!

Python에서의 하이퍼파라미터 튜닝

Preparing Video For Download...