Adversarial Attacks
敵対的攻撃では、AIモデルを高い確信度で誤らせるために、小さく、多くの場合は目に見えない入力の変更を加えます。FGSMの仕組み、攻撃の種類、防御策を解説します。
敵対的攻撃とは、機械学習(ML)モデルの入力を意図的に操作し、通常は高い確信度で誤った出力をさせることです。コンピュータービジョンでは、敵対的サンプルと呼ばれる操作済みの入力は、人が気づかないほど小さな変更しか元の入力との差がない場合でも、パンダを認識した分類器にテナガザルと判定させることがあります。この現象は、2013年の論文「ニューラルネットワークの興味深い特性」でディープニューラルネットワークについて報告されました。同じ脆弱性は、音声認識、マルウェア検出、大規模言語モデル(LLM)にも見られます。モデルの判断が動作を引き起こす場合、敵対的攻撃は特に重大です。たとえば、車にブレーキをかけさせる、ドアのロックを解除させる、取引を承認させるといったケースです。
敵対的サンプルの仕組み#
学習済みモデルの損失関数は、入力に対してどれほど誤っているかを測定します。通常、逆伝播では、損失の重みに対する勾配を計算します。攻撃者は代わりに入力ピクセルに対する勾配を計算し、損失が増える方向へピクセルを変更します。2014年の論文「敵対的サンプルの説明と活用」で、Ian Goodfellowらは、その原因は高次元空間におけるニューラルネットワークのほぼ線形な振る舞いだと論じました。各ピクセルをグレースケール値のわずかな割合だけ変えても、その変更が何十万ものピクセルにわたって積み重なり、出力に大きな変化をもたらします。Fast Gradient Sign Method(FGSM)は、入力勾配の符号に沿って一定幅の1ステップを進みます。0.007のステップによって、「パンダ」という予測の確信度57.7%が「テナガザル」の99.3%へ変わりました。射影勾配降下法(PGD)は、全体の変更量を定めた予算内に抑えながら小さなステップを繰り返すため、より強力な攻撃になります。
TorchVisionのResNet-18分類器に対するFGSM攻撃は、1回の逆伝播で実行できます。
import torch
import torch.nn.functional as F
from torchvision.io import decode_image
from torchvision.models import ResNet18_Weights, resnet18
from torchvision.transforms import v2
weights = ResNet18_Weights.DEFAULT
model = resnet18(weights=weights).eval()
torch.hub.download_url_to_file("https://ultralytics.com/images/bus.jpg", "bus.jpg")
# Keep pixels in [0, 1] and normalize inside each forward pass, so the attack edits real pixel values
image = v2.Compose([v2.Resize(256), v2.CenterCrop(224), v2.ToDtype(torch.float32, scale=True)])(decode_image("bus.jpg"))
normalize = v2.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
x = image.unsqueeze(0).requires_grad_(True)
logits = model(normalize(x))
# FGSM: move every pixel by one intensity level (1/255) in the direction that increases the loss
F.cross_entropy(logits, logits.argmax(1)).backward()
x_adv = (x + x.grad.sign() / 255).clamp(0, 1)
for name, batch in [("clean", x), ("adversarial", x_adv)]:
probs = model(normalize(batch)).softmax(1)
print(f"{name}: {weights.meta['categories'][probs.argmax()]} ({probs.max():.2f})")元の画像はminibus (0.83)と分類され、攻撃後の画像はpolice van (0.94)と分類されます。各ピクセルを255段階の強度のうち最大1段階変えるだけで、モデルは元のラベルよりも新しい誤ったラベルに高い確信を示します。
攻撃の種類#
攻撃は、攻撃者が行動するタイミング、モデルについて把握している情報、攻撃の目的によって分類されます。非標的型攻撃は任意の誤った出力を狙い、標的型攻撃は一時停止標識を制限速度標識として読ませるなど、特定の出力を強制します。デジタル攻撃では入力データを直接編集しますが、物理攻撃では、視野角、距離、照明が変わっても効果が残るステッカー、パッチ、印刷パターンなどで実物を改変します。NISTの敵対的機械学習の分類体系では、攻撃対象となるMLライフサイクルの段階ごとに攻撃を分類しています。
転移攻撃が機能するのは、あるモデルに対して作成された敵対的サンプルが、同じタスク向けに学習された他のモデルも欺くことが多いためです。そのため、攻撃者は代替モデルを学習させ、ホワイトボックス方式で攻撃し、その結果を内部を調べられないシステムに対して利用できます。
現実世界におけるリスク#
- 自動運転車:「深層学習モデルに対する堅牢な物理世界攻撃」では、実際の一時停止標識に貼られた白黒のステッカーによって、実験室の画像の100%、走行中の車から撮影したビデオフレームの84.8%で、標的型の誤分類が発生しました。
- 人物検出:身体の前に掲げた約40 cm四方の印刷パッチによって、パッチの最適化対象であるYOLOv2人物検出器の精度が大幅に低下しました。このようなパッチは、検出された人物をきっかけに作動するアラームを脅かします。たとえば、Ultralyticsのセキュリティアラームシステムは、YOLO26がフレーム内で一定数の物体を検出すると、アラートをメールで送信します。人物検出を抑制するパッチは、アラートも抑制します。
- 顔認識:研究者は敵対的パターンを施した眼鏡フレームを印刷し、着用者が顔認識システムを回避したり、特定の別人として識別されたりするようにしました。
- 言語モデル:自動的に最適化された敵対的サフィックス、つまりリクエストに追加するトークン列によって、安全性調整済みのチャットボットが有害なリクエストに応じるようになりました。また、オープンモデルで最適化したサフィックスは商用モデルにも転移しました。LLMに対する手作業の攻撃は、一般にジェイルブレイクやプロンプトインジェクションとして知られています。
敵対的攻撃と関連用語#
- データポイズニング:学習データを改ざんし、学習済みモデルの動作を誤らせます。多くの場合、隠されたトリガーを含む入力に対してのみ異常な動作が起こります。狭義の敵対的サンプルではモデルに手を加えず、推論時に入力を操作します。
- メンバーシップ推論攻撃:誤った出力を引き起こすのではなく、あるレコードが学習データに含まれていたかどうかという情報の抽出を目的とします。
- 敵対的生成ネットワーク (GAN):「敵対的」という語は、互いに競い合う2つのネットワークを学習させる手法を指しており、攻撃者は関与しません。
- AIレッドチーミング:リリース前に自社システムを攻撃する取り組みであり、他の手法とともに敵対的攻撃も利用します。
防御策#
「敵対的攻撃に耐性を持つ深層学習モデルに向けて」でPGDを用いて定式化された敵対的学習では、学習中に攻撃を生成し、それらを正しく分類できるようモデルを学習させます。これは実証的に最も信頼性の高い防御ですが、通常の学習の数倍の計算コストがかかり、クリーンな入力に対する精度も低下します。ランダム化平滑化などの認証付き防御は、一定の半径内の摂動では予測が変わらないことを証明しますが、その半径は小さい場合に限られます。入力を前処理する防御や勾配を隠す防御は、実績が芳しくありません。「難読化された勾配が誤った安心感をもたらす」では、ICLR 2018で発表された9つの防御を調査し、そのうち7つが難読化された勾配に依存していることを発見しました。また、そのうち6つを完全に回避し、さらに1つを部分的に回避しました。










