TensorFlow গোপনীয়তার সাথে ডিফারেনশিয়াল গোপনীয়তা প্রয়োগ করুন

TensorFlow.org এ দেখুন Google Colab-এ চালান GitHub-এ উৎস দেখুন নোটবুক ডাউনলোড করুন

ওভারভিউ

ডিফারেনশিয়াল গোপনীয়তা (ডিপি) একটি আলগোরিদিম দ্বারা উপলব্ধ গোপনীয়তা গ্যারান্টী পরিমাপের জন্য একটি কাঠামো নেই। ডিফারেনশিয়াল গোপনীয়তার লেন্সের মাধ্যমে, আপনি মেশিন লার্নিং অ্যালগরিদমগুলি ডিজাইন করতে পারেন যা ব্যক্তিগত ডেটাতে মডেলগুলিকে দায়িত্বের সাথে প্রশিক্ষণ দেয়৷ ডিফারেনশিয়াল গোপনীয়তার সাথে শেখা গোপনীয়তার পরিমাপযোগ্য গ্যারান্টি প্রদান করে, যা মেশিন লার্নিং-এ সংবেদনশীল প্রশিক্ষণ ডেটা প্রকাশের ঝুঁকি কমাতে সাহায্য করে। স্বজ্ঞাতভাবে, ডিফারেনশিয়াল গোপনীয়তার সাথে প্রশিক্ষিত একটি মডেল তার ডেটা সেটে কোনো একক প্রশিক্ষণ উদাহরণ, বা ছোট প্রশিক্ষণ উদাহরণ দ্বারা প্রভাবিত হওয়া উচিত নয়। এটি এমএল-এ সংবেদনশীল প্রশিক্ষণ ডেটা প্রকাশের ঝুঁকি কমাতে সাহায্য করে।

ডিফারেন্সিয়াল প্রাইভেট স্টোকাস্টিক গ্রেডিয়েন্ট ডিসেন্ট (ডিপি-এসজিডি) নামে পরিচিত এই পদ্ধতির মূল ধারণা হল স্টোকাস্টিক গ্রেডিয়েন্ট ডিসেন্ট (এসজিডি) তে ব্যবহৃত গ্রেডিয়েন্টগুলিকে সংশোধন করা, যা প্রায় সমস্ত গভীর শিক্ষার অ্যালগরিদমের মূলে রয়েছে। DP-SGD এর সাথে প্রশিক্ষিত মডেলগুলি তাদের ইনপুট ডেটার জন্য প্রমাণযোগ্য ডিফারেনশিয়াল গোপনীয়তার গ্যারান্টি প্রদান করে। ভ্যানিলা SGD অ্যালগরিদমে দুটি পরিবর্তন করা হয়েছে:

  1. প্রথমত, প্রতিটি গ্রেডিয়েন্টের সংবেদনশীলতাকে আবদ্ধ করা দরকার। অন্য কথায়, আপনাকে সীমিত করতে হবে যে একটি মিনিব্যাচে নমুনা নেওয়া প্রতিটি পৃথক প্রশিক্ষণ পয়েন্ট গ্রেডিয়েন্ট কম্পিউটেশন এবং মডেল প্যারামিটারগুলিতে প্রয়োগ করা ফলস্বরূপ আপডেটগুলিকে কতটা প্রভাবিত করতে পারে। এই প্রতিটি গ্রেডিয়েন্ট প্রতিটি প্রশিক্ষণ বিন্দুতে নির্ণিত ক্লিপিং দ্বারা সম্পন্ন করা যেতে পারে।
  2. রান্ডম নয়েজ নমুনা এবং যখন এটি দিয়ে বা প্রশিক্ষণের ডেটাসেটে এই বিশেষ ডাটা পয়েন্ট ছাড়াই কাজ SGD প্রযোজ্য আপডেট তুলনা করে ছাঁটা গ্রেডিয়েন্ট যোগ করা এটা পরিসংখ্যানগত অসম্ভব জানতে হোক বা না হোক একটি নির্দিষ্ট ডাটা পয়েন্ট প্রশিক্ষণ ডেটা সেটটি অন্তর্ভুক্ত করা হয় করতে হয় .

