機械学習における敵対的攻撃とは何か?

AI、特に深層学習モデルが社会に急速に浸透し、画像認識から自動運転まで、その能力は目覚ましい進化を遂げています。しかし、その成果の裏で、モデルが抱える深刻な脆弱性については、まだ広く知られていません。実は、現在のAIモデルは、人間には知覚できないほど微小なノイズ(摂動)が加えられただけで、いとも簡単に騙され、全く異なる予測をしてしまうことがあります。

この「敵対的攻撃」と呼ばれる脅威は、自動運転車に交通標識を誤認させたり、医療AIに病変を見落とさせたりと、現実世界で人命や資産を危険に晒しかねない、重大なセキュリティリスクとなります。

今回は、この深刻な課題に立ち向かうための防御技術「敵対的訓練」に焦点を当てます。敵対的攻撃とは何かという基本から、モデルを堅牢にする敵対的訓練の仕組み、そして具体的な実装を支援するライブラリ「ART」を用いた実践まで、一気通貫で解説します。

敵対的攻撃とは?

敵対的攻撃とは、一言でいうと、AIモデルを意図的に騙すために作られた、悪意のある入力データによる攻撃のことです。

AIは、入力されたデータ(画像、音声、テキストなど)を分析し、特定の予測結果を出力します。敵対的攻撃は、その入力データに、人間にはほとんど知覚できないような微小な改変(摂動ノイズと呼びます)を加えることで、AIの予測を意図的に誤らせる手法です。この巧妙に加工されたデータを敵対的サンプル (Adversarial Example) と呼びます。

手法名概要特徴攻撃タイプ利点欠点
Fast Gradient Method (FGM / FGSM) 損失関数の勾配に沿って1ステップで入力に微小な摂動を加える。高速・軽量な攻撃。1ステップで摂動生成。White-box実装が簡単で計算量が少ない。ベースラインとして有用。単純すぎて強力なモデルには通用しにくい。
Basic Iterative Method (BIM / I-FGSM)FGMを複数回繰り返して摂動を精緻化。各ステップでクリッピングを行い、摂動の大きさを制限。強化版FGM。より高い攻撃成功率。White-box強力な攻撃。制御可能な摂動サイズ。計算コストがFGMより高い。
Projected Gradient Descent (PGD) BIMの拡張。ランダム初期化と投影操作を追加。敵対的訓練でも用いられる。最も強力な勾配ベース攻撃の1つ。訓練・評価両方に使われる。White-box高い攻撃性能。堅牢性評価の標準。非常に計算コストが高い。
Elastic Net Attack (EAD)L1正則化とL2正則化を組み合わせた摂動最適化。疎な敵対的摂動が可能。Carlini & Wagner 攻撃の拡張。疎性を重視。White-boxステルス性の高い摂動生成が可能。パラメータ調整が困難。時間がかかる。
Adversarial Patch画像の一部に貼り付けるパッチを学習させ、分類器を騙す。位置不変・対象に依存しない物理的攻撃が可能。White-box / Black-box実環境(物理空間)でも効果を発揮可能。通常のピクセル単位の摂動とは異なる前提。視覚的に目立ちやすい。
Adversarial Texture3D物体のテクスチャを敵対的に最適化し、どの角度からも誤認識を誘導。3D環境を考慮した物理ベース攻撃。レンダリング込み。White-box現実世界での3D攻撃をシミュレート可能。テクスチャ生成やレンダリングに高いコスト。3Dモデルが必要。
Composite Adversarial Attack複数の敵対的手法(例:パッチ+ノイズ)を統合して攻撃性能を強化。複合的攻撃で検知回避と成功率を両立。White-box / Black-box様々な状況に適応可能。攻撃の汎用性が高い。実装が複雑。攻撃対象に応じたチューニングが必要。
表1. 代表的な敵対的サンプル生成手法

下の画像は、その典型的な例です。左の「パンダ」の画像に、中央にある人間には見分けがつかないほどのノイズを加えると、右の画像(敵対的サンプル)が生成されます。人間が見ればどちらも「パンダ」ですが、AIモデルは右の画像を高い確信度で「テナガザル」と誤認識してしまいます。

図1. 敵対的サンプルの実例https://arxiv.org/pdf/1412.6572 より引用)

敵対的攻撃の3つの重要なポイント

