ดูบน TensorFlow.org | ทำงานใน Google Colab | ดูแหล่งที่มาบน GitHub | ดาวน์โหลดโน๊ตบุ๊ค |
ภาพรวม
ความแตกต่างของความเป็นส่วนตัว (DP) เป็นกรอบสำหรับการวัดการค้ำประกันความเป็นส่วนตัวที่มีให้โดยขั้นตอนวิธีการอื่น คุณสามารถออกแบบอัลกอริธึมแมชชีนเลิร์นนิงที่ฝึกโมเดลบนข้อมูลส่วนตัวอย่างมีความรับผิดชอบผ่านเลนส์ของความแตกต่างของความเป็นส่วนตัว การเรียนรู้ด้วยความเป็นส่วนตัวที่แตกต่างกันให้การรับประกันความเป็นส่วนตัวที่วัดได้ ช่วยลดความเสี่ยงในการเปิดเผยข้อมูลการฝึกอบรมที่ละเอียดอ่อนในการเรียนรู้ของเครื่อง ตามสัญชาตญาณแล้ว โมเดลที่ได้รับการฝึกด้วยความเป็นส่วนตัวที่แตกต่างกันไม่ควรได้รับผลกระทบจากตัวอย่างการฝึกอบรมเดี่ยวๆ หรือตัวอย่างการฝึกอบรมชุดเล็กๆ ในชุดข้อมูล ซึ่งช่วยลดความเสี่ยงในการเปิดเผยข้อมูลการฝึกที่ละเอียดอ่อนใน ML
แนวคิดพื้นฐานของแนวทางนี้ เรียกว่า differentially private stochastic gradient descent (DP-SGD) คือการปรับเปลี่ยนการไล่ระดับสีที่ใช้ใน stochastic gradient descent (SGD) ซึ่งอยู่ที่แกนหลักของอัลกอริธึมการเรียนรู้เชิงลึกเกือบทั้งหมด โมเดลที่ได้รับการฝึกอบรมด้วย DP-SGD ให้การรับประกันความเป็นส่วนตัวที่แตกต่างกันสำหรับข้อมูลที่ป้อนเข้า มีการปรับเปลี่ยนอัลกอริธึม SGD วานิลลาสองแบบ:
- ขั้นแรก ความไวของการไล่ระดับสีแต่ละครั้งต้องถูกจำกัด กล่าวอีกนัยหนึ่ง คุณต้องจำกัดจำนวนจุดการฝึกแต่ละจุดสุ่มตัวอย่างในมินิแบตช์ที่สามารถส่งผลต่อการคำนวณแบบเกรเดียนต์และการอัปเดตผลลัพธ์ที่ใช้กับพารามิเตอร์โมเดล ซึ่งสามารถทำได้โดยการตัดแต่ละลาดคำนวณในประเด็นการฝึกอบรมแต่ละ
- สุ่มเสียงเป็นตัวอย่างและเพิ่มไปยังการไล่ระดับสีตัดที่จะทำให้มันเป็นไปไม่ได้ทางสถิติที่จะรู้หรือไม่ว่าจุดข้อมูลเฉพาะถูกรวมอยู่ในชุดฝึกอบรมโดยการเปรียบเทียบการปรับปรุง SGD ใช้เมื่อจะดำเนินการมีหรือไม่มีจุดข้อมูลนี้โดยเฉพาะในชุดการฝึกอบรม .
นี้ใช้กวดวิชา tf.keras ในการฝึกอบรมเครือข่ายประสาทสับสน (CNN) ที่จะรับรู้ตัวเลขที่เขียนด้วยลายมือกับเพิ่มประสิทธิภาพ DP-SGD ให้โดยห้องสมุดความเป็นส่วนตัว TensorFlow TensorFlow Privacy มีโค้ดที่รวมเครื่องมือเพิ่มประสิทธิภาพ TensorFlow ที่มีอยู่เพื่อสร้างตัวแปรที่ใช้ DP-SGD
ติดตั้ง
เริ่มต้นด้วยการนำเข้าไลบรารีที่จำเป็น:
import tensorflow as tf
tf.compat.v1.disable_v2_behavior()
import numpy as np
tf.get_logger().setLevel('ERROR')
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/compat/v2_compat.py:101: disable_resource_variables (from tensorflow.python.ops.variable_scope) is deprecated and will be removed in a future version. Instructions for updating: non-resource variables are not supported in the long term
ติดตั้งความเป็นส่วนตัว TensorFlow
pip install tensorflow-privacy
import tensorflow_privacy
from tensorflow_privacy.privacy.analysis import compute_dp_sgd_privacy
โหลดและประมวลผลชุดข้อมูลล่วงหน้า
โหลด MNIST ชุดข้อมูลและเตรียมข้อมูลสำหรับการฝึกอบรม
train, test = tf.keras.datasets.mnist.load_data()
train_data, train_labels = train
test_data, test_labels = test
train_data = np.array(train_data, dtype=np.float32) / 255
test_data = np.array(test_data, dtype=np.float32) / 255
train_data = train_data.reshape(train_data.shape[0], 28, 28, 1)
test_data = test_data.reshape(test_data.shape[0], 28, 28, 1)
train_labels = np.array(train_labels, dtype=np.int32)
test_labels = np.array(test_labels, dtype=np.int32)
train_labels = tf.keras.utils.to_categorical(train_labels, num_classes=10)
test_labels = tf.keras.utils.to_categorical(test_labels, num_classes=10)
assert train_data.min() == 0.
assert train_data.max() == 1.
assert test_data.min() == 0.
assert test_data.max() == 1.
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz 11493376/11490434 [==============================] - 0s 0us/step 11501568/11490434 [==============================] - 0s 0us/step
กำหนดไฮเปอร์พารามิเตอร์
ตั้งค่าการเรียนรู้โมเดลไฮเปอร์พารามิเตอร์
epochs = 3
batch_size = 250
DP-SGD มีไฮเปอร์พารามิเตอร์เฉพาะความเป็นส่วนตัวสามรายการและไฮเปอร์อะเมเตอร์ที่มีอยู่หนึ่งรายการที่คุณต้องปรับแต่ง:
-
l2_norm_clip
(float) - สูงสุดยุคลิด (L2) บรรทัดฐานของแต่ละการไล่ระดับสีที่ใช้กับพารามิเตอร์แบบปรับปรุง ไฮเปอร์พารามิเตอร์นี้ใช้เพื่อเชื่อมโยงความไวของเครื่องมือเพิ่มประสิทธิภาพกับจุดการฝึกอบรมแต่ละรายการ -
noise_multiplier
(float) - จำนวนเสียงตัวอย่างและเพิ่มไปยังการไล่ระดับสีระหว่างการฝึกอบรม โดยทั่วไป เสียงรบกวนที่มากขึ้นส่งผลให้มีความเป็นส่วนตัวดีขึ้น (บ่อยครั้งแต่ไม่จำเป็นเพราะเสียค่าสาธารณูปโภคที่ต่ำกว่า) -
microbatches
(int) - ชุดของข้อมูลแต่ละครั้งจะถูกแบ่งออกเป็นหน่วยที่เล็กที่เรียกว่า microbatches โดยค่าเริ่มต้น แต่ละ microbatch ควรมีตัวอย่างการฝึกอบรมเดียว ซึ่งช่วยให้เราสามารถตัดการไล่ระดับสีตามตัวอย่าง แทนที่จะใช้ค่าเฉลี่ยในมินิแบตช์ สิ่งนี้จะลดผลกระทบ (เชิงลบ) ของการตัดสัญญาณที่พบในการไล่ระดับสีและโดยทั่วไปจะเพิ่มอรรถประโยชน์สูงสุด อย่างไรก็ตาม ค่าโสหุ้ยในการคำนวณสามารถลดลงได้โดยการเพิ่มขนาดของไมโครแบตช์เพื่อรวมตัวอย่างการฝึกมากกว่าหนึ่งตัวอย่าง จากนั้นตัดการไล่ระดับสีเฉลี่ยในตัวอย่างการฝึกหลายๆ ตัวอย่างเหล่านี้ จำนวนตัวอย่างทั้งหมดที่ใช้ในชุดงาน กล่าวคือ หนึ่งขั้นของการลงระดับแบบเกรเดียนท์ ยังคงเท่าเดิม จำนวนไมโครแบตช์ควรแบ่งขนาดแบทช์เท่าๆ กัน -
learning_rate
(float) - hyperparameter นี้มีอยู่แล้วในวานิลลา SGD ยิ่งอัตราการเรียนรู้สูง การอัปเดตแต่ละครั้งก็ยิ่งมีความสำคัญมากขึ้นเท่านั้น หากการอัปเดตมีเสียงรบกวน (เช่น เมื่อสัญญาณรบกวนเพิ่มเติมมีขนาดใหญ่เมื่อเทียบกับเกณฑ์การตัด) อัตราการเรียนรู้ที่ต่ำอาจช่วยให้ขั้นตอนการฝึกอบรมมาบรรจบกัน
ใช้ค่าไฮเปอร์พารามิเตอร์ด้านล่างเพื่อให้ได้แบบจำลองที่ถูกต้องเหมาะสม (ความแม่นยำในการทดสอบ 95%):
l2_norm_clip = 1.5
noise_multiplier = 1.3
num_microbatches = 250
learning_rate = 0.25
if batch_size % num_microbatches != 0:
raise ValueError('Batch size should be an integer multiple of the number of microbatches')
สร้างแบบจำลอง
กำหนดโครงข่ายประสาทเทียมเป็นรูปแบบการเรียนรู้
model = 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)
])
กำหนดฟังก์ชันเพิ่มประสิทธิภาพและการสูญเสียสำหรับรูปแบบการเรียนรู้ คำนวณการสูญเสียเป็นเวกเตอร์ของการสูญเสียต่อตัวอย่าง แทนที่จะเป็นค่าเฉลี่ยในมินิแบตช์ เพื่อรองรับการปรับการไล่ระดับบนจุดฝึกอบรมแต่ละจุด
optimizer = tensorflow_privacy.DPKerasSGDOptimizer(
l2_norm_clip=l2_norm_clip,
noise_multiplier=noise_multiplier,
num_microbatches=num_microbatches,
learning_rate=learning_rate)
loss = tf.keras.losses.CategoricalCrossentropy(
from_logits=True, reduction=tf.losses.Reduction.NONE)
ฝึกโมเดล
model.compile(optimizer=optimizer, loss=loss, metrics=['accuracy'])
model.fit(train_data, train_labels,
epochs=epochs,
validation_data=(test_data, test_labels),
batch_size=batch_size)
Train on 60000 samples, validate on 10000 samples Epoch 1/3 60000/60000 [==============================] - ETA: 0s - loss: 1.0431 - acc: 0.6637 /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/keras/engine/training.py:2470: UserWarning: `Model.state_updates` will be removed in a future version. This property should not be used in TensorFlow 2.0, as `updates` are applied automatically. warnings.warn('`Model.state_updates` will be removed in a future version. ' 60000/60000 [==============================] - 93s 2ms/sample - loss: 1.0431 - acc: 0.6637 - val_loss: 0.4862 - val_acc: 0.8606 Epoch 2/3 60000/60000 [==============================] - 67s 1ms/sample - loss: 0.4733 - acc: 0.8779 - val_loss: 0.3887 - val_acc: 0.9063 Epoch 3/3 60000/60000 [==============================] - 67s 1ms/sample - loss: 0.4061 - acc: 0.9094 - val_loss: 0.3532 - val_acc: 0.9258 <keras.callbacks.History at 0x7f0bc449ffd0>
วัดความแตกต่างการรับประกันความเป็นส่วนตัว
ทำการวิเคราะห์ความเป็นส่วนตัวเพื่อวัดการรับประกัน DP ที่ทำได้โดยอัลกอริธึมการฝึกอบรม การทราบระดับของ DP ที่บรรลุได้ช่วยให้สามารถเปรียบเทียบวัตถุประสงค์ของการฝึกสองครั้งเพื่อกำหนดว่าทั้งสองวิธีใดเป็นการรักษาความเป็นส่วนตัวมากกว่า ในระดับสูง การวิเคราะห์ความเป็นส่วนตัวจะวัดว่าผู้เป็นศัตรูสามารถปรับปรุงการคาดเดาเกี่ยวกับคุณสมบัติของจุดการฝึกอบรมแต่ละจุดได้มากเพียงใด โดยสังเกตผลลัพธ์ของขั้นตอนการฝึกอบรม (เช่น การอัปเดตแบบจำลองและพารามิเตอร์)
การรับประกันนี้บางครั้งเรียกว่างบประมาณความเป็นส่วนตัว งบประมาณด้านความเป็นส่วนตัวที่ต่ำลงจะทำให้ฝ่ายตรงข้ามปรับปรุงการคาดเดาได้แน่นขึ้น สิ่งนี้รับประกันความเป็นส่วนตัวที่แข็งแกร่งยิ่งขึ้น ตามสัญชาตญาณ นี่เป็นเพราะยากที่จุดฝึกอบรมจุดเดียวส่งผลต่อผลลัพธ์ของการเรียนรู้: ตัวอย่างเช่น ข้อมูลที่อยู่ในจุดฝึกอบรมไม่สามารถจดจำโดยอัลกอริทึม ML และความเป็นส่วนตัวของบุคคลที่มีส่วนสนับสนุนจุดการฝึกอบรมนี้เพื่อ ชุดข้อมูลถูกเก็บรักษาไว้
ในการกวดวิชานี้การวิเคราะห์ความเป็นส่วนตัวจะดำเนินการในกรอบของRényiความแตกต่างส่วนบุคคล (RDP) ซึ่งเป็นการผ่อนคลายของ DP บริสุทธิ์บนพื้นฐานของ บทความนี้ ที่เหมาะอย่างยิ่งสำหรับ DP-SGD
เมตริก 2 รายการใช้เพื่อแสดงการรับประกัน DP ของอัลกอริธึม ML:
- เดลต้า (\(\delta\)) - ช่วยเชื่อมความน่าจะเป็นของการรับประกันความเป็นส่วนตัวที่ไม่ได้ถือ หลักการทั่วไปคือตั้งค่าให้น้อยกว่าค่าผกผันของขนาดชุดข้อมูลการฝึก ในการกวดวิชานี้จะถูกตั้งค่าเป็น 10 ^ -5 เป็นชุดข้อมูลที่ MNIST มี 60,000 จุดฝึกอบรม
- Epsilon (\(\epsilon\)) - นี้เป็นงบประมาณความเป็นส่วนตัว โดยจะวัดความแข็งแกร่งของการรับประกันความเป็นส่วนตัวโดยจำกัดความน่าจะเป็นของผลลัพธ์ของโมเดลหนึ่งๆ ที่สามารถเปลี่ยนแปลงได้โดยรวม (หรือไม่รวม) จุดฝึกอบรมเพียงจุดเดียว ค่าขนาดเล็กสำหรับ \(\epsilon\) หมายถึงการรับประกันความเป็นส่วนตัวดีกว่า อย่างไรก็ตาม \(\epsilon\) ค่าเป็นเพียงการผูกไว้บนและค่าขนาดใหญ่สามารถความเป็นส่วนตัวที่ดียังคงมีค่าเฉลี่ยในการปฏิบัติ
Tensorflow ความเป็นส่วนตัวให้เครื่องมือ, compute_dp_sgd_privacy
, การคำนวณค่าของ \(\epsilon\) กำหนดค่าคงที่ของ \(\delta\) และ hyperparameters ต่อไปนี้จากกระบวนการฝึกอบรม:
-
n
n -
batch_size
-
noise_multiplier
- จำนวนของ
epochs
ของการฝึกอบรม
compute_dp_sgd_privacy.compute_dp_sgd_privacy(n=train_data.shape[0],
batch_size=batch_size,
noise_multiplier=noise_multiplier,
epochs=epochs,
delta=1e-5)
DP-SGD with sampling rate = 0.417% and noise_multiplier = 1.3 iterated over 720 steps satisfies differential privacy with eps = 0.563 and delta = 1e-05. The optimal RDP order is 18.0. (0.5631726490328062, 18.0)
รายงานว่าสำหรับเครื่องมือ hyperparameters ที่เลือกข้างต้นรูปแบบการฝึกอบรมมี \(\epsilon\) มูลค่า 1.18
สรุป
ในบทช่วยสอนนี้ คุณได้เรียนรู้เกี่ยวกับความแตกต่างของความเป็นส่วนตัว (DP) และวิธีที่คุณสามารถใช้หลักการ DP ในอัลกอริธึม ML ที่มีอยู่เพื่อให้การรับประกันความเป็นส่วนตัวสำหรับข้อมูลการฝึกอบรม โดยเฉพาะอย่างยิ่ง คุณได้เรียนรู้วิธี:
- รวมเครื่องมือเพิ่มประสิทธิภาพที่มีอยู่ (เช่น SGD, Adam) ให้เป็นคู่ส่วนตัวที่แตกต่างกันโดยใช้ TensorFlow Privacy
- ปรับแต่งไฮเปอร์พารามิเตอร์ที่แนะนำโดยการเรียนรู้ของเครื่องส่วนตัวที่แตกต่างกัน
- วัดการรับประกันความเป็นส่วนตัวที่ให้ไว้โดยใช้เครื่องมือวิเคราะห์ที่รวมอยู่ใน TensorFlow Privacy