스윕 설정은 중첩된 키-값 쌍으로 구성됩니다. 스윕 설정의 최상위 키를 사용해, 탐색할 파라미터(parameter 키), 파라미터 공간을 탐색하는 방법론(method 키) 등 스윕 탐색의 특성을 정의합니다.
다음 표에는 최상위 스윕 설정 키와 간단한 설명이 나와 있습니다. 각 키에 대한 자세한 내용은 해당 섹션을 참조하세요.
| Top-level keys | Description |
|---|
program | (필수) 실행할 트레이닝 스크립트 |
entity | 이 스윕에 대한 entity |
project | 이 스윕에 대한 프로젝트 |
description | 스윕에 대한 텍스트 설명 |
name | W&B UI에 표시되는 스윕의 이름 |
method | (필수) 검색 전략 |
metric | 최적화할 메트릭(일부 검색 전략 및 조기 중단 기준에서만 사용) |
parameters | (필수) 검색할 파라미터 범위 |
early_terminate | 조기 중단 기준 |
command | 트레이닝 스크립트를 호출하고 인수를 전달하기 위한 명령 구조 |
run_cap | 이 스윕에서 실행할 수 있는 run의 최대 개수 |
스윕 설정을 구성하는 방법에 대한 자세한 내용은 Sweep configuration 구조를 참조하세요.
metric 최상위 스윕 설정 키를 사용해 최적화할 메트릭의 이름, 목표 유형, 그리고 대상 메트릭을 지정합니다.
| Key | Description |
|---|
name | 최적화할 메트릭의 이름입니다. |
goal | minimize 또는 maximize 중 하나입니다 (기본값은 minimize). |
target | 최적화하려는 메트릭의 목표 값입니다. run이 지정한 목표 값에 도달하면 스윕은 새로운 run을 생성하지 않습니다. 실행 중인 run이 있는 활성 에이전트는(해당 run이 목표에 도달하더라도) 그 run이 완료될 때까지 기다린 다음, 그때부터 새로운 run 생성을 중단합니다. |
YAML 파일이나 Python 스크립트에서 최상위 키로 parameters를 지정한다. parameters 키 안에 최적화하려는 하이퍼파라미터 이름을 입력한다. 일반적인 하이퍼파라미터에는 learning rate, batch size, epochs, optimizer 등이 있다. 스윕 설정에서 정의하는 각 하이퍼파라미터에 대해 하나 이상의 검색 제약 조건을 지정한다.
다음 표는 지원되는 하이퍼파라미터 검색 제약 조건을 보여준다. 하이퍼파라미터와 사용 사례에 따라 아래 검색 제약 조건 중 하나를 사용해, 스윕 에이전트가 (분포의 경우) 어디를 또는 무엇을(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 키를 사용하여 하이퍼파라미터 탐색 전략을 지정합니다. 선택할 수 있는 하이퍼파라미터 탐색 전략은 그리드 탐색, 랜덤 탐색, 베이지안 탐색의 세 가지가 있습니다.
모든 하이퍼파라미터 값 조합을 순회합니다. 그리드 검색은 각 반복마다 사용할 하이퍼파라미터 값 집합을 아무런 추가 정보 없이 기계적으로 결정합니다. 그리드 검색은 연산 비용이 많이 들 수 있습니다.
연속적인 탐색 공간을 대상으로 검색하는 경우, 그리드 검색은 무한히 실행됩니다.
분포를 기반으로 각 반복마다 사전 정보 없이 무작위로 선택한 하이퍼파라미터 값 집합을 사용합니다. 랜덤 검색은 명령줄, Python 스크립트 내, 또는 the W&B App에서 프로세스를 중지하지 않는 한 계속 실행됩니다.
랜덤 검색(method: random)을 선택하는 경우 메트릭 키와 함께 분포 범위를 지정합니다.
랜덤 검색과 그리드 검색과는 달리, 베이즈 모델은 정보를 바탕으로 의사 결정을 내립니다. 베이즈 최적화는 확률 모델을 사용해, 목적 함수를 직접 평가하기 전에 대리 함수(surrogate function)에서 다양한 값을 시험해 보는 반복적 과정을 통해 어떤 값을 사용할지 결정합니다. 베이즈 검색은 소수의 연속형 파라미터에 대해서는 잘 동작하지만, 파라미터 수가 많아지면 확장성이 떨어집니다. 베이즈 검색에 대한 더 자세한 내용은 Bayesian Optimization Primer 논문을 참고하세요.
Bayesian search는 커맨드 라인, 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를 사용해 성능이 좋지 않은 run을 조기에 종료할 수 있습니다. 조기 종료가 발생하면 W&B는 현재 run을 중지한 뒤, 새로운 하이퍼파라미터 값 세트로 새 run을 생성합니다.
early_terminate를 사용할 경우 반드시 중단 알고리즘을 지정해야 합니다. 스윕 설정에서 early_terminate 안에 type 키를 중첩해 지정하십시오.
Hyperband 하이퍼파라미터 최적화는 프로그램을 중지할지, 아니면 하나 이상의 사전에 정의된 반복 횟수( 브래킷이라고 함)에서 계속 실행할지를 평가합니다.
W&B run이 브래킷에 도달하면, 스윕은 해당 run의 메트릭을 이전에 보고된 모든 메트릭 값과 비교합니다. 목표가 최소화일 때 run의 메트릭 값이 너무 크거나, 목표가 최대화일 때 run의 메트릭 값이 너무 작으면 스윕은 해당 run을 종료합니다.
브래킷은 로깅된 반복 횟수에 기반합니다. 브래킷의 개수는 최적화 대상 메트릭을 로깅한 횟수에 대응합니다. 반복은 스텝, 에포크 또는 그 사이의 어떤 단계에 대응할 수 있습니다. 스텝 카운터의 숫자 값 자체는 브래킷 계산에 사용되지 않습니다.
브래킷 스케줄을 생성하려면 min_iter 또는 max_iter 중 하나를 지정합니다.
| Key | Description |
|---|
min_iter | 첫 번째 브래킷에 해당하는 반복 횟수를 지정합니다. |
max_iter | 최대 반복 횟수를 지정합니다. |
s | 총 브래킷 개수를 지정합니다. (max_iter에 필요) |
eta | 브래킷 배수 스케줄을 지정합니다. (기본값: 3) |
strict | run을 더 적극적으로 가지치기하여 원래 Hyperband 논문을 보다 엄격하게 따르는 ‘strict’ 모드를 활성화합니다. 기본값은 false입니다. |
Hyperband는 몇 분에 한 번씩 어떤 runs를 종료할지 확인합니다. run이나 반복이 매우 짧은 경우 종료 시각이 지정된 브래킷과 다를 수 있습니다.
command 키 내에서 중첩된 값을 사용해 형식과 내용을 수정할 수 있습니다. 파일 이름과 같은 고정 구성 요소는 직접 포함할 수 있습니다.
Unix 시스템에서 /usr/bin/env는 환경에 따라 OS가 올바른 Python 인터프리터를 선택하도록 합니다.
W&B는 command의 변수 구성 요소에 대해 다음 매크로를 지원합니다:
| Command macro | Description |
|---|
${env} | Unix 시스템에서는 /usr/bin/env, Windows에서는 생략됩니다. |
${interpreter} | python으로 확장됩니다. |
${program} | 스윕 설정의 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 환경 변수의 값으로 확장됩니다. __ |