メインコンテンツまでスキップ

イントロダクション

過去のプロジェクト経験の中で、分類モデルは最も一般的な機械学習タスクの一つです。

分類モデルには特に難しいことはなく、まずバックボーンを構築し、次に最後の出力を複数の特定のクラスにマッピングします。そして、精度、再現率、F1 スコアなどの評価指標を使ってモデルの良し悪しを評価します。

一見、これで全てが解決するように見えますが、実際のアプリケーションではいくつかの問題に直面します。以下にこのプロジェクトのテーマを例に挙げてみます:

  • クラス定義

    分類タスクでは、定義したクラス間の類似度が高い場合、モデルはこれらのクラスを区別するのが難しくなります。例えば、「企業 A の保険書類」と「企業 B の保険書類」。これらはどちらも企業の書類であり、差異が少ないため、モデルはこれらのクラスを区別するのが難しくなります。

  • データの不均衡

    多くのシナリオでは、データ収集が最も困難な問題となります。特に個人情報を含む書類の場合、データの不均衡が少数クラスに対する予測能力を低下させます。

  • データ拡張

    私たちの生活には大量の書類が溢れており、常に新しい書類のクラスを追加したいと思っています。

    しかし、クラスを追加するたびに、モデル全体を再トレーニングまたは微調整する必要があり、コストが非常に高くなります。これには、データ収集、ラベリング、再トレーニング、再評価、デプロイなどが含まれ、全てのプロセスを再実行しなければなりません。

  • クラスのサブラベル

    顧客の要求は多種多様です。

    ある顧客が、最初に A ファイルというクラスを定義し、次にその A ファイルに関連するいくつかのサブラベルを追加したいとします。例えば:

    • 汚損した A ファイル
    • 反射した A ファイル
    • 第一世代フォーマットの A ファイル
    • 第二世代フォーマットの A ファイル
    • ...

    ここで重要なのは、サブラベルを追加するたびにモデルを再実行する必要があることです。

    モデルエンジニアリングの観点から見ると、これらのラベルを独立したクラスとして扱うのは「不合理」です。なぜなら、これらは全て A ファイルを基にしているからです。もしこれらのラベルを多クラス問題として扱うのも「不合理」な理由は、異なる主ファイルフォーマットに対応するサブラベルが異なるためです。

ヒント

そうすると次に考えるかもしれません:問題を解決できないなら、問題を提起した人を解決すればいい!

だめです!

これは機械学習の問題です。

メトリック学習

ファイル分類のテーマから離れると、この問題が実は**メトリック学習(Metric Learning)**に関するものであることに気づきます。

メトリック学習の主な目的は、サンプル間の類似性を測定する最適な距離関数を学習することです。従来の機械学習の分野では、メトリック学習は通常、データを元の特徴空間から新しい特徴空間にマッピングすることを含み、この空間では類似したオブジェクトが近くに配置され、異なるオブジェクトは遠くに配置されます。このプロセスは、サンプル間の実際の類似度を反映する距離関数を学習することによって実現されます。

もし上記の説明でまだ理解できなければ、簡単に言うと:メトリック学習は類似性を学習する方法です

応用シーン

メトリック学習には非常に有名な応用シーンがあります:顔認識(Face Recognition)

先ほど述べたように、顔の数は増え続けており、モデルを何度も再トレーニングすることは現実的ではありません。そのため、メトリック学習を使ったアーキテクチャは、より良い距離関数を学習し、顔認識の精度を向上させるのに役立ちます。

問題の解決

すべての分類問題がメトリック学習のレベルまで高度化するわけではありませんが、このプロジェクトにおいては、メトリック学習の手法が上記で述べた障害を解決するために非常に役立ちます。

  • 障害 1:クラス定義

    我々が学習するのはより良い距離関数であり、この距離関数は類似したクラスを区別するのに役立ちます。したがって、クラスの定義は必要なくなります。我々が分類したい対象は、最終的には単一の登録データとして扱われます。

  • 障害 2:データの不均衡

    我々は大量のデータを収集する必要がなくなります。なぜなら、我々のモデルは大量のサンプルに依存しないからです。必要なのは 1 つのサンプル、それが登録データです。他の部分は他のトレーニングデータで学習することができます。

  • 障害 3:クラスの拡張

    クラスを拡張するためには、新しいデータを登録するだけで、モデルの再トレーニングは不要です。この設計により、トレーニングのコストを大幅に削減することができます。

  • 障害 4:クラスのサブラベル

    この問題はメトリック学習のフレームワーク内でうまく解決できます。サブラベルを新しい登録データとして扱うことで、元のモデルに影響を与えることなく追加することができます。サブラベルと主ラベルの間には特徴空間で非常に近い距離があるかもしれませんが、完全に同じではないため、2 つのクラスをうまく区別できます。


