動態對抗資料收集(DADC)於 MNIST – Hugging Face 教學
TL;DR
Hugging Face 發布了一份實用指南,示範在 MNIST 手寫數字任務上執行動態對抗資料收集(DADC),讓使用者能透過 Gradio 🤗 Space 收集對抗樣本、標記它們,並透過迭代式重新訓練模型以提升韌性。
什麼是動態對抗資料收集?
動態對抗資料收集(DADC)以一個迴圈取代靜態基準,讓人類產生刻意欺騙最先進模型的輸入。此迴圈帶來兩大好處:它揭示模型的真實韌性,並產生不斷成長、符合人類需求的資料集,可用於訓練更強大的模型。多輪重複「欺騙‑再訓練」的循環,會得到更符合人類期望的模型。
設定 MNIST 模型
本教學從定義一個簡單的 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 訓練/驗證切分上進行訓練。
透過 🤗 Spaces 與模型互動
當基線模型訓練完成(此範例在 20 個 epoch 後達到 89 % 的測試準確率),本指南示範如何透過 Gradio 🤗 Space 將其公開。使用者可在畫布上手寫數字,模型會回傳預測結果。Space 的網址為 https://huggingface.co/spaces/chrisjay/simple-mnist-classification。此互動示範即是收集對抗輸入的入口。
標記對抗樣本
當使用者成功欺騙模型時,該範例會被標記:
- 將對抗影像保存至資料集。
- 當標記樣本數達到門檻後,模型會在擴充後的資料集上重新訓練。
- 步驟 1‑2 會在多輪中重複執行。
本教學提供自訂的
flag函式(完整原始碼請見.../mnist-adversarial/blob/main/app.py#L314)。Gradio 也提供內建的標記回呼函式,相關文件位於 https://gradio.app/using_flagging/。
端對端示範
將模型定義、互動 Space 與標記邏輯三個元件結合,即成為名為 MNIST Adversarial 的單一示範 (https://huggingface.co/spaces/chrisjay/mnist-adversarial)。使用者可直接測試系統、產生對抗樣本,並觀察模型在重新訓練後的改進情形。
影響與社群發現
DADC 透過持續注入人類產生的邊緣案例,克服靜態基準的限制,如飽和與隱藏偏見。部落格引用 Eric Wallace 等人(2022)的研究,指出雖然非對抗式資料收集可能帶來短期效益,DADC 卻能在自然語言推理任務上達到最高的長期準確率。同樣的原理亦適用於視覺任務,如 MNIST,因為靜態測試集中對多樣化手寫風格的代表性不足。
結論
動態對抗資料收集使得建立不會飽和、符合人類需求的資料集成為可能,並透過迭代式的欺騙‑再訓練迴圈提升模型韌性。Hugging Face 的教學示範,使用 🤗 Spaces 與 Gradio 即可輕鬆構建完整的 DADC 流程,降低研究人員與實務工作者採用此方法的門檻。