Реализуйте дифференциальную конфиденциальность с помощью TensorFlow Privacy

Посмотреть на TensorFlow.org Запускаем в Google Colab Посмотреть исходный код на GitHub Скачать блокнот

Обзор

Дифференциальный конфиденциальности (DP) , является основой для измерения приватности гарантий , предусмотренных алгоритмом. Через призму дифференциальной конфиденциальности вы можете разрабатывать алгоритмы машинного обучения, которые ответственно обучают модели на личных данных. Обучение с дифференцированной конфиденциальностью обеспечивает измеримые гарантии конфиденциальности, помогая снизить риск раскрытия конфиденциальных данных обучения при машинном обучении. Интуитивно понятно, что на модель, обученную с использованием дифференциальной конфиденциальности, не должен влиять ни один обучающий пример или небольшой набор обучающих примеров в ее наборе данных. Это помогает снизить риск раскрытия конфиденциальных данных обучения в ML.

Основная идея этого подхода, называемого дифференциально частным стохастическим градиентным спуском (DP-SGD), заключается в изменении градиентов, используемых в стохастическом градиентном спуске (SGD), который лежит в основе почти всех алгоритмов глубокого обучения. Модели, обученные с помощью DP-SGD, предоставляют доказуемые дифференциальные гарантии конфиденциальности для своих входных данных. В ванильный алгоритм SGD внесены две модификации:

  1. Во-первых, необходимо ограничить чувствительность каждого градиента. Другими словами, вам нужно ограничить, насколько каждая отдельная обучающая точка, выбранная в мини-пакете, может влиять на вычисления градиента и результирующие обновления, применяемые к параметрам модели. Это может быть сделано путем отсечения каждый градиент , вычисленный на каждой точке обучения.
  2. Случайный шум оцифровываются и добавляет к подрезанным градиентам , чтобы сделать это статистически невозможно знать , была ли конкретная точка данных , включенное в учебном наборе данных путем сравнения обновления применяется SGD , когда он работает с или без этой конкретной точки данных в обучающем наборе данных .

В этом руководстве используется tf.keras обучить сверточную нейронную сеть (CNN) , чтобы распознавать рукописные цифры с DP-синг оптимизатором , предоставляемой библиотекой конфиденциальности 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. По умолчанию каждый микропакет должен содержать один обучающий пример. Это позволяет нам обрезать градиенты для каждого примера, а не после того, как они были усреднены по мини-пакету. Это, в свою очередь, уменьшает (отрицательный) эффект ограничения сигнала, обнаруженного в градиенте, и обычно максимизирует полезность. Однако накладные расходы на вычисления можно уменьшить, увеличив размер микропакетов и включив в них более одного обучающего примера. Затем усредняется средний градиент по этим множественным обучающим примерам. Общее количество примеров, использованных в партии, т. Е. За один шаг градиентного спуска, остается неизменным. Количество микропакетов должно равномерно делить размер партии.
  4. learning_rate (поплавок) - Это гиперпараметр уже существует в ванильным синг. Чем выше скорость обучения, тем важнее каждое обновление. Если обновления являются зашумленными (например, когда аддитивный шум велик по сравнению с порогом ограничения), низкая скорость обучения может помочь сходимости процедуры обучения.

Используйте указанные ниже значения гиперпараметров, чтобы получить достаточно точную модель (точность теста 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 позволяет объективно сравнить два обучающих прогона, чтобы определить, какой из них лучше защищает конфиденциальность. На высоком уровне анализ конфиденциальности измеряет, насколько потенциальный злоумышленник может улучшить свое предположение о свойствах любой отдельной обучающей точки, наблюдая за результатом процедуры обучения (например, обновлением модели и параметрами).

Эта гарантия иногда называют бюджетом конфиденциальности. Более низкий бюджет конфиденциальности более жестко ограничивает способность злоумышленника улучшить свое предположение. Это обеспечивает более надежную гарантию конфиденциальности. Интуитивно это связано с тем, что одной тренировочной точке сложнее повлиять на результат обучения: например, информация, содержащаяся в тренировочной точке, не может быть запомнена алгоритмом машинного обучения и конфиденциальность человека, который внес эту тренировочную точку в набор данных сохраняется.

В этом учебнике, анализ конфиденциальности выполняется в рамках Реньи дифференциальной секретности (RDP), который является релаксации чистого DP , основанного на этой бумаге , что особенно хорошо подходит для DP-синг.

Для выражения гарантии DP алгоритма машинного обучения используются две метрики:

  1. Delta (\(\delta\)) - ограничивает вероятность гарантии конфиденциальности не проводит. Практическое правило - установить его меньше, чем размер, обратный размеру обучающего набора данных. В этом уроке, он установлен в 10 ^ -5 как MNIST набор данных имеет 60000 учебных пунктов.
  2. Эпсилон (\(\epsilon\)) - это бюджет конфиденциальности. Он измеряет силу гарантии конфиденциальности, ограничивая, насколько вероятность выхода конкретной модели может варьироваться путем включения (или исключения) одной точки обучения. Меньшее значение \(\epsilon\) подразумевает лучшую гарантию конфиденциальности. Тем не менее, \(\epsilon\) значение только верхняя граница и большое значение может еще среднее хорошее уединение на практике.

Tensorflow конфиденциальности предоставляет инструмент, compute_dp_sgd_privacy , чтобы вычислить значение \(\epsilon\) заданного фиксированного значения \(\delta\) и следующие гиперпараметры из процесса обучения:

  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)

Отчеты инструмента , что для гиперпараметров выбранных выше, обучена модель имеет \(\epsilon\) значение 1,18.

Резюме

В этом руководстве вы узнали о дифференциальной конфиденциальности (DP) и о том, как можно реализовать принципы DP в существующих алгоритмах машинного обучения, чтобы обеспечить гарантии конфиденциальности для данных обучения. В частности, вы научились:

  • Оберните существующие оптимизаторы (например, SGD, Adam) в их дифференциально закрытые аналоги, используя TensorFlow Privacy.
  • Настройте гиперпараметры, введенные дифференциально частным машинным обучением
  • Измерьте предоставляемую гарантию конфиденциальности с помощью инструментов анализа, включенных в TensorFlow Privacy.