なぜ、このような奇妙な現象が起きるのでしょうか。敵対的攻撃には、3つの重要なポイントがあります。

  1. 人間には見分けがつかない「微小な摂動」 敵対的サンプルの特徴は、加えられるノイズが非常に小さいことです。そのため、人間が元のデータと見比べても、その違いに気づくことはほとんどありません。しかし、モデルはそのわずかな変化に過敏に反応し、全く異なる判断を下してしまうのです。
  2. 計算され尽くした「意図的な誤分類」 加えられるノイズは、決してランダムなものではありません。攻撃者は、AIモデルの内部構造(特に予測の根拠となる「勾配」という情報)を分析し、「どの方向に、どれだけデータを変化させれば、最も効率的にモデルを騙せるか」を計算してノイズを生成します。まさに、モデルの弱点をピンポイントで突く、悪意のある細工なのです。
  3. AIが持つ根本的な「脆弱性」 この攻撃が成立する根本的な原因は、AI(特に深層学習モデル)が、私たち人間とは全く異なる方法でデータの特徴を捉えている点にあります。人間が物事の本質的な特徴で判断するのに対し、AIは時に人間が意図しない、データ上の些細なパターンに依存してしまうことがあります。敵対的攻撃は、その人間には理解しがたいAI独特の「認識のクセ」や脆弱性を巧みに利用しているのです。

なぜ敵対的攻撃は深刻な問題なのか?

「AIの予測が少し間違えるだけ」と軽く考えてはいけません。AIの判断が、現実世界での物理的なアクションや重要な意思決定に直結する場合、その影響は計り知れないものになります。

  • 自動運転: 停止標識に特殊なシールを貼ることで、自動運転車がそれを「制限速度100km」と誤認識し、大事故を引き起こす。
  • 医療診断: X線画像に微細なノイズを加えられ、AI診断システムががんの兆候を見落とし、患者の治療機会を奪ってしまう。
  • 顔認証システム: 特殊なデザインのメガネをかけるだけで、別人として認証を突破し、セキュリティエリアに侵入する。

このように、敵対的攻撃は単なるサイバー上の問題に留まらず、私たちの生命や財産、社会の安全を直接脅かす深刻なセキュリティリスクなのです。

攻撃者の知識レベルによる分類

敵対的攻撃は、攻撃者がAIモデルの情報をどれだけ持っているかによって、大きく2つのシナリオに分類されます。

  • ホワイトボックス攻撃 (White-box Attack): 攻撃者が、対象モデルの構造、パラメータ、学習データなど、すべての内部情報を知っているという想定で行われる攻撃です。最も強力な攻撃ですが、現実には攻撃者が全ての情報を入手するのは難しいケースも多いです。
  • ブラックボックス攻撃 (Black-box Attack): 攻撃者はモデルの内部を知らず、入力とそれに対する出力(予測結果)しか分からない状態で行う攻撃です。より現実世界で起こりうる脅威シナリオと言えます。

敵対的訓練とは?

前章で解説した恐ろしい「敵対的攻撃」に対し、AIモデルは無力なのでしょうか。いいえ、もちろん対策技術も研究されています。その中でも最も標準的で強力な防御手法が、この章で紹介する敵対的訓練 (Adversarial Training) です。

考え方は非常にシンプルです。一言でいえば、「AIモデルに、あらかじめ『騙し討ち』の問題を解かせておく」 というものです。訓練段階で意図的に敵対的サンプルを生成し、それを「これも正しく分類しなさい」と学習させることで、モデルに免疫をつけ、攻撃に対する抵抗力(ロバスト性)を高めます。

図2. 敵対的訓練のフローhttps://arxiv.org/pdf/2109.00544 より引用)

敵対的訓練の仕組み

敵対的訓練は、通常のモデル学習プロセスに少し手を加えることで実現されます。

  1. 敵対的サンプルを生成する まず、訓練データの一部を使って、モデル自身に敵対的攻撃を仕掛けます。FGSMやPGDといった攻撃手法(前章で紹介したホワイトボックス攻撃の一種)を用い、現在のモデルが最も間違えやすい敵対的サンプルを動的に生成します。
  2. 訓練データに混ぜる 生成した敵対的サンプルを、元のクリーンなデータと一緒に訓練セットに加えます。つまり、モデルの教科書に「通常問題」と「意地悪な応用問題」の両方を載せるイメージです。
  3. 拡張されたデータでモデルを訓練する この拡張されたデータセットでモデルを再訓練します。これにより、モデルはクリーンなデータを正しく分類する能力を維持しつつ、悪意のあるノイズが加えられたデータに対しても正しい判断を下せるように学習していきます。

