با حریم خصوصی TensorFlow ، حریم خصوصی متفاوت را پیاده سازی کنید

مشاهده در TensorFlow.org در Google Colab اجرا شود مشاهده منبع در GitHub دانلود دفترچه یادداشت

بررسی اجمالی

حریم خصوصی دیفرانسیل (DP) چارچوبی برای اندازه گیری تضمین حریم خصوصی ارائه شده توسط یک الگوریتم است. از طریق لنز حریم خصوصی دیفرانسیل، می‌توانید الگوریتم‌های یادگیری ماشینی طراحی کنید که به‌طور مسئولانه مدل‌ها را روی داده‌های خصوصی آموزش می‌دهند. یادگیری با حریم خصوصی متمایز تضمین های قابل اندازه گیری از حریم خصوصی را ارائه می دهد و به کاهش خطر افشای داده های آموزشی حساس در یادگیری ماشین کمک می کند. به طور شهودی، مدلی که با حریم خصوصی متفاوت آموزش داده شده است، نباید تحت تأثیر هیچ مثال آموزشی، یا مجموعه کوچکی از نمونه‌های آموزشی، در مجموعه داده‌های خود قرار گیرد. این به کاهش خطر افشای داده های آموزشی حساس در ML کمک می کند.

ایده اصلی این رویکرد، که نزول گرادیان تصادفی خصوصی متفاوت (DP-SGD) نامیده می‌شود، اصلاح گرادیان‌های مورد استفاده در نزول گرادیان تصادفی (SGD) است، که در هسته تقریباً همه الگوریتم‌های یادگیری عمیق قرار دارد. مدل‌هایی که با DP-SGD آموزش داده شده‌اند، تضمین‌های حریم خصوصی متفاوت قابل اثبات را برای داده‌های ورودی خود ارائه می‌کنند. دو تغییر در الگوریتم وانیل SGD انجام شده است:

  1. ابتدا، حساسیت هر گرادیان باید محدود شود. به عبارت دیگر، باید محدود کنید که هر نقطه آموزشی که در یک minibatch نمونه برداری می شود چقدر می تواند بر محاسبات گرادیان و به روز رسانی های حاصل از اعمال شده روی پارامترهای مدل تأثیر بگذارد. این را می توان با قطع هر سایه محاسبه در هر نقطه آموزش انجام می شود.
  2. سر و صدا تصادفی است نمونه برداری شده و اضافه شده به شیب کوتاه به آن را از نظر آماری غیر ممکن است که آیا یا نه یک نقطه داده خاص در مجموعه داده های آموزشی گنجانده شده بود با مقایسه به روز رسانی SGD شامل زمانی که آن را با یا بدون این نقطه داده های خاص در مجموعه داده آموزش عمل .

این با استفاده از آموزش tf.keras برای آموزش شبکه عصبی کانولوشن (سی ان ان) به رسمیت شناختن رقم دست نویس با بهینه ساز 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 Privacy را نصب کنید.

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 دارای سه هایپرپارامتر مخصوص حریم خصوصی و یک هایپرامتر موجود است که باید آنها را تنظیم کنید:

  1. l2_norm_clip (شناور) - حداکثر اقلیدسی (L2) هنجار هر سایه است که به پارامترهای مدل به روز رسانی استفاده می شود. این هایپرپارامتر برای محدود کردن حساسیت بهینه ساز به نقاط آموزشی فردی استفاده می شود.
  2. noise_multiplier (شناور) - میزان سر و صدا نمونه برداری شده و در طول آموزش به شیب اضافه شده است. به طور کلی، نویز بیشتر منجر به حفظ حریم خصوصی بهتر می شود (اغلب، اما نه لزوما، به بهای استفاده پایین تر).
  3. microbatches (INT) - هر دسته از داده ها در واحدهای کوچکتر به نام microbatches تقسیم می شود. به طور پیش فرض، هر میکروبچ باید شامل یک نمونه آموزشی واحد باشد. این به ما این امکان را می‌دهد که شیب‌ها را بر اساس هر نمونه به جای پس از میانگین‌گیری آن‌ها در minibatch، برش دهیم. این به نوبه خود تأثیر (منفی) برش بر روی سیگنال موجود در گرادیان را کاهش می دهد و معمولاً مطلوبیت را به حداکثر می رساند. با این حال، سربار محاسباتی را می توان با افزایش اندازه میکروبچ ها برای گنجاندن بیش از یک مثال آموزشی کاهش داد. سپس میانگین گرادیان در این مثال‌های آموزشی متعدد بریده می‌شود. تعداد کل نمونه های مصرف شده در یک دسته، به عنوان مثال، یک مرحله نزول گرادیان، ثابت می ماند. تعداد میکروبچ ها باید به طور مساوی اندازه دسته را تقسیم کند.
  4. learning_rate (شناور) - این 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 و حریم خصوصی فردی که این نکته آموزشی را به آن کمک کرده است، حفظ کرد. مجموعه داده حفظ می شود.

در این آموزش، تجزیه و تحلیل حریم خصوصی در چارچوب رنی حفظ حریم خصوصی افتراقی (RDP)، که یک آرامش DP خالص بر اساس انجام این مقاله است که به خصوص به خوبی برای DP-SGD مناسب است.

برای بیان تضمین DP یک الگوریتم ML از دو معیار استفاده می شود:

  1. دلتا (\(\delta\)) - مرزهای احتمال تضمین حریم خصوصی نگه داشتن نیست. یک قانون کلی این است که آن را کمتر از معکوس اندازه مجموعه داده آموزشی تنظیم کنید. در این آموزش، آن است که به 10 مجموعه ^ -5 به عنوان مجموعه داده MNIST است 60،000 نقاط آموزش.
  2. اپسیلون (\(\epsilon\)) - این بودجه حریم خصوصی است. قدرت تضمین حریم خصوصی را با محدود کردن میزان احتمال تغییر خروجی یک مدل خاص با گنجاندن (یا حذف) یک نقطه آموزشی واحد اندازه گیری می کند. یک مقدار کوچکتر برای \(\epsilon\) دلالت تضمین حریم خصوصی بهتر است. با این حال، \(\epsilon\) ارزش تنها یک کران بالا و یک مقدار بزرگ هنوز هم می تواند میانگین حفظ حریم خصوصی خوب در عمل.

Tensorflow حریم فراهم می کند یک ابزار، compute_dp_sgd_privacy ، برای محاسبه ارزش \(\epsilon\) داده یک مقدار ثابت از \(\delta\) و hyperparameters زیر از روند آموزش:

  1. تعداد کل امتیاز در داده های آموزشی، n .
  2. batch_size .
  3. noise_multiplier .
  4. تعداد 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 موجود برای ارائه تضمین های حفظ حریم خصوصی برای داده های آموزشی یاد گرفتید. به طور خاص، شما یاد گرفتید که چگونه:

  • با استفاده از TensorFlow Privacy، بهینه سازهای موجود (مانند SGD، Adam) را به همتایان خصوصی متفاوت خود بپیچید.
  • فراپارامترهای معرفی شده توسط یادگیری ماشین خصوصی متفاوت را تنظیم کنید
  • ضمانت حفظ حریم خصوصی ارائه شده را با استفاده از ابزارهای تجزیه و تحلیل موجود در TensorFlow Privacy اندازه گیری کنید