carlosdcの良い答えに追加するだけです。
vowpal wabbitを際立たせ、tera-feature(10 12)データサイズにスケーリングできるようにする機能のいくつかは次のとおりです。
オンラインの重みベクトル:
vowpal wabbitは、メモリ内の重みベクトルを維持します。これは、基本的に、構築しているモデルの重みのベクトルです。これはあなたがあなたの質問で「状態」と呼ぶものです。
無制限のデータサイズ:
重みベクトルのサイズは、例(インスタンス)の数ではなく、特徴(独立した入力変数)の数に比例します。これが、他の多くの(オンラインではない)学習者とは異なり、vowpalwabbitを宇宙で拡大させるものです。通常のバッチ学習者のようにすべてのデータをメモリにロードする必要がないため、メモリに収まらないほど大きいデータセットから学習することができます。
クラスターモード:
vowpal wabbitは、クラスター内の複数のホストでの実行をサポートし、ノードにバイナリツリーグラフ構造を課し、all-reduce
リーフからルートへの削減を使用します。
ハッシュトリック:
vowpal wabbitは、ハッシュトリックと呼ばれるものを採用しています。すべての機能名は、を使用して整数にハッシュされますmurmurhash-32
。これにはいくつかの利点があります。ハッシュテーブルの管理や衝突に対処する必要がなく、機能がときどき衝突する可能性があるため、非常にシンプルで時間効率が高くなります。(実際には)何千もの異なる特徴を持つトレーニングセットでの少数の特徴の衝突は、暗黙の正則化項を追加することに似ていることがわかります。これは直感に反して、モデルの精度を下げるのではなく改善することがよくあります。また、特徴空間のまばらさ(または密度)にも依存しません。最後に、機能名/ IDがa)数値とb)一意の両方である必要があるほとんどの従来の学習者とは異なり、入力機能名を任意の文字列にすることができます。
並列処理:
vowpal wabbitは、2つの別々のスレッドで解析と学習を実行することにより、マルチコアCPUを活用し、速度をさらに向上させます。これが、vw
データを読み取るのと同じくらい速く学習できるようにするものです。でサポートされているアルゴリズムのほとんどはvw
、直感に反して、学習速度ではなくIO速度によってボトルネックになっていることがわかります。
チェックポインティングとインクリメンタル学習:
vowpal wabbitを使用すると、学習中にモデルをディスクに保存し、モデルをロードして、--save_resume
オプションで中断したところから学習を続けることができます。
テストのようなエラー推定:vowpal wabbit
によって「そのまま」計算された平均損失は、常に見えない(サンプル外の)データにあります(*)。これにより、事前に計画されたホールドアウトに煩わされたり、相互検証を行ったりする必要がなくなります。トレーニング中に表示されるエラー率は「テストのような」ものです。
線形モデルを超えて:
vowpal wabbitは、行列因数分解(ほぼスパース行列SVD)、潜在的ディリクレ割り当て(LDA)などを含むいくつかのアルゴリズムをサポートします。また、用語の相互作用(ユーザー指定のユニット数を持つバイリニア、2次、3次、フィードフォワードシグモイドニューラルネット)、マルチクラス分類(基本的な回帰とバイナリに加えて)のオンザフライ生成もサポートします。分類)など。
githubの公式vwwikiには、チュートリアルと多くの例があります。
(*)1つの例外は、--passes N
オプションで複数のパスを使用する場合です。