Differential Privacy
差分プライバシーは、ある人のデータを削除してもアルゴリズムの出力がほとんど変化しないよう、調整されたノイズを加えます。イプシロン、プライバシーバジェット、DP-SGDについて解説します。
差分プライバシー(DP)は、データを分析するアルゴリズムに対するプライバシーの数学的定義です。入力に特定の個人のレコードを追加または削除しても出力分布がほとんど変わらない場合、そのアルゴリズムは差分プライバシーを満たします。出力から観察者が知り得ることは、その個人のデータがなくてもほぼ同じように分かるため、結果からその個人に固有の情報が明らかになることはほとんどありません。これは、データ分析結果の公開や、医用画像、キーボード入力などの機密データを使った機械学習モデルのトレーニングに利用されています。Cynthia Dwork、Frank McSherry、Kobbi Nissim、Adam Smithは2006年の論文個人データ分析におけるノイズの感度への調整でこの定義を提唱し、この研究により2017年のゲーデル賞を受賞しました。この保証は、外部情報をどれだけ持つ攻撃者に対しても有効です。この点が従来の匿名化との違いです。従来の匿名化では、レコードから識別情報を削除しても、別のデータベースと照合することで再識別される可能性があります。
イプシロン、感度、プライバシー予算#
ランダム化アルゴリズムMは、1件のレコードだけが異なる任意の2つのデータセットDとD′、および任意の出力集合Sに対して、Pr[M(D) ∈ S] ≤ e^ε × Pr[M(D′) ∈ S]を満たす場合、ε-差分プライバシーを満たします。イプシロン(ε)は、1人のデータが出力をどの程度変え得るかの上限です。値が小さいほどプライバシー保護は強くなり、結果のノイズは大きくなります。緩和版の(ε, δ)では、非常に小さい確率δで上限を超えることを許容します。通常、δはレコード数の逆数よりもはるかに小さい値に設定します。
ノイズは感度、つまり1件のレコードが結果を変え得る最大量に合わせて調整します。カウント値の変化は最大1なので、ラプラスメカニズムでは真のカウントに、スケールが1/εのラプラスノイズを加えて公開します。プライバシー損失も累積します。εのクエリをk回行うと合計で最大k × εを消費するため、組織はデータセットごとにプライバシー予算を設定し、使い切った時点で回答を停止します。以下のコードは3段階のプライバシーレベルで1件のカウントを公開し、誤差と、出力を見た攻撃者が特定の人のデータが含まれていたかを判定できる頻度を測定します。
import numpy as np
rng = np.random.default_rng(0)
# A count over 1,000 records, and a neighboring dataset with one person removed
true_count = 412
neighbor_count = true_count - 1
for epsilon in (0.1, 1.0, 10.0):
# Laplace mechanism: a count has sensitivity 1, so the noise scale is 1 / epsilon
released = true_count + rng.laplace(scale=1 / epsilon, size=100_000)
released_neighbor = neighbor_count + rng.laplace(scale=1 / epsilon, size=100_000)
# Utility: average error. Privacy: accuracy of guessing whether the person is included
error = np.abs(released - true_count).mean()
threshold = true_count - 0.5
attack = ((released > threshold).mean() + (released_neighbor <= threshold).mean()) / 2
print(f"epsilon={epsilon:<4} mean error={error:6.2f} attacker accuracy={attack:.1%}")ε = 0.1の場合、平均誤差は9.98で、攻撃者の正答率は52.5%です。コイン投げよりわずかに高い程度です。ε = 1の場合、誤差は1.00に下がり、攻撃者の正答率は69.5%になります。ε = 10の場合、誤差は0.10ですが、攻撃者は99.7%の確率で正解します。ε-差分プライバシーを満たす公開データに対して攻撃者が達成できる最高の精度はe^ε / (1 + e^ε)です。ε = 0.1では52.5%、ε = 1では73.1%です。
差分プライバシーを満たすトレーニング#
GoogleのMartín Abadiらが2016年に発表したDP-SGDは、確率的勾配降下法を変更し、ディープラーニングに差分プライバシーを適用します。各トレーニングサンプルの勾配を最大ノルムにクリッピングすることで、単一のサンプルがモデルの重みを大きく変えられないようにします。さらに、各バッチの勾配の合計にガウスノイズを加え、プライバシーアカウンタでトレーニング全体のε消費量を追跡します。その結果、学習済みモデルが特定のサンプルを記憶できる度合いが制限され、メンバーシップ推論攻撃を直接抑制できます。その代償として精度が低下し、計算量が増えるため、DPモデルには通常、より大きなバッチとデータセットが必要です。2025年に公開されたGoogleのVaultGemmaは、ε ≤ 2.0、δ ≤ 1.1e-10でDP-SGDを使って全ての事前トレーニングを行った、10億パラメーターの大規模言語モデルです。
MetaのOpacusなどのライブラリは、PyTorch向けに、DP-SGDで必要となるサンプルごとの勾配を計算し、サンプル間で情報を混合するレイヤーを拒否します。一般的な例はバッチ正規化です。各サンプルの正規化値が同じバッチ内のほかのサンプルに依存するためです。畳み込みベースの検出器であるUltralytics YOLO26は、各畳み込みの後に畳み込みブロックでバッチ正規化を適用するため、DP-SGDでトレーニングするには、これらのレイヤーをグループ正規化に置き換える必要があります。OpacusのModuleValidator.fix()は、この置き換えを自動的に適用します。
差分プライバシーの利用分野#
- 公的統計: 2020年の米国国勢調査は、差分プライバシーを適用して結果を公表した初めての10年ごとの国勢調査でした。
- ローカル差分プライバシー: GoogleのChrome向けRAPPOR(2014年)やAppleのiOS機能(2016年)は、データがデバイスから送信される前にノイズを加えます。そのため、企業は人気の絵文字などの全体的な傾向を把握しながら、個々のユーザーの真の値を収集せずに済みます。
- 連合学習: デバイス上にデータを保持し、共有モデルの更新に差分プライバシーを加えることで、特定のユーザーのデータについて明らかになる内容を制限します。
- 合成データ: 差分プライバシーを使ってトレーニングした生成モデルは、元データに含まれる人々に対して同じε保証を持つ、共有可能なデータセットを生成します。
差分プライバシーは、より広いデータプライバシーの分野で使われる手法の1つであり、保存時や処理時の不正アクセスからデータを守るデータセキュリティや機密AIを補完します。2025年3月に確定したNISTのSP 800-226は、差分プライバシー保証の評価指針を示し、εの主張は、イベント1件または個人1人など、保護するプライバシーの単位と併せて初めて意味を持つと警告しています。










