TensorFlow Privacy로 차등 개인정보 보호 구현

TensorFlow.org에서 보기 Google Colab에서 실행 GitHub에서 소스 보기 노트북 다운로드

개요

차동 프라이버시 (DP)의 알고리즘에 의해 제공되는 프라이버시의 보장을 측정하기위한 프레임 워크이다. 차등 개인 정보 보호라는 렌즈를 통해 개인 데이터에 대해 책임감 있게 모델을 훈련시키는 기계 학습 알고리즘을 설계할 수 있습니다. 차등 프라이버시를 통한 학습은 측정 가능한 프라이버시 보장을 제공하여 머신 러닝에서 민감한 교육 데이터가 노출될 위험을 완화하는 데 도움이 됩니다. 직관적으로, 차등 프라이버시로 훈련된 모델은 데이터 세트에서 단일 훈련 예제 또는 작은 훈련 예제 세트의 영향을 받아서는 안 됩니다. 이렇게 하면 ML에서 민감한 훈련 데이터가 노출될 위험을 줄이는 데 도움이 됩니다.

DP-SGD(Differentially private stochastic gradient descent)라고 하는 이 접근 방식의 기본 아이디어는 거의 모든 딥 러닝 알고리즘의 핵심에 있는 SGD(stochastic gradient descent)에 사용되는 기울기를 수정하는 것입니다. DP-SGD로 훈련된 모델은 입력 데이터에 대해 입증 가능한 차등 프라이버시 보장을 제공합니다. 바닐라 SGD 알고리즘에는 두 가지 수정 사항이 있습니다.

  1. 먼저 각 그래디언트의 감도를 경계해야 합니다. 즉, 미니배치에서 샘플링된 각 개별 훈련 포인트가 기울기 계산 및 모델 매개변수에 적용되는 결과 업데이트에 영향을 미칠 수 있는 정도를 제한해야 합니다. 이것은 각각의 교육 포인트에 계산 된 각각의 기울기를 클리핑하여 수행 할 수 있습니다.
  2. 랜덤 노이즈가 또는 훈련 데이터 집합이 특정 데이터 포인트없이 동작 할 때 SGD가 적용되는 업데이트를 비교하여 샘플링과는 통계적으로 불가능 특정 데이터 포인트가 훈련 데이터 집합에 포함되었는지 여부를 알 수 있도록 잘린 그라디언트에 추가 .

이 가이드에 사용 tf.keras는 TensorFlow 개인 라이브러리에 의해 제공된 DP-SGD 최적화 필기 숫자를 인식하는 콘벌 루션 신경망 (CNN)을 훈련. 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에는 조정해야 하는 3개의 개인 정보 보호 하이퍼 매개변수와 1개의 기존 하이퍼 매개변수가 있습니다.

  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 알고리즘과 이 훈련 포인트를 제공한 개인의 개인 정보를 기억할 수 없습니다. 데이터 세트가 보존됩니다.

이 가이드에서, 프라이버시 분석에 기초한 순수한 DP의 이완이다 RENYI 차동 프라이버시 프레임 워크 (RDP)에서 수행 이 종이 특히 DP-SGD 적합하다.

ML 알고리즘의 DP 보장을 표현하는 데 두 가지 측정항목이 사용됩니다.

  1. Delta($\delta$) - 개인 정보 보호 보장이 유지되지 않을 확률을 제한합니다. 경험적 규칙은 훈련 데이터 세트 크기의 역수보다 작게 설정하는 것입니다. 이 가이드에서, 10으로 설정 ^ -5 MNIST 데이터 세트는 60,000 트레이닝 점을 가지고있다.
  2. Epsilon($\epsilon$) - 개인 정보 보호 예산입니다. 단일 훈련 포인트를 포함(또는 제외)함으로써 특정 모델 출력의 확률이 얼마나 달라질 수 있는지 경계를 지정하여 개인 정보 보호 보장의 강도를 측정합니다. $\epsilon$ 값이 작을수록 더 나은 개인 정보 보호가 보장됩니다. 그러나 $\epsilon$ 값은 상한선일 뿐이며 큰 값은 여전히 ​​실제로 좋은 프라이버시를 의미할 수 있습니다.

Tensorflow 개인 정보 보호 도구를 제공 compute_dp_sgd_privacy $ \ 델타 $의 고정 된 값 주어진 $ \ 엡실론 $의 가치와 교육 과정에서 다음 하이퍼 파라미터를 계산하기 :

  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) 및 교육 데이터에 대한 개인 정보 보호를 제공하기 위해 기존 ML 알고리즘에서 DP 원칙을 구현하는 방법을 배웠습니다. 특히 다음과 같은 방법을 배웠습니다.

  • TensorFlow Privacy를 사용하여 기존 옵티마이저(예: SGD, Adam)를 차등 비공개 대응으로 래핑합니다.
  • 차등 비공개 머신 러닝으로 도입된 초매개변수 조정
  • TensorFlow Privacy에 포함된 분석 도구를 사용하여 제공되는 개인정보 보호 보장 측정