
미리 정한 후보값의 모든 조합을 다 시도하는 방식
(정해진 격자(grid)를 전부 훑는다)
그림에서
가로축 - 중요한 파라미터
세로축 - 중요하지 않은 파라미터
-> 그래서 세로축 파라미터는 별로 안 중요한데도 그 방향으로 많은 시도를 써버림
(중요하지 않은 차원에도 자원을 많이 낭비하고 있다.)
전체 시도 횟수를 세로축까지 나눠 써버리기 때문에 생각보다 많이 다양하게 탐색하지 못하고 있음
파라미터 조합을 랜덤하게 샘플링해서 시도
같은 개수의 점을 찍더라도 가로축(중요한 파라미터)의 더 다양한 값들을 탐색하고 있음
즉 중요한 파라미터 축을 더 풍부하게 커버하고 있음
Random Search는 같은 9번을 시도해도 중요한 축에서 우연히라도 더 많은 서로 다른 값을 보게 됩니다. 즉 중요한 하이퍼파라미터 공간을 더 넓게 탐색할 가능성이 크다.
그러므로:
하이퍼파라미터가 많고 그 중 일부만 진짜 중요할 때는 Random Search가 Grid Search 보다 더 효율적인 경우가 많다.
hyperopt는 하이퍼파라미터 최적화를 자동으로 해주는 Python 패키지이다.
hyperopt는 아래 과정을 자동으로 반복
즉, "좋은 조합을 찾아가는 탐색기"
TPE (Tree-structured Parzen Estimator)
이전에 잘 나왔던 파라미터 주변을 더 집중적으로 찾아보는 방식으로 랜덤 탐색보다 보통 더 효율적이다.
예)
validation log loss
cross-validation accuracy
RMSE
(loss 값 반환)
search space
탐색할 하이퍼파라미터 범위 정의
최적화 알고리즘