Sweep 구성은 중첩된 키-값 쌍으로 이루어집니다. Sweep 구성의 최상위 키를 사용해 검색할 파라미터(parameter 키), 파라미터 공간을 탐색하는 방법론(method 키) 등 Sweep 검색의 특성을 정의합니다.
아래 표에는 최상위 Sweep 구성 키와 간단한 설명이 나와 있습니다. 각 키에 대한 자세한 내용은 해당 섹션을 참조하세요.
| Top-level keys | Description |
|---|
program | (필수) 실행할 학습 스크립트 |
entity | 이 Sweep의 엔터티 |
project | 이 Sweep의 프로젝트 |
description | Sweep에 대한 텍스트 설명 |
name | W&B UI에 표시되는 Sweep 이름 |
method | (필수) 검색 전략 |
metric | 최적화할 메트릭(특정 검색 전략 및 조기 중단 기준에서만 사용됨) |
parameters | (필수) 검색할 파라미터의 범위 |
early_terminate | 조기 중단 기준 |
command | 학습 스크립트를 호출하고 인자를 전달하기 위한 명령 구조 |
run_cap | 이 Sweep에서 허용되는 최대 실행 수 |
Sweep 구성을 어떻게 작성하는지에 대한 자세한 내용은 Sweep 구성 구조를 참조하세요.
metric 최상위 sweep 구성 키를 사용하여 최적화할 지표의 이름, 목표, 그리고 대상 metric을 지정합니다.
| Key | Description |
|---|
name | 최적화할 지표의 이름. |
goal | minimize 또는 maximize 중 하나 (기본값은 minimize). |
target | 최적화 대상 지표의 목표 값. 실행이 지정한 목표 값에 도달하면 sweep은 새로운 실행을 생성하지 않습니다. 실행이 진행 중인 활성 에이전트는(해당 실행이 목표에 도달했을 때) 그 실행이 완료될 때까지 기다린 다음, 새로운 실행 생성을 중단합니다. |
YAML 파일 또는 Python 스크립트에서 최상위 키로 parameters를 지정합니다. parameters 키 아래에 최적화하려는 하이퍼파라미터의 이름을 제공합니다. 일반적인 하이퍼파라미터에는 학습률(learning rate), 배치 크기(batch size), 에폭(epochs), 옵티마이저(optimizers) 등이 있습니다. 스윕 설정에서 정의하는 각 하이퍼파라미터에 대해 하나 이상의 탐색 제약 조건을 지정합니다.
다음 표는 지원되는 하이퍼파라미터 탐색 제약 조건을 보여줍니다. 하이퍼파라미터 종류와 사용 사례에 따라, 아래 탐색 제약 조건 중 하나를 사용해 스윕 에이전트에 어디(분포의 경우) 또는 무엇을(value, values 등) 탐색할지 또는 사용할지를 지정합니다.
| Search constraint | Description |
|---|
values | 이 하이퍼파라미터에 대해 유효한 모든 값을 지정합니다. grid와 호환됩니다. |
value | 이 하이퍼파라미터에 대해 유효한 단일 값을 지정합니다. grid와 호환됩니다. |
distribution | 확률 distribution을 지정합니다. 기본값에 대한 정보는 이 표 아래의 참고 사항을 참조하십시오. |
probabilities | random을 사용할 때 values의 각 요소가 선택될 확률을 지정합니다. |
min, max | (int 또는 float) 최소 및 최대 값입니다. int인 경우 int_uniform 분포 하이퍼파라미터에 사용됩니다. float인 경우 uniform 분포 하이퍼파라미터에 사용됩니다. |
mu | (float) normal 또는 lognormal 분포 하이퍼파라미터의 평균 파라미터입니다. |
sigma | (float) normal 또는 lognormal 분포 하이퍼파라미터의 표준 편차 파라미터입니다. |
q | (float) 양자화된 하이퍼파라미터의 양자화 스텝 크기입니다. |
parameters | 루트 수준 파라미터 내부에 다른 파라미터들을 중첩합니다. |
distribution을 지정하지 않은 경우, W&B는 아래 조건에 따라 다음 분포를 설정합니다:
values를 지정하면 categorical
max와 min을 정수로 지정하면 int_uniform
max와 min을 실수로 지정하면 uniform
- 단일 값을
value에 지정하면 constant
method 키를 사용해 하이퍼파라미터 검색 전략을 지정합니다. 사용할 수 있는 하이퍼파라미터 검색 전략은 grid, random, Bayesian search의 세 가지입니다.
하이퍼파라미터 값의 모든 조합을 순회합니다. 그리드 서치는 각 반복에서 사용할 하이퍼파라미터 값 집합을 사전 정보에 기반하지 않은 방식으로 선택합니다. 그리드 서치는 계산 비용이 많이 들 수 있습니다.
그리드 서치는 연속적인 탐색 공간에서 검색하는 경우 종료되지 않고 계속 실행됩니다.
분포에 따라 각 반복마다 사전 정보 없이 무작위로 선택한 하이퍼파라미터 값 집합을 사용합니다. 랜덤 검색은 명령줄, Python 스크립트, 또는 W&B 앱에서 프로세스를 중지하지 않는 한 무기한 실행됩니다.
method: random을 사용하는 랜덤 검색을 선택하는 경우 metric 키를 사용해 분포 공간을 지정합니다.
랜덤 및 그리드 탐색과 달리, 베이지안 모델은 정보를 바탕으로 의사결정을 내립니다. 베이지안 최적화는 확률 모델을 사용하여, 목표 함수를 직접 평가하기 전에 대리(surrogate) 함수에서 값을 시험하는 반복적인 절차를 통해 어떤 값을 사용할지 결정합니다. 베이지안 탐색은 소수의 연속형 하이퍼파라미터에 대해서는 효과적이지만, 규모가 커질수록 성능이 저하됩니다. 베이지안 탐색에 대한 더 자세한 내용은 Bayesian Optimization Primer 논문을 참고하십시오.
베이지안 검색은 명령줄, Python 스크립트, 또는 W&B App에서 프로세스를 중지하지 않는 한 계속 실행됩니다.
parameter 키 안에 하이퍼파라미터 이름을 중첩해 넣습니다. 그런 다음 distribution 키를 지정하고 값에 사용할 분포를 정의합니다.
다음 표는 W&B가 지원하는 분포를 나열합니다.
Value for distribution key | Description |
|---|
constant | 상수 분포. 사용할 상수 값(value)을 지정해야 합니다. |
categorical | 범주형 분포. 이 하이퍼파라미터에 대한 모든 유효한 값(values)을 지정해야 합니다. |
int_uniform | 정수에 대한 이산 균일 분포. max와 min을 정수로 지정해야 합니다. |
uniform | 연속 균일 분포. max와 min을 부동소수점 값으로 지정해야 합니다. |
q_uniform | 양자화된 균일 분포. X가 균일 분포일 때 round(X / q) * q를 반환합니다. q의 기본값은 1입니다. |
log_uniform | 로그-균일 분포. 자연로그가 min과 max 사이에서 균일하게 분포되도록 exp(min)과 exp(max) 사이의 값 X를 반환합니다. |
log_uniform_values | 로그-균일 분포. log(min)과 log(max) 사이에서 균일하게 분포되도록 min과 max 사이의 값 X를 반환합니다. 이때 log(X)가 균일하게 분포됩니다. |
q_log_uniform | 양자화된 로그-균일 분포. X가 log_uniform일 때 round(X / q) * q를 반환합니다. q의 기본값은 1입니다. |
q_log_uniform_values | 양자화된 로그-균일 분포. X가 log_uniform_values일 때 round(X / q) * q를 반환합니다. q의 기본값은 1입니다. |
inv_log_uniform | 역 로그-균일 분포. log(1/X)가 min과 max 사이에서 균일하게 분포되도록 X를 반환합니다. |
inv_log_uniform_values | 역 로그-균일 분포. log(1/X)가 log(1/max)와 log(1/min) 사이에서 균일하게 분포되도록 X를 반환합니다. |
normal | 정규 분포. 반환 값은 평균 mu(기본값 0), 표준편차 sigma(기본값 1)를 갖는 정규 분포를 따릅니다. |
q_normal | 양자화된 정규 분포. X가 normal일 때 round(X / q) * q를 반환합니다. q의 기본값은 1입니다. |
log_normal | 로그 정규 분포. 자연로그 log(X)가 평균 mu(기본값 0), 표준편차 sigma(기본값 1)를 갖는 정규 분포를 따르도록 하는 값 X를 반환합니다. |
q_log_normal | 양자화된 로그 정규 분포. X가 log_normal일 때 round(X / q) * q를 반환합니다. q의 기본값은 1입니다. |
성능이 좋지 않은 실행을 중단하려면 조기 종료(early_terminate)를 사용합니다. 조기 종료가 발생하면 W&B는 새로운 하이퍼파라미터 값 세트로 새로운 실행을 생성하기 전에 현재 실행을 중단합니다.
early_terminate를 사용하는 경우 중단 알고리즘을 지정해야 합니다. 스윕 구성에서 early_terminate 내에 type 키를 중첩해 설정하십시오.
Hyperband 하이퍼파라미터 최적화는 *브래킷(bracket)*이라 부르는 하나 이상의 사전 설정 반복(iteration) 횟수 지점에서, 프로그램을 중단해야 할지 계속 실행해야 할지를 평가합니다.
W&B 실행이 브래킷에 도달하면 스윕은 해당 실행의 지표를 지금까지 보고된 모든 지표 값과 비교합니다. 목표가 최소화일 때 실행의 지표 값이 너무 크거나, 목표가 최대화일 때 실행의 지표 값이 너무 작으면 스윕은 해당 실행을 종료합니다.
브래킷은 기록된 반복(iteration) 수를 기준으로 합니다. 브래킷의 개수는 최적화할 지표를 기록한 횟수에 해당합니다. 반복은 step, epoch 또는 그 중간 개념에 해당할 수 있습니다. step 카운터의 수치 값 자체는 브래킷 계산에 사용되지 않습니다.
브래킷 스케줄을 생성하려면 min_iter 또는 max_iter 중 하나를 지정하십시오.
| Key | Description |
|---|
min_iter | 첫 번째 브래킷에 해당하는 반복(iteration)을 지정합니다 |
max_iter | 반복(iteration)의 최대 횟수를 지정합니다. |
s | 브래킷의 총 개수를 지정합니다 (max_iter에 필요). |
eta | 브래킷 배수 스케줄을 지정합니다 (기본값: 3). |
strict | 실행을 더 적극적으로 가지치기(prune)하여, 원래 Hyperband 논문을 더 엄격하게 따르는 ‘strict’ 모드를 활성화합니다. 기본값은 false입니다. |
Hyperband는 몇 분마다 한 번씩 어떤 실행을 종료할지 확인합니다. 실행이나 반복이 짧은 경우, 종료된 실행의 타임스탬프는 지정한 브래킷과 다를 수 있습니다.
command 키 안에서 중첩 값을 사용해 형식과 내용을 수정할 수 있습니다. 파일 이름과 같은 고정된 구성 요소는 그대로 직접 포함할 수 있습니다.
Unix 시스템에서 /usr/bin/env는 환경에 따라 OS가 올바른 Python 인터프리터를 선택하도록 보장합니다.
W&B는 명령의 변수 구성 요소에 대해 다음 매크로를 지원합니다:
| Command macro | Description |
|---|
${env} | Unix 시스템에서는 /usr/bin/env를 사용하고, Windows에서는 생략됩니다. |
${interpreter} | python으로 확장됩니다. |
${program} | sweep 설정의 program 키에 지정된 학습 스크립트 파일 이름입니다. |
${args} | --param1=value1 --param2=value2 형식의 하이퍼파라미터와 그 값입니다. |
${args_no_boolean_flags} | --param1=value1 형식의 하이퍼파라미터와 그 값이되, 불리언 파라미터는 True일 때 --boolean_flag_param 형식으로, False일 때는 생략됩니다. |
${args_no_hyphens} | param1=value1 param2=value2 형식의 하이퍼파라미터와 그 값입니다. |
${args_json} | JSON으로 인코딩된 하이퍼파라미터와 그 값입니다. |
${args_json_file} | JSON으로 인코딩된 하이퍼파라미터와 그 값을 포함하는 파일의 경로입니다. |
${envvar} | 환경 변수를 전달하는 방법입니다. ${envvar:MYENVVAR} __ 는 MYENVVAR 환경 변수의 값으로 확장됩니다. __ |