このプロセスを繰り返すことで、モデルは自身の弱点を次々と克服し、より堅牢になっていきます。

手法名概要特徴強み弱み
Standard Adversarial Training (AT)敵対的サンプル(例:FGSMやPGDで生成)を訓練に用いるベースライン手法。敵対的サンプルと通常サンプルを混ぜて訓練。実装が比較的簡単で、多くの敵対的防御研究の出発点。過学習や自然精度の低下を招くことがある。高計算コスト。
TRADES精度とロバスト性のトレードオフを明示的に制御する損失関数を導入。クリーンな精度と敵対的精度のバランスを調整可能。高いロバスト性を保ちながら自然精度もある程度維持。損失関数の設計が複雑でチューニングが必要。
Adversarial Weight Perturbation (AWP)モデルパラメータ空間上の敵対的摂動を導入して訓練。重みの摂動でより広範囲なロバスト性を付与。局所的最適解に陥るのを防ぎ、ロバスト性が向上。重み空間の最適化により計算がさらに複雑・重い。
OAAT (Oracle Aligned Adversarial Training)ロバストな「仮想オラクルモデル(Oracle)」を用いて、現モデルの出力を整合させるよう訓練。教師として理想的な出力を与える、知識蒸留的アプローチ。敵対的なサンプルに対しても整合性のある出力を学習可能。オラクルモデルの準備が前提となり、実用上制約がある。
MART (Misclassification Aware Adversarial Training)誤分類されやすいサンプルに対して重点的にロバスト性を向上させる。クラス不均衡や境界付近の脆弱性を考慮。攻撃に対して特に脆弱な領域のロバスト性向上に寄与。精度維持が難しい場合あり。ハイパーパラメータ調整が必要。
Free Adversarial Training同じデータを複数回用いることで、勾配再利用により計算を効率化。高速な訓練プロセスを実現。PGDを近似しつつコスト削減。学習時間を大幅に短縮可能。現実的な適用性が高い。攻撃の強度や近似の粗さによって精度が変動する。
表2. 代表的な敵対的訓練の手法

メリットとデメリット(副作用)

敵対的訓練は、既知の攻撃に対するモデルの防御力を大幅に向上させるとても実用的な手法ですが、いくつかのデメリットや副作用も知られています。

メリット

  • ロバスト性の向上: 訓練で使われた種類の攻撃に対して、モデルの防御力が大きく向上します。
  • 実用性: 比較的シンプルな考え方で、既存の学習プロセスに組み込みやすいのが利点です。

デメリット

  • 汎化性能の低下(精度とのトレードオフ): これが最大の課題です。敵対的サンプルへの対応力を高める代償として、攻撃を受けていないクリーンなデータに対する精度がわずかに低下することがあります。ロバスト性を取るか、通常時の精度を取るか、という難しいトレードオフが存在します。
  • 計算コストの増加: 訓練のたびに敵対的サンプルを生成するステップが加わるため、通常の訓練に比べて計算時間が大幅に増加します。
  • 特定の攻撃への過剰適合: 訓練で用いた特定の攻撃パターンには強くなりますが、未知の新しいタイプの攻撃に対しては、依然として脆弱な場合があると指摘されています。

敵対的訓練は、AIを現実世界の脅威から守るための基本かつ強力な防衛策です。しかし、万能薬ではなく、上記のようなトレードオフを理解した上で導入を検討する必要があります。研究者たちは、これらの課題を克服すべく、今もなお新しい訓練手法の開発に取り組んでいます。

Adversarial Robustness Toolbox (ART) の紹介

敵対的攻撃や防御手法をゼロから実装するのは、非常に複雑で時間がかかります。そこで登場するのが Adversarial Robustness Toolbox (ART) です。ARTは、IBM Researchによって開発され、現在はLinux Foundation AI & DataのプロジェクトとなっているオープンソースのPythonライブラリです。機械学習モデルのセキュリティ評価と防御を、統一的かつ簡単に行うための「万能ツールボックス」と言えます。

ARTの主な特徴

