TensorFlow.org에서 보기 | Google Colab에서 실행 | GitHub에서 소스 보기 | 노트북 다운로드 |
개요
차동 프라이버시 (DP)의 알고리즘에 의해 제공되는 프라이버시의 보장을 측정하기위한 프레임 워크이다. 차등 개인 정보 보호의 렌즈를 통해 개인 데이터에 대해 책임감 있게 모델을 훈련하는 기계 학습 알고리즘을 설계할 수 있습니다. 차등 프라이버시를 통한 학습은 측정 가능한 프라이버시 보장을 제공하여 머신 러닝에서 민감한 훈련 데이터가 노출될 위험을 완화하는 데 도움이 됩니다. 직관적으로, 차등 프라이버시로 훈련된 모델은 데이터 세트에서 단일 훈련 예제 또는 작은 훈련 예제 세트의 영향을 받아서는 안 됩니다. 이렇게 하면 ML에서 민감한 교육 데이터가 노출될 위험을 줄이는 데 도움이 됩니다.
DP-SGD(Differentially private stochastic gradient descent)라고 하는 이 접근 방식의 기본 아이디어는 거의 모든 딥 러닝 알고리즘의 핵심인 SGD(stochastic gradient descent)에 사용되는 기울기를 수정하는 것입니다. DP-SGD로 훈련된 모델은 입력 데이터에 대해 입증 가능한 차등 프라이버시 보장을 제공합니다. 바닐라 SGD 알고리즘에는 두 가지 수정 사항이 있습니다.
- 먼저 각 그래디언트의 감도를 경계해야 합니다. 즉, 미니배치에서 샘플링된 각 개별 훈련 포인트가 기울기 계산 및 모델 매개변수에 적용되는 결과 업데이트에 영향을 미칠 수 있는 정도를 제한해야 합니다. 이것은 각각의 교육 포인트에 계산 된 각각의 기울기를 클리핑하여 수행 할 수 있습니다.
- 랜덤 노이즈가 또는 훈련 데이터 집합이 특정 데이터 포인트없이 동작 할 때 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개의 기존 하이퍼매개변수가 있습니다.
-
l2_norm_clip
(플로트) - 업데이트 모델 파라미터에 적용되는 각각의 그래디언트의 최대 유클리드 (L2) 표준. 이 하이퍼파라미터는 옵티마이저의 민감도를 개별 훈련 포인트에 제한하는 데 사용됩니다. -
noise_multiplier
(플로트) - 샘플링 된 훈련 중에 구배에 부가 잡음의 양. 일반적으로 소음이 많을수록 사생활 보호가 향상됩니다(반드시 그렇지는 않지만 유틸리티가 낮아짐). -
microbatches
(INT)는 - 데이터의 각 배치는 microbatches라는 작은 단위로 분할됩니다. 기본적으로 각 마이크로 배치에는 단일 훈련 예제가 포함되어야 합니다. 이를 통해 미니배치 전체에서 평균을 낸 후가 아니라 예제별로 그라디언트를 자를 수 있습니다. 이것은 차례로 그라디언트에서 발견된 신호에 대한 클리핑의 (부정적인) 효과를 감소시키고 일반적으로 효용을 최대화합니다. 그러나 둘 이상의 훈련 예제를 포함하도록 마이크로배치의 크기를 늘리면 계산 오버헤드를 줄일 수 있습니다. 그런 다음 이러한 여러 훈련 예제의 평균 기울기가 잘립니다. 한 배치, 즉 경사하강법의 한 단계에서 소비되는 예제의 총 수는 동일하게 유지됩니다. 마이크로배치의 수는 배치 크기를 균등하게 나누어야 합니다. -
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 보장을 표현하는 데 두 가지 측정항목이 사용됩니다.
- 델타 (\(\delta\)) - 유지하지 프라이버시 보장의 가능성을 경계입니다. 경험적 규칙은 훈련 데이터 세트 크기의 역수보다 작게 설정하는 것입니다. 이 가이드에서, 10으로 설정 ^ -5 MNIST 데이터 세트는 60,000 트레이닝 점을 가지고있다.
- 엡실론 (\(\epsilon\)) -이 개인 정보 보호 예산이다. 단일 훈련 포인트를 포함(또는 제외)하여 특정 모델 출력의 확률이 얼마나 달라질 수 있는지 경계를 지정하여 개인 정보 보호 보장의 강도를 측정합니다. 에 대한 작은 값 \(\epsilon\) 더 나은 개인 정보 보호 보장을 의미한다. 그러나, \(\epsilon\) 값은 단지가 상한이며, 큰 값 수 실제로는 여전히 평균 좋은 개인 정보 보호.
Tensorflow 프라이버시 도구 제공 compute_dp_sgd_privacy
값 계산하기 \(\epsilon\) 의 고정 값 지정 \(\delta\) 상기 훈련 프로세스에서 다음 하이퍼 파라미터를 :
- 훈련 데이터 포인트의 총 수,
n
. -
batch_size
. -
noise_multiplier
. - 수
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에 포함된 분석 도구를 사용하여 제공되는 개인정보 보호 보장 측정