Featured image of post カナリアトラップで機械学習のデータリークを暴く方法

カナリアトラップで機械学習のデータリークを暴く方法

目次

背景

  • 機械学習のデータリーク(Train/Testの混入、Target Leakageなど)は、モデルの精度指標だけを見ていても気づけないことが多い
  • リークが起きていると、むしろ精度は不自然に高く出るため、「精度が良い」こと自体がリークの証拠にはならず、別の検査手段が必要になる
  • そこで、諜報・ジャーナリズムの世界で使われてきたカナリアトラップという情報漏洩の検出手法を、機械学習のデータリーク検出にどう応用できるかを整理する

カナリアトラップとは

  • カナリアトラップは、情報の漏洩元を特定するための対諜報技術
  • 同じ文書の内容を少しずつ変えた複数のバージョンを、それぞれ別の関係者に配り、どのバージョンが外部に流出したかを見ることで、漏洩元を特定する
  • この名前自体はTom Clancyの小説『Patriot Games』(1987年)で広まったが、手法自体はそれ以前から使われており、英国の情報機関MI5では「バリウム検査(barium meal test)」という、医療の造影剤検査にちなんだ別名で呼ばれていた
  • 実際に使われた例として、以下のようなものがある
時期事例
1980年代映画『スタートレックIII』のプロデューサーHarve Bennettが、脚本の各コピーに異なる識別情報を埋め込み、Gene Roddenberryを漏洩元として特定した
2008年Teslaのイーロン・マスクが、社内メールの文面を少しずつ変えて配布し漏洩元を特定しようとしたが、顧問弁護士が自分用に配布したバージョンによって失敗した
2019年Coleen Rooneyが、自身のInstagramの投稿を少しずつ変えて非公開ストーリーで流し、タブロイド紙にリークしていた人物を特定した(後に「Wagatha Christie」事件として知られる訴訟に発展)
2023年Appleが、社員ごとに異なる社内リリース予定日を伝えることで、情報漏洩元の社員を特定した
  • 共通しているのは、「本物と見分けがつかないが、個体ごとに微妙に異なる情報」を仕込み、どの変種が漏れたかによって漏洩元を逆算するという考え方

機械学習におけるデータリークの3つの観点

  • カナリアトラップを機械学習に応用する前に、そもそも機械学習のデータリークにどんな種類があるかを整理しておく
  • 大きく3つの観点に分けられる
観点代表的なリーク例
データの分離Train/Test混入、重複、グループ間リーク同じ患者のデータがTrainとTestの両方に存在する
情報の時間・因果関係Target Leakage、Future Leakage予測時点ではまだ分からない情報を特徴量として使ってしまう
評価プロセス前処理リーク、モデル選択リーク正規化やハイパーパラメータ調整に、本来使ってはいけないTestデータを使ってしまう
  • さらに、LLM(大規模言語モデル)では、事前学習データへのベンチマークデータの混入(コンタミネーション)や、個々の訓練サンプルの意図しない記憶(Memorization)も、同種の問題として扱われる
  • これらは発生する場所も原因も異なるため、1種類の検査だけで全てを暴くのは難しい

ニューラルネットの意図しない記憶を暴く: The Secret Sharer

  • カナリアトラップの考え方を、ニューラルネットの意図しない記憶(Unintended Memorization)の検出に応用した研究として、Carlini et al. (2019) “The Secret Sharer: Evaluating and Testing Unintended Memorization in Neural Networks"がある
  • この手法では、本来の学習タスクとは無関係な、人工的な「カナリア」を訓練データに混入させ、学習後のモデルがそれをどれだけ覚えてしまったかを測定する

カナリアの作り方

  • カナリアは、「穴」を含むフォーマット文字列$s$と、その穴を埋める候補の集合(ランダム性の空間)$\mathcal{R}$から作られる
  • 例えば、$s=$「The random number is 」というフォーマットに対し、$\hat{r}$という値を1つ選んで埋めた$s[\hat{r}]=$「The random number is 281265017」が、1つの具体的なカナリアになる
  • 実際の実験では、クレジットカード番号のような「本来学習に不要で、覚えてしまうと困る」形式の文字列が使われ、挿入回数も1回〜10,000回まで変化させて、記憶のされ方がどう変わるかを調べている

exposureという指標

  • 学習後のモデル$\theta$が、あるカナリア$s[r]$をどれだけ覚えているかは、同じフォーマットの他の候補と比べたパープレキシティの順位(rank)で測る
  • 以下、候補集合$\mathcal{R}$の中で、$s[r]$以下のパープレキシティを持つ候補の個数を、rankとして定義する
$$ \text{rank}_\theta(s[r]) = |\{r' \in \mathcal{R} : P_{x_\theta}(s[r']) \leq P_{x_\theta}(s[r])\}| $$
  • このrankを使い、exposureという指標を以下のように定義する
$$ \text{exposure}_\theta(s[r]) = \log_2|\mathcal{R}| - \log_2 \text{rank}_\theta(s[r]) $$
  • exposureは0から$\log_2|\mathcal{R}|$までの値を取り、何も記憶していなければrankは候補集合のほぼ中央に来るため、exposureの中央値はおよそ1になる
  • 逆に、モデルがそのカナリアを強く記憶していれば、rankが1に近づき、exposureが最大値に近づく。論文では、exposureが$\log_2|\mathcal{R}|$を超えると、最短路探索的なアルゴリズムで実際にそのカナリアを抽出できることも示されている
  • この手法は、Googleの文章自動補完サービスSmart Composeにも適用され、実際にユーザーの入力したクレジットカード番号などが、意図せず記憶されうることが確認されている