まず、我々はメトリック学習のアーキテクチャ:PartialFC を導入しました。このアーキテクチャは、CosFaceArcFace などの技術を組み合わせて、事前に大量のクラスを設定することなく、正確に分類を行えるようにしています。

次に、さらに実験を進める中で、ImageNet-1K データセットCLIP モデル を導入しました。ImageNet-1K を基にして、各画像を 1 つのクラスとして扱い、この操作によって分類クラスの数を約 130 万に増やし、モデルにより多様な画像変化を与え、データの多様性を増加させました。

TPR@FPR=1e-4 の比較基準で、従来のベースラインモデルに比べて約 4.1%の精度向上(77.2% -> 81.3%)を実現しました。さらに ImageNet-1K のベースに CLIP モデルを導入し、知識蒸留を行うことで、TPR@FPR=1e-4 の比較基準でさらに約 4.6%の向上(81.3% -> 85.9%)を達成しました。

最新の実験では、BatchNorm と LayerNorm を組み合わせ、CLIP 蒸留モデルの基に TPR@FPR=1e-4 で約 4.4%の改善(85.9% -> 90.3%)を得ることができました。

なぜコントラスト学習を使わないのか?

コントラスト学習(Contrastive Learning)とメトリック学習は、いずれもサンプル間の類似性を学習する方法です。

では、なぜ今回はコントラスト学習を選ばなかったのでしょうか?

それはコントラスト学習が悪いわけではなく、現段階ではメトリック学習を使う方が適切だと考えたからです。

コントラスト学習の利点

コントラスト学習の最大の利点は、ラベルなしデータをうまく処理できることです。データのラベリングが困難な場合やデータ規模が非常に大きい場合、まさに「救世主」と言えます。

また、コントラスト学習は一般的な特徴を学習するのが得意で、これらの特徴は分類タスクだけでなく、ターゲット検出やセマンティックセグメンテーションなど、他のタスクにも応用できます。

しかし、欠点もある

まず、コントラスト学習は負のサンプルの設計に依存しています。負のサンプルの選択が適切でないと、モデルのトレーニング効果が大きく低下する可能性があります。

また、コントラスト学習は計算資源の消費が激しいです。負のサンプルが大量に必要で、これが計算コストを高くします。特に、大きなバッチサイズを使用して十分な負のサンプルを提供する必要があるため、ハードウェア資源に大きな挑戦を与えます。

さらに、コントラスト学習は無ラベルの自己教師あり設計に制限されているため、非常に精度の高い特徴(例えば、誤差が万分の一の精度)を学習するのが難しいです。この点において、顔認識のランキングを見ると、メトリック学習の方法が主導的であることがわかります。


要するに、我々は「メトリック学習」を選んで問題を解決しましたが、今後はコントラスト学習の応用も検討し、二者の長所を組み合わせたモデルを作り、一般的な特徴を学習し、強力な類似性判定能力を持たせることを目指しています。

最後に

テストでは、モデルは TPR@FPR=1e-4 で 90%以上の精度を示しました。そして、クラスの追加に際してモデルの再トレーニングは必要ありませんでした。

簡単に言えば、顔認識システムのプロセスをそのまま持ち込んだようなものです!

開発過程では、「本当にこれでいいのか?」と笑いながらも進めてきました。前述のように、このプロジェクトの初期のバージョン(第一著者)には一定の効果がありましたが、安定性には欠けていました。現在公開されているのは第三世代のモデル(第二著者)であり、全体的な効果も向上しており、良い結果となっています。

従来の「きちんとした」プロジェクトと比べて、こちらは非常に面白いプロジェクトです。

そのため、我々はこのプロジェクトのアーキテクチャと実験結果を公開し、このプロジェクトがあなたに新たなインスピレーションを与えることを願っています。また、もしこのプロジェクトの設計理念から新しい応用シーンを見つけたのであれば、ぜひともシェアしていただければと思います。