এই টিউটোরিয়ালটি ব্যবহার tf.keras একটি convolutional স্নায়ুর নেটওয়ার্ক (সিএনএন) প্রশিক্ষণের জন্য ডিপি-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

হাইপারপ্যারামিটার সংজ্ঞায়িত করুন

শেখার মডেল হাইপারপ্যারামটার মান সেট করুন।

epochs = 3
batch_size = 250

DP-SGD এর তিনটি গোপনীয়তা-নির্দিষ্ট হাইপারপ্যারামিটার এবং একটি বিদ্যমান হাইপারমেটার রয়েছে যা আপনাকে অবশ্যই টিউন করতে হবে:

  1. l2_norm_clip (ভাসা) - সর্বাধিক ইউক্লিডিয় (ও L2) প্রতিটি গ্রেডিয়েন্ট যে হালনাগাদ মডেল পরামিতি প্রয়োগ করা হয় আদর্শ। এই হাইপারপ্যারামিটারটি অপ্টিমাইজারের সংবেদনশীলতাকে পৃথক প্রশিক্ষণ পয়েন্টে আবদ্ধ করতে ব্যবহৃত হয়।
  2. noise_multiplier (ভাসা) - গোলমাল পরিমাণ নমুনা ও প্রশিক্ষণ চলাকালে গ্রেডিয়েন্ট যোগ করা হয়েছে। সাধারণত, বেশি গোলমালের ফলে ভালো গোপনীয়তা আসে (প্রায়শই, কিন্তু অগত্যা, কম ইউটিলিটির খরচে)।
  3. microbatches (int-) - তথ্য প্রত্যেকটি ব্যাচ ছোট ইউনিট 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)
])

শেখার মডেলের জন্য অপ্টিমাইজার এবং ক্ষতি ফাংশন সংজ্ঞায়িত করুন। প্রতিটি প্রশিক্ষণ পয়েন্টে গ্রেডিয়েন্ট ম্যানিপুলেশনকে সমর্থন করার জন্য একটি মিনিব্যাচের গড় হিসাবে না করে প্রতি-উদাহরণে ক্ষতির ভেক্টর হিসাবে ক্ষতি গণনা করুন।

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), যা বিশুদ্ধ উপর ভিত্তি করে ডিপি একটি শিথিলকরণ হয় সঞ্চালিত হয় এই কাগজ যে বিশেষ করে ভাল ডিপি-SGD জন্য উপযুক্ত হয়।

একটি ML অ্যালগরিদমের DP গ্যারান্টি প্রকাশ করতে দুটি মেট্রিক ব্যবহার করা হয়:

  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) সম্পর্কে শিখেছেন এবং প্রশিক্ষণের ডেটার জন্য গোপনীয়তা গ্যারান্টি প্রদান করতে বিদ্যমান ML অ্যালগরিদমগুলিতে কীভাবে আপনি DP নীতিগুলি বাস্তবায়ন করতে পারেন। বিশেষ করে, আপনি শিখেছেন কিভাবে:

  • টেনসরফ্লো প্রাইভেসি ব্যবহার করে বিদ্যমান অপ্টিমাইজার (যেমন, এসজিডি, অ্যাডাম) তাদের আলাদাভাবে প্রাইভেট পার্টনারে মোড়ানো
  • ডিফারেনশিয়ালি প্রাইভেট মেশিন লার্নিং দ্বারা প্রবর্তিত টিউন হাইপারপ্যারামিটার
  • TensorFlow গোপনীয়তায় অন্তর্ভুক্ত বিশ্লেষণ টুল ব্যবহার করে প্রদত্ত গোপনীয়তার গ্যারান্টি পরিমাপ করুন