ARTは、AIの堅牢性に関する研究開発を加速させるための、多くの優れた機能を備えています。

  • 豊富な攻撃・防御手法をサポート: Fast Gradient Sign Method (FGSM)やProjected Gradient Descent (PGD)といった代表的な攻撃手法はもちろん、敵対的訓練をはじめとする多様な防御手法がすぐに利用できます。これらは画像だけでなく、表形式データや音声など、様々なタスクに対応しています。
  • 主要な機械学習フレームワークに対応: PyTorch、TensorFlow/Keras、scikit-learn、XGBoostなど、皆さんが普段使っている主要なフレームワークとシームレスに連携できます。既存のモデルに大きな変更を加えることなく、すぐに堅牢性のテストを始めることが可能です。
  • モデルの堅牢性を定量的に評価: ARTには、モデルがどれだけ敵対的攻撃に強いかを測定するための評価指標も用意されています。これにより、異なる防御手法の効果を客観的に比較・検討できます。
図3. 赤がAIモデルの攻撃、青がARTがサポートする防御手法https://github.com/Trusted-AI/adversarial-robustness-toolbox より引用)

ARTを使うメリットと考慮点

ARTを導入することで、開発者は多くの恩恵を受けることができます。

メリット

  • 開発効率の向上: 複雑なアルゴリズムを自分で実装する手間が省け、迅速に実験を行えます。
  • 再現性の確保: 標準化されたツールを使うことで、実験結果の信頼性や再現性が高まります。
  • 多様なモデルへの適用性: 画像分類モデルだけでなく、様々な種類の機械学習モデルのセキュリティを評価・強化できます。

考慮点

  • 学習コスト: 多機能な分、すべての機能を使いこなすにはある程度の学習が必要です。
  • パフォーマンスオーバーヘッド: 攻撃や防御のプロセスは追加の計算を伴うため、通常の訓練よりも実行に時間がかかります。

ARTの実践デモ

この章では、理論を実践に移します。ARTを使い、PyTorchで構築した画像認識モデルに対して以下のステップを実演します。

  1. MNISTデータセットで通常のモデルを訓練し、その性能を確認する。
  2. 訓練済みモデルに敵対的攻撃を仕掛け、性能が劇的に低下することを確認する。
  3. 敵対的訓練を適用してモデルを防御し、攻撃に対する耐性が向上することを示す。

まずは、デモに必要なライブラリをインストールします。

$ pip install torch
$ pip install adversarial-robustness-toolbox
$ pip install matplotlib  # 以降のデモで使用します

次に、Pythonスクリプトで必要なモジュールをインポートします。torch関連のモジュールに加えて、ARTから攻撃、分類器、データローダー、そして敵対的訓練のトレーナーを読み込みます。

import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import numpy as np

from art.attacks.evasion import FastGradientMethod
from art.estimators.classification import PyTorchClassifier
from art.utils import load_mnist
from art.defences.trainer import AdversarialTrainerTRADESPyTorch

今回は、手書き数字の画像データセットであるMNISTを使用します。ARTにはMNISTを簡単に読み込むためのユーティリティ関数が用意されています。

# MNISTデータセットをロード
(x_train, y_train), (x_test, y_test), min_pixel_value, max_pixel_value = load_mnist()

# PyTorchのNCHW形式 (バッチ数, チャンネル数, 高さ, 幅) に軸を入れ替える
x_train = np.transpose(x_train, (0, 3, 1, 2)).astype(np.float32)
x_test = np.transpose(x_test, (0, 3, 1, 2)).astype(np.float32)

次に、画像を分類するための簡単な畳み込みニューラルネットワーク(CNN)をPyTorchで定義します。

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv_1 = nn.Conv2d(in_channels=1, out_channels=4, kernel_size=5, stride=1)
        self.conv_2 = nn.Conv2d(in_channels=4, out_channels=10, kernel_size=5, stride=1)
        self.fc_1 = nn.Linear(in_features=4 * 4 * 10, out_features=100)
        self.fc_2 = nn.Linear(in_features=100, out_features=10)

    def forward(self, x):
        x = F.relu(self.conv_1(x))
        x = F.max_pool2d(x, 2, 2)
        x = F.relu(self.conv_2(x))
        x = F.max_pool2d(x, 2, 2)
        x = x.view(-1, 4 * 4 * 10)
        x = F.relu(self.fc_1(x))
        x = self.fc_2(x)
        return x

まずはベースラインとして、敵対的訓練を行わずに通常のモデルを訓練し、その脆弱性を確認します。

モデル、損失関数、オプティマイザを定義した後、ARTのPyTorchClassifierでラップします。これにより、ARTがモデルの学習や予測を統一的に扱えるようになります。クリーンなデータに対しては、約98.23%という非常に高い精度が出ていることがわかります。

model = Net()

# 損失関数とオプティマイザを定義
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.01)

