これは、さまざまなアクティブ ラーニング アルゴリズムを実験するための 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
: シード データとして使用する、均一にサンプリングされたサンプルの最初のバッチ。浮動小数点はトレーニング データ全体のパーセンテージを示し、整数は生のサイズを示します。
batch_size
: 各バッチでリクエストするデータポイントの数。浮動小数点はトレーニング データ全体のパーセンテージを示し、整数は生のサイズを示します。
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-center 貪欲: ラベル付き点からの最大距離を最小化するために点のバッチを貪欲に形成する代表的な戦略。
グラフ密度: プールの密集領域内の点を選択する代表的な戦略。
Exp3 バンディット: 一般的なマルチアーム バンディット アルゴリズムを使用して最適なサンプリング方法を学習しようとするメタアクティブ学習手法。
SamplingMethod
から継承するベース サンプラー、またはWrapperSamplingMethod
から継承するベース サンプラーを呼び出すメタサンプラーのいずれかを実装します。
サンプラーで実装する必要がある唯一のメソッドはselect_batch_
で、これには任意の名前付き引数を指定できます。唯一の制限は、同じ入力の名前がすべてのサンプラーで一貫している必要があることです (つまり、すでに選択されているサンプルのインデックスはすべてサンプラー間で同じ名前になります)。他のサンプリング メソッドで使用されていない新しい名前付き引数を追加するには、それをrun_experiment.py
のselect_batch
呼び出しに渡す必要があります。
サンプラーを実装した後、 run_experiment.py
から呼び出せるように、必ずそれをconstants.py
に追加してください。
利用可能なすべてのモデルはutils/utils.py
のget_model
メソッドにあります。
サポートされているメソッド:
線形 SVM: 正則化パラメーターのグリッド検索ラッパーを使用した scikit メソッド。
カーネル SVM: 正則化パラメータのグリッド検索ラッパーを使用した scikit メソッド。
ロジスティック回帰: 正則化パラメータのグリッド検索ラッパーを使用した scikit メソッド。
小規模 CNN: tensorflow バックエンドを備えた 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
メソッドに必ず追加してください。
現在、モデルは 1 回限りで追加する必要があり、モデルのハイパーパラメーターを調整するかどうか、および調整する方法についてユーザー入力が必要なため、すべての scikit-learn 分類子がサポートされているわけではありません。ただし、ハイパーパラメーター検索をサポートするモデルとしてラップアラウンドした scikit-learn モデルを追加するのは非常に簡単です。
utils/chart_data.py
スクリプトは、指定されたデータセットとソース ディレクトリのデータの処理とグラフ作成を処理します。