طبق الخصوصية التفاضلية باستخدام خصوصية TensorFlow

عرض على TensorFlow.org تشغيل في Google Colab عرض المصدر على جيثب تحميل دفتر

ملخص

خصوصية تفاضلية (DP) هي إطار لقياس ضمانات الخصوصية التي تقدمها خوارزمية. من خلال عدسة الخصوصية التفاضلية ، يمكنك تصميم خوارزميات التعلم الآلي التي تدرب النماذج بشكل مسؤول على البيانات الخاصة. يوفر التعلم بخصوصية تفاضلية ضمانات قابلة للقياس للخصوصية ، مما يساعد على التخفيف من مخاطر الكشف عن بيانات التدريب الحساسة في التعلم الآلي. حدسيًا ، لا ينبغي أن يتأثر النموذج المدرَّب بخصوصية تفاضلية بأي مثال تدريب فردي ، أو مجموعة صغيرة من أمثلة التدريب ، في مجموعة البيانات الخاصة به. هذا يساعد في التخفيف من مخاطر الكشف عن بيانات التدريب الحساسة في ML.

الفكرة الأساسية لهذا النهج ، والتي تسمى النسب التفاضلية الخاصة بالتدرج العشوائي (DP-SGD) ، هي تعديل التدرجات المستخدمة في النسب المتدرج العشوائي (SGD) ، والتي تقع في صميم جميع خوارزميات التعلم العميق تقريبًا. توفر النماذج المدربة على DP-SGD ضمانات خصوصية تفاضلية يمكن إثباتها لبيانات الإدخال الخاصة بهم. تم إجراء تعديلين على خوارزمية Vanilla SGD:

  1. أولاً ، يجب تقييد حساسية كل تدرج. بمعنى آخر ، تحتاج إلى تحديد مدى تأثير كل نقطة تدريب فردية تم أخذ عينات منها في minibatch على حسابات التدرج والتحديثات الناتجة المطبقة على معلمات النموذج. ويمكن أن يتم ذلك من خلال لقطة كل التدرج حسابها على كل نقطة التدريب.
  2. وأخذ عينات من الضوضاء عشوائية، وأضاف إلى التدرجات قص لتجعل من المستحيل إحصائية لمعرفة ما إذا كان أو لم شمل نقطة بيانات معينة في مجموعة البيانات التدريب عن طريق مقارنة التحديثات ينطبق SGD عندما تعمل مع أو من دون هذه النقطة بيانات معينة في مجموعة البيانات التدريب .

هذه الاستخدامات تعليمي tf.keras لتدريب الشبكة العصبية التلافيف (CNN) الاعتراف الأرقام المكتوبة بخط اليد مع محسن DP-SGD التي تقدمها المكتبة الخصوصية TensorFlow. توفر خصوصية TensorFlow التعليمات البرمجية التي تغلف مُحسِّن 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

حدد المعلمات الفوقية

تعيين قيم نموذج التعلم hyperparamper.

epochs = 3
batch_size = 250

يحتوي DP-SGD على ثلاثة معلمات تشعبية خاصة بالخصوصية و hyperamater موجود يجب عليك ضبطه:

  1. l2_norm_clip (تعويم) - الحد الأقصى الإقليدية (L2) القاعدة من كل الانحدار الذي يتم تطبيقه على المعلمات نموذج التحديث. يستخدم هذا المعامل الفائق لربط حساسية المحسن بنقاط التدريب الفردية.
  2. noise_multiplier (تعويم) - مقدار الضوضاء عينات وإضافة إلى التدرجات خلال التدريب. بشكل عام ، يؤدي المزيد من الضوضاء إلى خصوصية أفضل (غالبًا ، ولكن ليس بالضرورة ، على حساب انخفاض المنفعة).
  3. microbatches (الباحث) - يتم تقسيم كل دفعة من البيانات في وحدات أصغر تسمى microbatches. بشكل افتراضي ، يجب أن يحتوي كل microbatch على مثال تدريب واحد. هذا يسمح لنا بقص التدرجات على أساس كل مثال بدلاً من بعد أن يتم حساب المتوسط ​​عبر minibatch. وهذا بدوره يقلل من التأثير (السلبي) للاقتطاع على الإشارة الموجودة في التدرج ويعظم المنفعة عادةً. ومع ذلك ، يمكن تقليل النفقات الحسابية عن طريق زيادة حجم microbatches لتشمل أكثر من مثال تدريب واحد. ثم يتم قص متوسط ​​التدرج عبر هذه الأمثلة التدريبية المتعددة. العدد الإجمالي للأمثلة المستهلكة في الدُفعة ، أي خطوة واحدة من نزول التدرج ، يظل كما هو. يجب أن يقسم عدد microbatches حجم الدفعة بالتساوي.
  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)
])

تحديد وظيفة المحسن والخسارة لنموذج التعلم. احسب الخسارة كمتجه للخسائر لكل مثال بدلاً من كونها الوسيط على minibatch لدعم معالجة التدرج فوق كل نقطة تدريب.

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 وخصوصية الفرد الذي ساهم في نقطة التدريب هذه إلى مجموعة البيانات محفوظة.

في هذا البرنامج التعليمي، أجريت التحاليل الخصوصية في إطار RENYI التفاضلية الخصوصية (RDP)، الذي هو الاسترخاء لموانئ دبي النقي على أساس هذه الورقة التي تناسب بشكل خاص ل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 الحالية لتوفير ضمانات الخصوصية لبيانات التدريب. على وجه الخصوص ، تعلمت كيفية:

  • قم بلف المحسّنين الحاليين (على سبيل المثال ، SGD ، Adam) في نظرائهم التفاضليين باستخدام خصوصية TensorFlow
  • ضبط المعلمات الفائقة التي قدمها التعلم الآلي التفاضلي الخاص
  • قم بقياس ضمان الخصوصية المقدم باستخدام أدوات التحليل المضمنة في خصوصية TensorFlow