機械学習における Privacy について、TensorFlow Privacy を例に調査しまとめた資料です。Money Forward 社内で開かれた MLOps についての勉強会のために作成しました。
Introduction to TensorFlow PrivacyAsei Sugiyama
View Slide
まとめDifferential Privacy は Privacy の概念を形式的に定義したもので、個別のデータに推論結果が依存する度合いに制限を加えたものDPSGD (Differential Private SGD) は SGD を拡張したもので、勾配に正則化とノイズ付加を行うものTensorFlow Privacy を用いることで DPSGD を Keras の API で実装できるDPSGD については高速化や Fairness とのトレードオフなどの研究が進行中
TOCDifferential Privacy <-TensorFlow Privacy発展的な話題
Differential Privacy問題提起Differential Privacy の定義Differentially Private SGD
問題提起言語の生成モデルにおいて発見された問題データセットに個人番号があった場合、その番号が生成されてしまうPenn Treebank dataset に意図的に個人番号を混入させたところ、たしかにその番号が生成された[1802.08232] The Secret Sharer: Evaluating and Testing Unintended Memorization in NeuralNetworks
Differential Privacy の定義Differential Privacy: A Survey of Results
Differential Privacy の解釈 (1/2)「高々1要素だけ異なるデータベースからある値の出力される確率 (密度) の対数の-距離が で抑えられる」のときには全く確率が変わらないL1 ϵϵ = 0注目のプライバシー Differential Privacy
Differential Privacy の解釈 (2/2)差分プライバシーとは何か? (定義 & 解釈編) というスライドがわかりやすいのでオススメ差分プライバシーとは何か? (定義 & 解釈編)
Differentially Private SGD (1/2)Membership inference attack against differentially private deep learning model.
Differentially Private SGD(2/2)SGD における勾配の大きさを制限勾配に正規分布などの確率分布からの出力をノイズとして付加Membership inference attack against differentially private deep learningmodel.
日本語による解説Idein によるブログ記事が公開されている記述がわかりやすくオススメ引用元の資料を確認しやすいIdein Ideas — 機械学習におけるDifferential Privacyについて
TOCDifferential PrivacyTensorFlow Privacy <-発展的な話題
TensorFlow Privacy設計方針使い方
設計方針実装者は差分プライバシーの専門家ではないし、モデルのコードは大概の場合作られたあとミニバッチの作成などは既存のロジックを利用し、そのあと Privacy のための計算をする上記を踏まえて -DP を実現する(ϵ, δ)A General Approach to Adding Differential Privacy to Iterative Training Procedures
使い方 (1/3)# Load training and test data.train_data, train_labels, test_data, test_labels = load_mnist()# Define a sequential Keras modelmodel = tf.keras.Sequential([tf.keras.layers.Conv2D(16,8,strides=2,padding='same',activation='relu',input_shape=(28, 28, 1)),tf.keras.layers.MaxPool2D(2, 1),tf.keras.layers.Conv2D(32, 4, strides=2, padding='valid', activation='relu'),tf.keras.layers.MaxPool2D(2, 1),tf.keras.layers.Flatten(),tf.keras.layers.Dense(32, activation='relu'),tf.keras.layers.Dense(10)])
使い方 (2/3)Optimizer だけが通常と異なるoptimizer = DPKerasSGDOptimizer(l2_norm_clip=FLAGS.l2_norm_clip,noise_multiplier=FLAGS.noise_multiplier,num_microbatches=FLAGS.microbatches,learning_rate=FLAGS.learning_rate)# Compute vector of per-example# loss rather than its mean over a minibatch.loss = tf.keras.losses.CategoricalCrossentropy(from_logits=True, reduction=tf.losses.Reduction.NONE)# Compile model with Kerasmodel.compile(optimizer=optimizer, loss=loss, metrics=['accuracy'])
使い方 (3/3)Optimizer 以外は通常通りの Kerasmodel.fit(train_data,train_labels,epochs=FLAGS.epochs,validation_data=(test_data, test_labels),batch_size=FLAGS.batch_size)
TOCDifferential PrivacyTensorFlow Privacy発展的な話題 <-
発展的な話題DPSGD の高速化Privacy と Fairness のトレードオフ
DPSGD の高速化 (1/2)DPSGD は「通常の SGD と比較して10-100倍くらい遅い」Vectorization と JIT コンパイルによる高速化が提案されているEnabling Fast Differentially Private SGD via Just-in-Time Compilation andVectorization
DPSGD の高速化 (2/2)TensorFlow Privacy で確認 (Colab 上で GPU ありで実行)最適化前は約 90 min に対し、最適化後は 9 min (10x)Method time (total)DPKerasSGDOptimizer 1h 29min 18sVectorizedDPKerasSGDOptimizer (Vectorization) 50min 40sDPSequential (Vectorization + XLA) 8min 57stensorflow-privacy-mnist-tutorial.ipynb
Privacy と Fairness のトレードオフFairness のためにはマイノリティのデータを収集し学習することが重要Privacy を実現するためにノイズを乗せると、全体に対して少数のデータが利用されなくなるCan a Model Be Differentially Private and Fair?