В этом документе предполагается, что вы уже знакомы с дифференциальной конфиденциальностью и решили, что хотите использовать TF Privacy для реализации гарантий дифференциальной конфиденциальности в ваших моделях. Если вы не знакомы с дифференциальной конфиденциальностью, просмотрите страницу обзора . После установки TF Privacy начните, выполнив следующие действия:
1. Выберите дифференциально-частную версию существующего оптимизатора.
Если вы в настоящее время используете оптимизатор TensorFlow, вам, скорее всего, захочется выбрать оптимизатор с именем DPKeras*Optimizer
, например [ DPKerasAdamOptimizer
] в [ TF Privacy
].
При желании вы можете попробовать векторизованные оптимизаторы, такие как [ tf_privacy.VectorizedDPKerasAdamOptimizer
]. для возможного улучшения скорости (в пересчете на глобальные шаги в секунду). Было обнаружено, что использование векторизованных оптимизаторов обеспечивает нестабильное ускорение в экспериментах, но это еще не до конца изучено. Как и раньше, вы, скорее всего, захотите использовать оптимизатор, аналогичный тому, который вы используете сейчас. Эти векторизованные оптимизаторы используют оператор vectorized_map
Tensorflow, который может не работать с некоторыми другими операторами Tensorflow. Если это ваш случай, откройте вопрос в репозитории TF Privacy на GitHub .
2. Вычислите потери для входного мини-пакета.
При вычислении потерь для входного мини-пакета убедитесь, что это вектор с одной записью для каждого примера, а не агрегирует его в скаляр. Это необходимо, поскольку DP-SGD должен иметь возможность рассчитывать потери для отдельных микропартий.
3. Обучите свою модель
Обучите свою модель с помощью DP Optimizer (шаг 1) и векторизованных потерь (шаг 2). Есть два варианта сделать это:
- Передайте оптимизатор и потери в качестве аргументов
Model.compile
перед вызовомModel.fit
. - При написании пользовательского цикла обучения используйте
Optimizer.minimize()
для векторизованных потерь.
Как только это будет сделано, рекомендуется настроить гиперпараметры. Полное описание см. в руководстве по конфиденциальности классификации.
4. Настройте гиперпараметры DP-SGD.
Все оптимизаторы tf_privacy
принимают три дополнительных гиперпараметра:
-
l2_norm_clip
или \(C\) - Норма отсечения (максимальная евклидова (L2) норма каждого отдельного градиента, рассчитанная для мини-партии). -
noise_multiplier
или \(σ\) - Отношение стандартного отклонения к норме отсечения. -
num_microbatches
или \(B\) - Количество микропартий, на которые делится каждая мини-партия.
Как правило, чем ниже эффективное стандартное отклонение \(σC / B\), тем лучше производительность обученной модели по ее метрикам оценки.
Три новых гиперпараметра DP-SGD имеют следующие эффекты и компромиссы:
- Количество микропартий \(B\): Как правило, увеличение этого значения повышает полезность, поскольку снижает стандартное отклонение шума. Однако это замедлит обучение во времени.
- Норма обрезки \(C\): Поскольку стандартное отклонение шума масштабируется с\(C\), вероятно, лучше всего установить \(C\) быть некоторым квантилем (например, медианой, 75-м процентилем, 90-м процентилем) градиентных норм. Имея слишком большое значение \(C\) добавляет неоправданно большое количество шума.
- Множитель шума \(σ\): Из трех гиперпараметров степень конфиденциальности зависит только от множителя шума. Чем больше множитель шума, тем больше конфиденциальности; однако это также приводит к потере полезности.
Эти компромиссы между полезностью, конфиденциальностью и скоростью в единицах шагов в секунду суммированы здесь:
Следуйте этим советам, чтобы найти оптимальные гиперпараметры:
- Набор \(C\) в квантиль, как рекомендовано выше. Значение 1,00 часто работает хорошо.
- Набор \(B\) = 1, для максимальной скорости обучения.
- Поэкспериментируйте, чтобы найти наибольшее значение σ, которое все еще обеспечивает приемлемую полезность. Как правило, значения 0,01 или ниже работают хорошо.
- Как только подходящее значение \(σ\) найден, масштабируем оба \(B\) и \(σ\) постоянным для достижения разумного уровня конфиденциальности.