😇

Active Learningを導入するべき人って?

2021/09/16に公開約3,100字

Active Learningって?

Active Learningとは、モデルの苦手なデータを特定して効率よく学習するための方法です。

この手法ですが、論文をいくつか読んでいると、ラベル付け画像枚数が同じ場合、

  • 平均性能UPが1-2%程度
  • 苦手ケースの性能UPが8%程度

という感じで、性能向上分だけ見ると、劇的に向上するわけではありません。
ただ、もちろん導入しないよりは導入するほうが良いですし、

私は、ラベリングコストがかけられない個人MLでこそ、
Active Learningを導入する価値があると感じていますし、
また、企業でも、性能要求が高い場合はActive Learningの導入は価値があると思っています。

その理由についてこの記事にまとめていきます。

モデルってアノテーションし続ければ性能上がるんじゃない?

この疑問に関しては、GoogleとFacebookの取り組みが参考になります。

Googleは3億枚の画像を使って、Representation Learningしたのちに、そのRepresentationを使って、Object Detectorやその他モデルをFinetuneしています。
この研究のObject Detectorの性能を見てみると、
データ量がある一定以上増加すると、学習データ量の増加に対して、
性能の増加が対数増加となり(下記画像)、性能向上させるためのデータ量とアノテーションコストが徐々に上がっていきます。ある性能を達成するためのデータ量が指数関数的に増えるため、学習時間とアノテーションコストが指数関数的に上がります。さすがのグーグルも人手でのアノテーションではなく、ユーザ挙動を使った自動ラベリングとアノテーション品質ノーチェックというやり方で構築したデータです。

Facebookは10億枚の画像を使って、分類タスクをしています。
これは、Instagramのタグをラベルとして、Representation Learningしたのちに、Representationを使って、Linear Classifierを学習した結果で、こちらもやはりTargetタスクで、100%は取れていません。(下記画像、横軸が対数軸であることに注意)


どちらも、Representation Learningして、ターゲットタスクに合わせるという方法を取っていますが、
億単位の画像枚数を使った教師あり学習の研究として、非常に貴重で、GoogleやFacebookの規模のデータがあっても100%の性能には届かず、ターゲットタスクに合わせたデータ収集設計が必要であることを示唆しています。

一つ一つ人手でアノテーションした場合の事例としては、Aquariamの例があります。
この例はObject Detection用のラベルデータを増加させた例ですが、
このように性能が対数増加となっています。

これらの曲線を見る限り、高い性能要件を達成した場合、
データを闇雲に集めるのでは厳しそうな感じはしていて、
Active Learningのような方法を使って効率化する必要があると思えます。

モデルを作りたい:そこそこ性能いいモデルはどの程度のデータセットを使っている?

では、次に、世の中でそこそこ使われているモデルの学習データセットのサイズを調べてみます。
有名所のMediapipeのKeypoint detection系のモデルの学習データを調べてみます。
Mediapipeには、手と顔と体のKeypoint Detectionモデルがあります。
これらのKeypoint detectionのタスクは数次元から数百次元ののRegressionタスクであり、
手、顔、体のポーズの変化と、テクスチャの変化(肌や服の変化)により、
様々なバリエーションのデータが必要と予測されるタスクです。

これらのうちの例えば、Hand KeypointDetectorは、10万枚のSyntheticDataと、実データ16000枚が使われています。16000枚のアノテーションと、10万枚のSynthetic Dataで学習することになり、約10万枚の画像を使った学習となり、結構なGPUか時間が消費されることになります。
また、16000枚のアノテーションも個人でやるのは結構大変です。

Facemeshの論文には明記されていませんが、おそらく似たような枚数のデータセットが必要。
ポーズに関しては、実データのみで8万5千枚のデータセットを用意しており、
かなりの枚数にラベルをつけています。

こういった場合に、Active Learningで、例えば、Hand Keypoint Detectorのアノテーション量を半分のアノテーション量にできれば、8000枚のアノテーションですむため、だいぶ負担が減ります。数千枚のアノテーションをしなくて良くなります。(習熟すれば、1万枚の画像にシングルクラスのBoundingBoxをつける作業を1日でできるようになることもありますが、常人には無理です。)
実際に、脳のCT画像のSegmentationの事例では、同等の性能を達成するためにアノテーション枚数が
3000枚から1500枚の半分になった事例もあます。

Human Pose Keypoint Detectorなんかだと、4万枚アノテーションしなくて良くなりかなり負担が減ります。

個人MLでは、できる限りの時間を価値を生み出す作業に使いたいでしょうし、
数千枚から数万枚でもアノテーションの回数を減らせるのは価値があることかと思います。

以上が私の考えるActive Learningの適用先です。
学習インフラに投資してでもガチ性能のモデルを作りたい企業と、
学習インフラを柔軟に選択できて小回りが聞きやすい個人MLエンジニアです。

Discussion

ログインするとコメントできます