# ART分類器を作成
classifier = PyTorchClassifier(
    model=model,
    clip_values=(min_pixel_value, max_pixel_value),
    loss=criterion,
    optimizer=optimizer,
    input_shape=(1, 28, 28),
    nb_classes=10,
)

# ART分類器を訓練
classifier.fit(x_train, y_train, batch_size=64, nb_epochs=3)

# 無害な(クリーンな)テストデータでART分類器を評価
predictions = classifier.predict(x_test)
accuracy = np.sum(np.argmax(predictions, axis=1) == np.argmax(y_test, axis=1)) / len(y_test)
print("Accuracy on benign test examples: {}%".format(accuracy * 100))
# => Accuracy on benign test examples: 98.23%

では、この高性能なモデルに敵対的攻撃を仕掛けてみましょう。ここでは代表的な攻撃手法であるFastGradientMethod (FGSM) を使用します。結果は衝撃的です。精度は約38.4%まで急落しました。僅かなノイズによって、モデルがいかに簡単に騙されてしまうかを示しています。

# 攻撃インスタンスを作成 (FastGradientMethod)
attack = FastGradientMethod(estimator=classifier, eps=0.2)

# テストデータに対して敵対的サンプルを生成
x_test_adv = attack.generate(x=x_test)

# 敵対的サンプルでモデルの性能を評価
predictions = classifier.predict(x_test_adv)
accuracy = np.sum(np.argmax(predictions, axis=1) == np.argmax(y_test, axis=1)) / len(y_test)
print("Accuracy on adversarial test examples: {}%".format(accuracy * 100))
# => Accuracy on adversarial test examples: 38.42%

参考までに、FastGradientMethod (FGSM) によって生成される敵対的サンプルの実例を以下に掲載します。

図4. FastGradientMethod (FGSM) で生成した敵対的サンプル

最後に、この脆弱なモデルを敵対的訓練で防御します。ARTのAdversarialTrainerTRADESPyTorchを使い、モデルを堅牢にしていきましょう。

敵対的訓練後のモデルを評価すると、クリーンなデータに対する精度はわずかに低下するものの、攻撃を受けたデータに対する精度が劇的に改善していることが確認できます。これにより、敵対的訓練がモデルのロバスト性向上に有効であることが実証できました。

# 新しいモデルを準備
model = Net()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.01)

# 新しいART分類器を作成
classifier_adv = PyTorchClassifier(
    model=model,
    clip_values=(min_pixel_value, max_pixel_value),
    loss=criterion,
    optimizer=optimizer,
    input_shape=(1, 28, 28),
    nb_classes=10,
)

# TRADESによる敵対的訓練トレーナーを作成
trainer = AdversarialTrainerTRADESPyTorch(
    classifier=classifier_adv,
    attack=attack, # 訓練中に使用する攻撃
    beta=0.5,
)

# 敵対的訓練を実行
trainer.fit(x_train, y_train, batch_size=64, nb_epochs=3)

# 【評価1】クリーンなテストデータに対する精度
predictions = classifier_adv.predict(x_test)
accuracy = np.sum(np.argmax(predictions, axis=1) == np.argmax(y_test, axis=1)) / len(y_test)
print("Accuracy on benign test examples: {}%".format(accuracy * 100))
# => Accuracy on benign test examples: 97.66%

# 【評価2】敵対的テストデータに対する精度
predictions = classifier_adv.predict(x_test_adv)
accuracy = np.sum(np.argmax(predictions, axis=1) == np.argmax(y_test, axis=1)) / len(y_test)
print("Accuracy on adversarial test examples: {}%".format(accuracy * 100))
# => Accuracy on adversarial test examples: 96.58%

おわりに

本記事では、AIモデルに潜む「敵対的攻撃」という深刻な脆弱性と、その有力な対策である「敵対的訓練」について、具体的なデモを交えながら解説しました。一見すると完璧に動作しているように見えるAIが、人間には知覚できないほどの僅かなノイズによって、いとも簡単に騙されてしまう事実は、多くの開発者にとって驚きかもしれません。

自動運転や医療AIなど、モデルの判断が私たちの生命や安全に直結する領域が広がる今、AIの「賢さ(精度)」だけでなく、その「堅牢性(ロバスト性)」を担保することは、もはや開発者の重要な責務と言えるます。

幸いなことに、本記事で紹介したAdversarial Robustness Toolbox (ART)のような優れたツールを使えば、誰もがこの重要な問題に取り組み始めることができます。

More Information