敵対的学習(敵対的訓練)とは
Adversarial Training / 敵対的訓練
敵対的サンプルを学習データに含めてモデルを再学習させることで、そうした摂動を加えた入力に対する頑健性を高める学習手法
ひとことで言うと
AIをわざと騙すような入力(敵対的サンプル)を学習データに混ぜて鍛え直し、だまされにくくする手法。
概要
敵対的学習は、敵対的サンプルを学習データに含めてモデルを再学習させることで、そうした摂動を加えられた入力に対しても正しい予測を維持できるよう頑健性を高める学習手法。訓練時に、その時点のモデルパラメータに対して勾配ベースの手法(FGSMやPGDなど)で敵対的サンプルを生成し、生成したサンプルと正解ラベルの組を通常の学習データに加えて学習を進める。Madryらは、この手続きを、モデルパラメータを最小化する外側の最適化と、損失を最大化する敵対的サンプルを探索する内側の最適化からなる鞍点問題(min-max問題)として定式化した。PGDによる敵対的サンプル生成を内側の最適化に用いる敵対的学習は、一次の勾配情報を用いる攻撃に対して高い頑健性を示すことが報告されている。敵対的学習によって頑健性を高めたモデルは、通常のクリーンなデータへの精度はわずかに低下することがある。また、学習時に敵対的サンプルを都度生成する分だけ、学習コストの増加も課題として知られている。
背景
深層学習モデルは、敵対的サンプルのような入力空間の局所的な変化に対して脆弱な決定境界を学習しやすい。この脆弱性を、通常の学習データだけでなく攻撃者が使いそうな摂動を加えたデータも含めて学習させることで軽減しようとする発想が、敵対的学習の背景にある。
歴史
2014年: Goodfellowらが論文Explaining and Harnessing Adversarial Examplesの中で、FGSMで生成した敵対的サンプルを学習データに加える初期の敵対的学習の枠組みを提案。2017年: Madryらが論文Towards Deep Learning Models Resistant to Adversarial Attacksで、敵対的学習をmin-max問題として定式化し、PGDを用いた敵対的学習が強力な攻撃に対しても頑健性を発揮することを示した。
アーキテクチャ
敵対的学習は、モデルパラメータに関する損失の最小化と、入力に対する損失の最大化(敵対的サンプルの探索)を組み合わせた鞍点問題として定式化される。学習の各ステップで、現在のモデルパラメータに対しPGDなどの手法で敵対的サンプルを生成し(内側の最大化)、生成したサンプルを含むバッチでモデルパラメータを更新する(外側の最小化)。この内側と外側の最適化を交互に繰り返すことで、モデルは敵対的サンプルに対しても損失が小さくなるパラメータへ収束していく。
ワークフロー
学習バッチの入力に対し、現在のモデルパラメータを用いて敵対的サンプルを生成する。 生成した敵対的サンプルを、元の入力の一部または全部と置き換える、あるいは追加する。 敵対的サンプルを含むバッチでモデルパラメータを通常の学習と同様に更新する。 以上を学習が収束するまで繰り返す。
コード例
PGDベースの敵対的学習の概念的な流れ
# 学習ステップごとにPGDで敵対的サンプルを生成し、それを使ってパラメータを更新する(概念例)
for x, y in dataloader:
x_adv = pgd_attack(model, x, y, epsilon=0.03, steps=10)
loss = loss_fn(model(x_adv), y)
loss.backward()
optimizer.step()欠点
- 敵対的サンプルの生成をステップごとに行うため、通常の学習よりも計算コストが増加しやすい
- 頑健性を高める一方で、摂動を加えていない通常のクリーンなデータに対する精度がわずかに低下する場合がある
- 学習時に想定した種類の摂動以外の攻撃に対しては頑健性が保証されない
比較
関連用語
よくある質問
敵対的学習はなぜ計算コストが高いのか?
学習の各ステップで敵対的サンプルを生成するための追加の勾配計算(PGDでは複数回の反復)が必要になるため。
敵対的学習を導入するとモデルの精度は下がる?
頑健性と引き換えに、摂動のない通常データへの精度がわずかに低下することがある、と報告されている。
参考文献
- Research PaperExplaining and Harnessing Adversarial Examples
- Research PaperTowards Deep Learning Models Resistant to Adversarial Attacks