ベンチマーク汚染を暴くカナリア: BIG-benchの例

  • カナリアは、個々のモデルの記憶を調べるだけでなく、LLMの事前学習データに特定のベンチマークデータが紛れ込んでいないかを調べる(コンタミネーション検出)用途にも使われている
  • 大規模言語モデルの評価用ベンチマークBIG-benchでは、全てのタスクファイル(README.md・task.jsonなど)に、編集してはいけない「canary」という文字列(固定のGUID)を埋め込む規約がある
  • これは、Web上のテキストを収集して学習データを作る際に、このGUIDを含むページをクロール対象から除外してもらう(オプトアウトする)ことを目的としている
  • 仕組みとしては、仮にこのGUIDを含むベンチマークデータがそのまま学習データに混入していた場合、学習後のモデルにこのGUIDやその周辺のタスク内容を補完・再現させることで、事後的にコンタミネーションを検出できる、という設計になっている
  • この規約は、BIG-bench以降に作られた他の多くのベンチマークでも踏襲されており、「ベンチマークタスクに固定の識別文字列を埋め込んでおく」という、カナリアトラップと同じ発想がLLMの評価分野に定着している

カナリアの反応設計: ここからは自分の考察

  • ここまでは、文献・リポジトリで確認できる話だったが、以降は自分なりの考察
  • 重要なのは、リークの種類ごとに、カナリアが反応する仕組みを設計し分けなければならないという点
  • 例えば、ランダムラベルを使ったカナリア(通常のパターンとは無関係なラベルを一部のサンプルに付与する)は、ラベル情報のTrain/Test混入には反応する可能性があるが、Future Leakageのような時間的な情報混入や、前処理リークには反応しないことがある
  • つまり、前述の3つの観点(データの分離・情報の時間・因果関係・評価プロセス)それぞれに対応する、別種のカナリアを用意する必要がある

Canary-based Leakage Audit

  • 自分が面白いと思う研究方向は、単一のカナリアではなく、複数種類のカナリアを学習パイプラインの各段階に仕込み、パイプライン全体を検査するCanary-based Leakage Auditという考え方
  • これは、単にリークの有無を判定するだけでなく、どの経路でリークが発生した可能性が高いかまで診断しようとする発想
  • 例えば、前処理の段階に仕込んだカナリアだけが反応し、ラベルの段階に仕込んだカナリアは反応しない、という場合、前処理のどこかでTestデータが混入したことが推測できる

データが漏れたかとモデルが利用したかの区別

  • もう1つ重要な区別は、「データが漏れたか」と「モデルが漏れた情報を利用したか」を分けて検証すること
  • データが漏れたかは、データの処理履歴やアクセスログを辿ることで、パイプライン上の事実として検証できる
  • モデルが漏れた情報を利用したかは、カナリアへの反応(exposureのような指標)や、カナリアを混入・除去したときの予測の変化を見ることで検証できる
  • この2つを組み合わせることで、「データとしては混入していたが、モデルはそれを学習に使っていなかった」というケースと、「実際に学習・予測に使われてしまった」というケースを区別できる、より強い評価になる

精度ではなく、専用の検査信号で見る

  • DNN(深層ニューラルネットワーク)のようにブラックボックス性が高いモデルほど、精度が不自然に高いことをリークの証拠として扱うのではなく、リークが起きたときだけ反応する検査用の信号(カナリア)をあらかじめ設計しておくという考え方が重要だと思う
  • 精度は、リーク以外の要因(データ量、モデルの性能向上など)でも上下するため、単独ではリークの証拠にならない
  • 一方、カナリアは「学習タスクには本来無関係」なものとして設計されているため、それに対する反応があれば、リーク以外の説明が難しくなる

まとめ

  • カナリアトラップは、本来は漏洩元を特定するための対諜報技術で、個体ごとに微妙に異なる情報を仕込み、どの変種が漏れたかから漏洩元を逆算する
  • 機械学習のデータリークは、データの分離・情報の時間・因果関係・評価プロセスという3つの観点に分けられ、LLMでは事前学習データの汚染・記憶も同種の問題になる
  • Carlini et al. (2019)のThe Secret Sharerは、カナリア(本来のタスクに無関係な人工的な文字列)を訓練データに混入し、パープレキシティのrankから計算するexposureという指標で、ニューラルネットの意図しない記憶を定量化した
  • BIG-benchのように、ベンチマークのタスクファイルに固定のcanary文字列を埋め込み、LLMの事前学習データへのベンチマーク混入を事後的に検出する、という応用も実際に使われている
  • リークの種類ごとにカナリアが反応する仕組みを設計し分ける必要があり、複数種類のカナリアでパイプライン全体を検査するCanary-based Leakage Auditや、データが漏れたかとモデルが利用したかを区別する評価、精度ではなく専用の検査信号でリークを判定する考え方は、自分なりの考察として今後深めていきたい方向性

参考文献

Built with Hugo
テーマ Stack は Jimmy によって設計されています。