이것은 다양한 능동 학습 알고리즘을 실험하기 위한 Python 모듈입니다. 능동적 학습 실험을 실행하는 데는 몇 가지 주요 구성 요소가 있습니다.
주요 실험 스크립트는 다양한 실행 옵션에 대한 많은 플래그가 있는 run_experiment.py
입니다.
utils/create_data.py
실행하여 지원되는 데이터세트를 지정된 디렉터리에 다운로드할 수 있습니다.
지원되는 능동 학습 방법은 sampling_methods
에 있습니다.
아래에서는 각 구성 요소에 대해 자세히 설명하겠습니다.
면책조항: 이 제품은 공식 Google 제품이 아닙니다.
종속성은 requirements.txt
에 있습니다. 실험을 실행하기 전에 이러한 패키지가 설치되어 있는지 확인하세요. GPU 지원 tensorflow
필요한 경우 여기 지침을 따르십시오.
쉬운 패키지 관리를 위해 모든 종속성을 별도의 virtualenv
에 설치하는 것이 좋습니다.
기본적으로 데이터세트는 /tmp/data
에 저장됩니다. --save_dir
플래그를 통해 다른 디렉토리를 지정할 수 있습니다.
모든 데이터 세트를 다시 다운로드하는 데는 시간이 많이 걸리므로 잠시 기다려 주십시오. --datasets
플래그를 통해 쉼표로 구분된 데이터세트 문자열을 전달하여 다운로드할 데이터의 하위 집합을 지정할 수 있습니다.
run_experiment.py
에는 몇 가지 주요 플래그가 있습니다.
dataset
: 데이터세트의 이름은 create_data.py
에 사용된 저장 이름과 일치해야 합니다. data_dir에도 존재해야 합니다.
sampling_method
: 사용할 능동 학습 방법입니다. sampling_methods/constants.py
에 지정해야 합니다.
warmstart_size
: 시드 데이터로 사용할 균일하게 샘플링된 예제의 초기 배치입니다. Float는 전체 훈련 데이터의 백분율을 나타내고 정수는 원시 크기를 나타냅니다.
batch_size
: 각 배치에서 요청할 데이터 포인트 수입니다. Float는 전체 훈련 데이터의 백분율을 나타내고 정수는 원시 크기를 나타냅니다.
score_method
: 샘플링 방법의 성능을 평가하는 데 사용하는 모델입니다. utils/utils.py
의 get_model
메소드에 있어야 합니다.
data_dir
: 저장된 데이터세트가 있는 디렉터리입니다.
save_dir
: 결과를 저장할 디렉터리입니다.
이것은 모든 플래그의 하위 집합일 뿐입니다. 전처리, 라벨링 노이즈 도입, 데이터 세트 서브샘플링, 점수/평가와 다른 모델 선택을 위한 옵션도 있습니다.
명명된 모든 활성 학습 방법은 sampling_methods/constants.py
에 있습니다.
대시로 구분된 [sampling_method]-[mixture_weight]
패턴을 따라 활성 학습 방법의 혼합을 지정할 수도 있습니다. 즉, mixture_of_samplers-margin-0.33-informative_diverse-0.33-uniform-0.34
입니다.
지원되는 일부 샘플링 방법은 다음과 같습니다.
균일: 균일 샘플링을 통해 샘플이 선택됩니다.
마진: 불확실성 기반 샘플링 방법.
유익하고 다양함: 마진 및 클러스터 기반 샘플링 방법.
k-centergreedy: 레이블이 지정된 지점으로부터의 최대 거리를 최소화하기 위해 여러 지점을 탐욕스럽게 형성하는 대표적인 전략입니다.
그래프 밀도: 풀의 밀집된 영역에서 포인트를 선택하는 대표적인 전략입니다.
Exp3 bandit: 널리 사용되는 multi-armed bandit 알고리즘을 사용하여 최적의 샘플링 방법을 학습하려고 시도하는 메타 능동 학습 방법입니다.
SamplingMethod
에서 상속된 기본 샘플러 또는 WrapperSamplingMethod
에서 상속된 기본 샘플러를 호출하는 메타 샘플러를 구현합니다.
샘플러에서 구현해야 하는 유일한 메서드는 select_batch_
이며 임의의 명명된 인수를 가질 수 있습니다. 유일한 제한 사항은 동일한 입력의 이름이 모든 샘플러에서 일관되어야 한다는 것입니다(즉, 이미 선택한 예제의 인덱스는 모두 샘플러에서 동일한 이름을 갖습니다). 다른 샘플링 방법에서 사용되지 않은 새로운 명명된 인수를 추가하려면 해당 인수를 run_experiment.py
의 select_batch
호출에 입력해야 합니다.
샘플러를 구현한 후 run_experiment.py
에서 호출할 수 있도록 constants.py
에 추가해야 합니다.
사용 가능한 모든 모델은 utils/utils.py
의 get_model
메소드에 있습니다.
지원되는 방법:
선형 SVM: 정규화 매개변수에 대한 그리드 검색 래퍼를 사용하는 scikit 방법입니다.
커널 SVM: 정규화 매개변수에 대한 그리드 검색 래퍼가 있는 scikit 메서드입니다.
Logistc Regression: 정규화 매개변수에 대한 그리드 검색 래퍼를 사용하는 scikit 방법입니다.
소형 CNN: 텐서플로우 백엔드와 함께 Keras에 구현된 rmsprop를 사용하여 최적화된 4계층 CNN입니다.
커널 최소 제곱 분류: 여러 코어를 사용할 수 있는 블록 경사 하강 솔버이므로 종종 scikit 커널 SVM보다 빠릅니다.
새 모델은 scikit learn api를 따르고 다음 메서드를 구현해야 합니다.
fit(X, y[, sample_weight])
: 모델을 입력 특성 및 목표에 맞춥니다.
predict(X)
: 입력 특성의 값을 예측합니다.
score(X, y)
: 테스트 기능 및 테스트 대상이 지정된 대상 측정항목을 반환합니다.
decision_function(X)
(선택 사항): 클래스 확률, 결정 경계까지의 거리 또는 마진 샘플러에서 불확실성 측정으로 사용할 수 있는 기타 측정항목을 반환합니다.
예제는 small_cnn.py
참조하세요.
새 모델을 구현한 후 utils/utils.py
의 get_model
메서드에 추가하세요.
현재 모델은 일회성으로 추가되어야 하며 모델의 하이퍼파라미터 조정 여부와 방법에 대한 사용자 입력이 필요하기 때문에 모든 scikit-learn 분류기가 지원되는 것은 아닙니다. 그러나 하이퍼파라미터 검색이 지원되는 모델로 포함된 scikit-learn 모델을 추가하는 것은 매우 쉽습니다.
utils/chart_data.py
스크립트는 지정된 데이터 세트 및 소스 디렉터리에 대한 데이터 처리 및 차트 작성을 처리합니다.