メンバーシップ推論攻撃入門:モデルは学習データを漏らすか
はじめに
モデルの出力だけを見て、ある人のデータが学習に使われたかどうかを当てる。これがメンバーシップ推論攻撃(MIA)です。医療や与信のように、学習データに含まれること自体が機微な情報になる場面では、これは実害のあるプライバシー漏洩になります。
今回、わざと過学習させた分類器に対して、損失だけを手がかりにする単純な攻撃を仕掛けました。当てずっぽうなら的中は五分五分(AUCで0.5)のところ、攻撃は0.744まで当てました。正則化を効かせて過学習を抑えると0.536、ほぼ当てずっぽうと変わらない水準まで下がります。攻撃の成功度は、モデルがどれだけ過学習しているか、より正確には学習データに対してどれだけ自信過剰になっているかと、はっきり連動していました。この記事では、攻撃を実際に実装してプライバシーを測り、防御がどこまで効くかを確かめます。
対象読者:
- 合成データや公開モデルのプライバシーリスクを評価したい方
- 攻撃の視点からプライバシーを理解したい方
- 過学習とプライバシー漏洩の関係に関心のある方
記事のポイント:
- MIAの脅威モデルと、成功する理由(過学習)を理解する
- 損失ベース攻撃とShadowモデル攻撃の仕組みを実装で確かめる
- 攻撃成功率を指標にプライバシーを実測し、防御の効果を測る
脅威モデルと攻撃の直感
想定する攻撃者は、モデルの出力(各クラスの予測確率や損失)だけを観測できるとします。中身の重みは見えないブラックボックス設定です。それでもなぜ当てられるのでしょうか。
理由は過学習にあります。モデルは学習に使ったデータに対しては自信を持って正解しやすく、見たことのないデータに対してはやや不確かになります。つまり、あるサンプルへの予測が過度に自信を持っていれば、それは学習データだった可能性が高い、と推測できます。学習データと非学習データで振る舞いが違うこと、これが漏洩の源です。合成データの文脈でも同じで、生成器が元のレコードを記憶していれば、その痕跡から元データを推定できてしまいます。
代表的な攻撃手法
もっとも単純なのが損失ベース攻撃です。対象サンプルに対するモデルの損失(正解クラスへの負の対数尤度)を計算し、損失が小さければ学習データだと判定します。閾値を引くだけの攻撃ですが、過学習したモデルにはよく効きます。
def nll(model, X, y): # 正解クラスへの損失
p = np.clip(model.predict_proba(X), 1e-6, 1 - 1e-6)
return -np.log(p[np.arange(len(y)), y])
# 損失が小さいほど「学習データ」と判定
scores = np.r_[-nll(model, X_member, y_member), -nll(model, X_nonmember, y_nonmember)]
labels = np.r_[np.ones(len(X_member)), np.zeros(len(X_nonmember))]
attack_auc = roc_auc_score(labels, scores)
より強力なのがShadowモデル攻撃です。攻撃者が対象モデルを模倣したシャドウモデルを複数訓練し、それぞれの学習データと非学習データに対する出力の違いを教師データとして、専用の攻撃分類器を学習します。対象モデルの損失に直接アクセスできない場合でも、出力確率のパターンから攻撃を組み立てられる点が強みです。近年はLiRA(尤度比攻撃)のように、より精緻に較正された手法も登場しています。
攻撃を実装して測る
学習データ(メンバー)と非学習データ(非メンバー)を明確に分け、過学習の度合いを変えた3つの勾配ブースティングを用意します。攻撃AUCに加え、近年の評価で重視される「低い偽陽性率での真陽性率(TPR@1%FPR)」も測ります。乱数シードは42に固定しました。
攻撃のROC曲線を見ると、過学習したモデルほど対角線から大きく持ち上がっています。正則化したモデルはほぼ対角線上、つまり攻撃が効いていません。

攻撃AUCを、学習データと非学習データの損失差(自信過剰の度合い)に対してプロットすると、両者はよく連動していました。

数値でまとめます。
| モデル | 損失差 | 攻撃AUC | TPR@1%FPR |
|---|---|---|---|
| 過学習 | 0.751 | 0.744 | 0.020 |
| 中程度 | 0.203 | 0.603 | 0.015 |
| 正則化 | 0.040 | 0.536 | 0.012 |
Shadowモデル攻撃も過学習モデルに対して仕掛けると、攻撃AUCは0.683でした。損失ベース攻撃(0.744)と同程度の成功率です。防御の効果とあわせて棒グラフにします。

攻撃結果の読み方と防御
まず、漏洩は過学習の副作用だという点です。攻撃AUCは損失差と単調に連動し、正則化で過学習を抑えると0.536まで、ほぼ偶然の水準に落ちました。プライバシーを守る第一歩は、凝った防御を足すことではなく、まず過学習させないことです。正則化や早期終了は、汎化性能のためだけでなくプライバシーのためにも効きます。
次に、AUCだけを見て慌てないことも重要です。過学習モデルの攻撃AUCは0.744と高く見えますが、TPR@1%FPRは0.020にとどまりました。これは、偽陽性を1%に抑えた運用では、攻撃者が自信を持ってメンバーと断定できる人はごくわずかだ、という意味です。平均的な識別力(AUC)が高くても、低い偽陽性率での確実な特定は難しい。プライバシーリスクを評価するときは、AUCと低FPR域のTPRの両方を見るべきで、近年の研究がTPR@低FPRを重視するのはこのためです。
もう一つ、防御には原理的な保証を与える手段があります。正則化は攻撃を弱めますが、どこまで弱まるかの保証はありません。差分プライバシー(DP-SGD)は、学習に数学的なノイズを加えることで、攻撃成功率に理論的な上限を課します。攻撃を実装して測る経験的なプライバシー評価と、差分プライバシーによる原理的な保証は、両方そろえて使うのが実務的です。合成データを扱うなら、有用性の評価(TSTR)とプライバシーの評価を並べて見ることで、両者のトレードオフを具体的な数字で議論できます。
評価の射程にも限りがあります。攻撃の強さは脅威モデルに依存します。今回はブラックボックス設定でしたが、重みが見えるホワイトボックスならさらに強い攻撃が可能です。合成データに対しては、出力損失ではなく生成レコードと元データの近傍距離を使う攻撃など、専用の評価が必要になります。攻撃AUCやTPRの絶対値も、データセットとモデル次第で変わります。
まとめ
プライバシーは、攻撃を実装して初めて実測できます。今回の実験では、過学習モデルの攻撃AUCが0.744に達し、正則化で0.536まで下がりました。同時に、TPR@1%FPRが0.020にとどまることから、AUCの高さだけで危険度を判断すると過大評価になることも分かりました。モデルや合成データを公開する前には、まず損失ベースのMIAを自分で仕掛けてAUCと低FPR域のTPRを測り、過学習していれば正則化で抑え、機微なデータを扱うなら差分プライバシーで上限を保証する、という順で監査に組み込むと無理がありません。