스윕 구성은 중첩된 키-값 쌍으로 이루어집니다. 스윕 구성 내에서 최상위 키를 사용하여 탐색할 파라미터 (parameter 키), 파라미터 공간을 탐색하는 방법론 (method 키) 등 스윕 탐색의 특성을 정의합니다.
다음 표는 최상위 스윕 구성 키와 그에 대한 간략한 설명을 나열합니다. 각 키에 대한 자세한 정보는 해당 섹션을 참조하세요.
| 최상위 키 | 설명 |
|---|
program | (필수) 실행할 트레이닝 스크립트 |
entity | 이 스윕을 위한 entity |
project | 이 스윕을 위한 프로젝트 |
description | 스윕에 대한 텍스트 설명 |
name | W&B UI에 표시될 스윕의 이름 |
method | (필수) 탐색 전략 |
metric | 최적화할 메트릭 (특정 탐색 전략 및 정지 기준에서만 사용됨) |
parameters | (필수) 탐색할 파라미터 범위 |
early_terminate | 조기 종료 기준 |
command | 트레이닝 스크립트를 호출하고 인수를 전달하기 위한 코맨드 구조 |
run_cap | 이 스윕에서 실행할 최대 run 수 |
스윕 구성을 구조화하는 방법에 대한 자세한 내용은 스윕 구성 구조를 참조하세요.
metric
metric 최상위 스윕 구성 키를 사용하여 최적화할 메트릭의 이름, 목표 및 타겟값을 지정합니다.
| 키 | 설명 |
|---|
name | 최적화할 메트릭의 이름. |
goal | minimize 또는 maximize 중 하나 (기본값은 minimize). |
target | 최적화하려는 메트릭의 목표값. run이 사용자가 지정한 타겟값에 도달하면 스윕은 더 이상 새로운 run을 생성하지 않습니다. 현재 실행 중인 run이 있는 활성 에이전트(run이 타겟에 도달했을 때)는 해당 run이 완료될 때까지 기다린 후 새로운 run 생성을 중단합니다. |
parameters
YAML 파일이나 Python 스크립트에서 parameters를 최상위 키로 지정합니다. parameters 키 내에 최적화하려는 하이퍼파라미터의 이름을 입력합니다. 일반적인 하이퍼파라미터에는 learning rate, 배치 크기, 에포크, 옵티마이저 등이 포함됩니다. 스윕 구성에서 정의하는 각 하이퍼파라미터에 대해 하나 이상의 탐색 제약 조건을 지정합니다.
다음 표는 지원되는 하이퍼파라미터 탐색 제약 조건을 보여줍니다. 하이퍼파라미터와 유스 케이스에 따라 아래 탐색 제약 조건 중 하나를 사용하여 스윕 에이전트에게 어디에서(분포의 경우) 또는 무엇을(value, values 등) 탐색하거나 사용할지 알려줍니다.
| 탐색 제약 조건 | 설명 |
|---|
values | 이 하이퍼파라미터에 대한 모든 유효한 값들을 지정합니다. grid와 호환됩니다. |
value | 이 하이퍼파라미터에 대한 단일 유효 값을 지정합니다. grid와 호환됩니다. |
distribution | 확률 분포를 지정합니다. 기본값에 대한 정보는 이 표 다음의 노트를 참조하세요. |
probabilities | random 탐색 사용 시 values의 각 요소를 선택할 확률을 지정합니다. |
min, max | (int 또는 float) 최댓값과 최솟값. int인 경우 int_uniform 분포 하이퍼파라미터에 사용됩니다. float인 경우 uniform 분포 하이퍼파라미터에 사용됩니다. |
mu | (float) normal 또는 lognormal 분포 하이퍼파라미터의 평균 파라미터. |
sigma | (float) normal 또는 lognormal 분포 하이퍼파라미터의 표준 편차 파라미터. |
q | (float) 양자화된 하이퍼파라미터의 양자화 단계 크기. |
parameters | 루트 수준 파라미터 내에 다른 파라미터를 중첩시킵니다. |
분포가 지정되지 않은 경우 W&B는 다음 조건에 따라 분포를 설정합니다:
values를 지정한 경우: categorical
max와 min을 정수로 지정한 경우: int_uniform
max와 min을 실수로 지정한 경우: uniform
value에 세트를 제공한 경우: constant
method
method 키를 사용하여 하이퍼파라미터 탐색 전략을 지정합니다. 그리드 검색, 랜덤 검색, 베이지안 탐색의 세 가지 하이퍼파라미터 탐색 전략 중에서 선택할 수 있습니다.
그리드 검색 (Grid search)
하이퍼파라미터 값의 모든 조합을 반복합니다. 그리드 검색은 각 반복에서 사용할 하이퍼파라미터 값 세트에 대해 사전 정보가 없는 결정을 내립니다. 그리드 검색은 계산 비용이 많이 들 수 있습니다.
그리드 검색이 연속적인 탐색 공간 내에서 탐색하는 경우 무한히 실행됩니다.
랜덤 검색 (Random search)
분포를 기반으로 각 반복에서 무작위로 하이퍼파라미터 값 세트를 선택합니다. 랜덤 검색은 커맨드라인, Python 스크립트 내부 또는 W&B 앱에서 프로세스를 중단하지 않는 한 영원히 실행됩니다.
랜덤 검색(method: random)을 선택한 경우 metric 키로 분포 공간을 지정하세요.
베이지안 탐색 (Bayesian search)
랜덤 검색 및 그리드 검색과 대조적으로, 베이지안 모델은 정보에 기반한 결정을 내립니다. 베이지안 최적화는 확률 모델을 사용하여 목적 함수를 평가하기 전에 대리 함수(surrogate function)에서 값을 테스트하는 반복 프로세스를 통해 어떤 값을 사용할지 결정합니다. 베이지안 탐색은 적은 수의 연속적인 파라미터에 대해 잘 작동하지만 확장성은 떨어집니다. 베이지안 탐색에 대한 자세한 내용은 Bayesian Optimization Primer 논문을 참조하세요.
베이지안 탐색은 커맨드라인, Python 스크립트 내부 또는 W&B 앱에서 프로세스를 중단하지 않는 한 영원히 실행됩니다.
랜덤 검색 및 베이지안 탐색을 위한 분포 옵션
parameter 키 내에 하이퍼파라미터의 이름을 중첩시킵니다. 다음으로 distribution 키를 지정하고 값에 대한 분포를 지정합니다.
다음 표는 W&B가 지원하는 분포를 나열합니다.
distribution 키의 값 | 설명 |
|---|
constant | 상수 분포. 사용할 상수 값(value)을 지정해야 합니다. |
categorical | 카테고리 분포. 이 하이퍼파라미터에 대한 모든 유효한 값들(values)을 지정해야 합니다. |
int_uniform | 정수에 대한 이산 균등 분포. max와 min을 정수로 지정해야 합니다. |
uniform | 연속 균등 분포. max와 min을 실수로 지정해야 합니다. |
q_uniform | 양자화된 균등 분포. round(X / q) * q를 반환하며 여기서 X는 균등 분포입니다. q의 기본값은 1입니다. |
log_uniform | 로그 균등 분포. 자연로그가 min과 max 사이에서 균등하게 분포하도록 exp(min)과 exp(max) 사이의 값 X를 반환합니다. |
log_uniform_values | 로그 균등 분포. log(X)가 log(min)과 log(max) 사이에서 균등하게 분포하도록 min과 max 사이의 값 X를 반환합니다. |
q_log_uniform | 양자화된 로그 균등 분포. round(X / q) * q를 반환하며 여기서 X는 log_uniform입니다. q의 기본값은 1입니다. |
q_log_uniform_values | 양자화된 로그 균등 분포. round(X / q) * q를 반환하며 여기서 X는 log_uniform_values입니다. 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 | 양자화된 정규 분포. round(X / q) * q를 반환하며 여기서 X는 normal입니다. q의 기본값은 1입니다. |
log_normal | 로그 정규 분포. 자연로그 log(X)가 평균 mu(기본값 0)와 표준 편차 sigma(기본값 1)를 갖는 정규 분포를 따르는 값 X를 반환합니다. |
q_log_normal | 양자화된 로그 정규 분포. round(X / q) * q를 반환하며 여기서 X는 log_normal입니다. q의 기본값은 1입니다. |
early_terminate
성능이 좋지 않은 run을 중단하려면 조기 종료(early_terminate)를 사용하세요. 조기 종료가 발생하면 W&B는 새로운 하이퍼파라미터 값 세트로 새로운 run을 생성하기 전에 현재 run을 중단합니다.
early_terminate를 사용하는 경우 반드시 정지 알고리즘을 지정해야 합니다. 스윕 구성의 early_terminate 내에 type 키를 중첩시키세요.
정지 알고리즘
Hyperband 하이퍼파라미터 최적화는 프로그램이 중단되어야 하는지 아니면 brackets라고 불리는 하나 이상의 사전 설정된 반복 횟수에서 계속되어야 하는지를 평가합니다.
W&B run이 bracket에 도달하면 스윕은 해당 run의 메트릭을 이전에 보고된 모든 메트릭 값과 비교합니다. run의 메트릭 값이 너무 높거나(목표가 최소화인 경우) 너무 낮으면(목표가 최대화인 경우) 스윕은 해당 run을 종료합니다.
Brackets는 로그된 반복 횟수를 기준으로 합니다. bracket의 수는 최적화하려는 메트릭을 로그한 횟수에 해당합니다. 반복은 스텝, 에포크 또는 그 사이의 무언가가 될 수 있습니다. 스텝 카운터의 수치는 bracket 계산에 사용되지 않습니다.
bracket 스케줄을 생성하려면 min_iter 또는 max_iter 중 하나를 지정하세요.
| 키 | 설명 |
|---|
min_iter | 첫 번째 bracket을 위한 반복 횟수를 지정합니다. |
max_iter | 최대 반복 횟수를 지정합니다. |
s | 총 bracket 수를 지정합니다 (max_iter에 필수). |
eta | bracket 승수 스케줄을 지정합니다 (기본값: 3). |
strict | 원래 Hyperband 논문을 더 밀접하게 따라 run을 공격적으로 프루닝하는 ‘strict’ 모드를 활성화합니다. 기본값은 false입니다. |
Hyperband는 몇 분마다 한 번씩 종료할 runs를 확인합니다. run이나 반복 주기가 짧은 경우 종료 run 타임스탬프가 지정된 brackets와 다를 수 있습니다.
command
command 키 내의 중첩된 값을 사용하여 형식과 내용을 수정할 수 있습니다. 파일 이름과 같은 고정된 구성 요소를 직접 포함할 수 있습니다.
Unix 시스템에서 /usr/bin/env는 OS가 환경에 따라 올바른 Python 인터프리터를 선택하도록 보장합니다.
W&B는 코맨드의 가변 구성 요소를 위해 다음 매크로를 지원합니다:
| 코맨드 매크로 | 설명 |
|---|
${env} | Unix 시스템의 경우 /usr/bin/env, Windows의 경우 생략됨. |
${interpreter} | python으로 확장됨. |
${program} | 스윕 구성의 program 키에 지정된 트레이닝 스크립트 파일 이름. |
${args} | --param1=value1 --param2=value2 형식의 하이퍼파라미터와 그 값들. |
${args_no_boolean_flags} | 하이퍼파라미터와 그 값들. 불리언 파라미터가 True일 때는 --boolean_flag_param 형식이고 False일 때는 생략되는 것을 제외하고는 --param1=value1 형식입니다. |
${args_no_hyphens} | param1=value1 param2=value2 형식의 하이퍼파라미터와 그 값들. |
${args_json} | JSON으로 인코딩된 하이퍼파라미터와 그 값들. |
${args_json_file} | JSON으로 인코딩된 하이퍼파라미터와 그 값들을 포함하는 파일의 경로. |
${envvar} | 환경 변수를 전달하는 방법. ${envvar:MYENVVAR}는 MYENVVAR 환경 변수의 값으로 확장됩니다. |