敵対的なデータを使用してモデルを動的にトレーニングする方法

敵対的なデータのモデルトレーニング方法

ここで学ぶこと
  • 💡ダイナミックな敵対的データ収集の基本的なアイデアとその重要性。
  • ⚒敵対的データを動的に収集し、モデルをそれらでトレーニングする方法 – MNIST手書き数字認識タスクを例に説明します。

ダイナミックな敵対的データ収集(DADC)

静的ベンチマークは、モデルの性能を評価するための広く使用されている方法ですが、多くの問題があります:飽和していたり、バイアスがあったり、抜け穴があったりし、研究者が指標の増加を追い求める代わりに、信頼性のあるモデルを構築することができません1。

ダイナミックな敵対的データ収集(DADC)は、静的ベンチマークのいくつかの問題を緩和する手法として大いに期待されています。DADCでは、人間が最先端のモデルを騙すための例を作成します。このプロセスには次の2つの利点があります:

  1. ユーザーは、自分のモデルがどれだけ堅牢かを評価できます。
  2. より強力なモデルをさらにトレーニングするために使用できるデータを提供します。

このように騙し、敵対的に収集されたデータでモデルをトレーニングするプロセスは、複数のラウンドにわたって繰り返され、人間と合わせてより堅牢なモデルが得られるようになります1。

敵対的データを使用してモデルを動的にトレーニングする

ここでは、ユーザーから敵対的なデータを動的に収集し、それらを使用してモデルをトレーニングする方法を説明します – MNIST手書き数字認識タスクを使用します。

MNIST手書き数字認識タスクでは、28×28のグレースケール画像の入力から数字を予測するようにモデルをトレーニングします(以下の図の例を参照)。数字の範囲は0から9までです。

画像の出典:mnist | Tensorflow Datasets

このタスクは、コンピュータビジョンの入門として広く認識されており、標準(静的)ベンチマークテストセットで高い精度を達成するモデルを簡単にトレーニングすることができます。しかし、これらの最先端のモデルでも、人間がそれらを書いてモデルに入力したときに正しい数字を予測するのは難しいとされています:研究者は、これは静的テストセットが人間が書く非常に多様な方法を適切に表現していないためだと考えています。したがって、人間が敵対的なサンプルを提供し、モデルがより一般化するのを助ける必要があります。

この手順は以下のセクションに分けられます:

  1. モデルの設定
  2. モデルの操作
  3. モデルのフラグ付け
  4. 全体をまとめる

モデルの設定

まず、モデルのアーキテクチャを定義する必要があります。以下の単純なモデルアーキテクチャは、2つの畳み込みネットワークを50次元の完全連結層と最終層に接続したものです。最後に、ソフトマックス活性化関数を使用してモデルの出力をクラスの確率分布に変換します。

# Adapted from: https://nextjournal.com/gkoehler/pytorch-mnist
class MNIST_Model(nn.Module):
    def __init__(self):
        super(MNIST_Model, self).__init__()
        self.conv1 = nn.Conv2d(1, 10, kernel_size=5)
        self.conv2 = nn.Conv2d(10, 20, kernel_size=5)
        self.conv2_drop = nn.Dropout2d()
        self.fc1 = nn.Linear(320, 50)
        self.fc2 = nn.Linear(50, 10)

    def forward(self, x):
        x = F.relu(F.max_pool2d(self.conv1(x), 2))
        x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))
        x = x.view(-1, 320)
        x = F.relu(self.fc1(x))
        x = F.dropout(x, training=self.training)
        x = self.fc2(x)
        return F.log_softmax(x)

モデルの構造を定義したので、標準のMNISTトレーニング/開発データセットでモデルをトレーニングする必要があります。

モデルとの対話

この時点で、トレーニング済みのモデルがあることを前提とします。このモデルはトレーニングされていますが、人間と連携して敵対的なデータを使用して堅牢にすることを目指しています。そのためには、ユーザーがモデルと対話できる方法が必要です:具体的には、ユーザーがキャンバス上に0〜9の数字を書いてモデルが分類を試みることができるようにしたいです。これは、🤗 Spacesを使用してMLモデルのデモを迅速かつ簡単に構築できることで実現できます。Spacesについての詳細とビルド方法については、こちらをご覧ください。

以下は、20エポックでトレーニングしたMNIST_Modelとの対話を行うための簡単なスペースです(テストセットで89%の精度を達成しました)。白いキャンバスに数字を描くと、モデルがあなたのイメージから数字を予測します。フルスペースはこちらからアクセスできます。このモデルを騙してみてください😁。一番おかしい字で書いてみてください。キャンバスの両側に書いてみたり、自由にやってみてください!

モデルのフラグ設定

上記のモデルを騙すことができましたか?😀 もしできた場合、それでは逆説的な例をフラグ設定する時が来ました。フラグ設定には以下の手順が必要です:

  1. 逆説的な例をデータセットに保存する
  2. 一定のサンプル数が収集された後に、逆説的な例でモデルをトレーニングする
  3. 手順1-2を複数回繰り返す

これらすべてを行うためのカスタムなflag関数を作成しました。詳細については、こちらのフルコードをご覧ください。

注意:Gradioには、モデルの逆説的なサンプルを簡単にフラグ設定するための内蔵のフラグ設定コールバックがあります。詳細については、こちらをご覧ください。

すべてをまとめる

最終ステップは、モデルの設定、モデルとの対話、およびフラグ設定の3つのコンポーネントを1つのデモスペースとしてまとめることです!そのために、MNIST手書き認識タスクの動的な逆説的データ収集のためのMNIST逆説的スペースを作成しました。以下でテストしてみてください。

結論

動的な逆説的データ収集(DADC)は、多様で飽和しない人間に合わせたデータセットを収集し、モデルの評価とタスクのパフォーマンスを改善する手段として、機械学習コミュニティで注目されています。モデルをループさせながら人間によって生成された逆説的データを動的に収集することで、モデルの一般化能力を向上させることができます。

この逆説的データを騙し、モデルをトレーニングするプロセスは、複数のラウンドで繰り返す必要があります1。エリック・ウォレスらの自然言語推論タスクに関する実験では、短期的には標準的な非逆説的データ収集の方が優れているものの、長期的には動的な逆説的データ収集が顕著に高い精度を示すことがわかっています。

🤗 Spacesを使用することで、モデルの動的な逆説的データを収集し、それらに対してトレーニングするプラットフォームを比較的簡単に構築することができます。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more