🐕

能動学習を雰囲気で理解する

2023/04/29に公開

効率的に学習データを選ぶための戦略

機械学習をやっていると、"モデルの精度を上げるためにはデータが足りないです。増やしましょう!"的なシチュエーションに遭遇します。このとき、実際どういうデータを増やしたらいいんでしょう?データが少ない場合は、ドメイン知識に明るい人が人力で選ぶという手もありますが、候補データがたくさんある場合は自動でいい感じに選択する必要があります。この”モデルの精度を上げるために自動でいい感じにデータを選択する”ということを実現する手法の一つが能動学習 (active learning)です。

能動学習は大きく分けて、

  1. 次の学習データをどうやって用意するか?(sampling, synthesis)、
  2. どういう基準でデータを選択するか? (query strategy)の2つの要素に分かれます。

この記事では、それぞれの代表的な手法のイメージを整理して、なんとなく能動学習が分かった気になるのが目的です。

Sampling, synthesis代表3手法

まずは学習データの準備方法について3つ紹介します。

Pool-based sampling

Pool-based samplingでは予め準備された学習データから学習器の精度が上がりそうなデータを選んで、次の学習データにします。選ぶデータは1つだったり複数だったりします。

この方法はラベリングされていないデータを準備するのが低コストでかつ保管ができ、目的変数を準備するのが高コストな対象に向いています。例えば、音声や文章のアノテーション、材料物性も多くの場合該当します。化学系で言えばバーチャルライブラリからピックアップして、実験やシミュレーションをすることに相当します。

Stream-based selective sampling

Pool-based samplingに対して流れてくるデータから良さそうなものを選別するスタイルがstream-based samplingといいます。この手法は大量のデータが流れてくるが、全てのデータが保存(pool)できず、逐次的に採否を判断するようなケースで使います。例えば、IoT機器から出てくるセンシングデータなどが該当します。

Query synthesis

精度が上がりそうな特徴量を評価し、その特徴量に合致する画像や文章、物質を生成モデルを使って新たなデータを生成するのがquery synthesisです。GANで人工的に人物像を生成したり例がありますが、あれと似ています。

基本的には特徴量自体が直接体に人間が設計可能な値になっているか、特徴量空間からデータが生成できる手法が必要になってきます。手書き文字とかはわりといいのかな。分子の生成モデルは絶賛研究中(注:2019年時点)ですが、近いうちに実用的な物も出てくるんでしょうか。

Query strategy代表3種類

上のイラストにはデータを学習すべきかどうかは神が判断したり、脳みそが評価したりしていました。この神や脳みそに相当する部分がquery strategiesです。query strategiesの例として以下の3つを紹介してみます。

Uncertainty sampling

自信がないところを重点的に勉強しましょう、的な発想です。”自信の無さ”の表現が重要で、例えば分類タスクで使える指標だとclassification unsertainityが一番シンプルな指標になります。
classification unsertainity例えばラベルAとBの2値分類だったときに、最も確率の大きいラベルの確率が一番小さいデータを選びましょう、というもので数式で書くと、

arg \min P_{\theta} (\hat{y} | x )

こうなります。他にもあるデータがそれぞれのラベルに帰属される確率について最大と最小の差が最小になるデータを評価しましょう(margin)というものや、いやいやentropyで評価しましょうという考え方もありますが、いずれの方法でも基本的には各ラベル間の確率が近く、判断に迷うデータが次の学習候補として選ばれることになります。2クラス分類の場合のイメージはこんな感じ。

回帰の場合には不確かさの指標として予測値の分散が用いられます。つまり、回帰タスクに対して能動学習を行う場合には、分散が評価できる学習器(gaussian processとかbayesian ridge)を使う必要があります。

Query-by-comittee

自信がないとか判断に迷うってことは、人によって判断が違うとも言えます。多数決が取れない奴はもう一回見直しましょう的な考えに基づくのがquery-by-committeeです。この方法では多数決の票がどれくらい割れているか?が指標になります。Query-by-comitteeでは複数の学習器の推定結果を用いる必要があるので、アンサンブル学習が前提になります。票の割れている度合いは、entropy以外にKL ダイバージェンスが指標として用いることもあります。KLダイバージェンスというのは、確率分布の似てる度合いのことで、イメージはこんな感じです。

Density weighted method

ここまでは次に学習すべきデータを選ぶときの基準は自信がないとか、人によって判断が分かれるというものでした。でも、本当にその基準でいいんでしょうか?いくら自信がない問題だからって、すごくたまにしかテストにでない問題を学習するのは効率が悪い気もします。そんな考えに基づいたのがdensity weighted methodです。

Density weighted methodでは基本的には周辺にたくさんのデータが存在するラベルを選ぶ、というのが戦略になります。それぞれのデータがどれだけ似ているか?はユークリッド距離とかコサイン類似度で評価します。

データ密度が高いところを中心に学習すると精度自体は確かに上がるわけですが、レアイベントに対する予測精度が効率的に改善されるわけではないので、レアイベントが重要なタスク(不良検知とか材料探索とか)については注意が必要かもしれないですね。

おわりに

上記の手法はあくまでもいくつかの例なので、他にもたくさんの手法があります。複数を組み合わせたりもします。modALに実装されている例でいうと、Ranked bathch-mode samplingなんかは、unsertainity samplingとdensity weighted methodの組み合わせと言えます。能動学習の効果はタスクに大きく依存すると思いますが、1.5倍くらいの効率で学習が進められるケースもあるようです。うまく使っていきたいですね。

Discussion