В этом документе предполагается, что вы уже знакомы с дифференциальной конфиденциальностью и решили, что хотите использовать 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
или - Норма отсечения (максимальная евклидова (L2) норма каждого отдельного градиента, рассчитанная для мини-партии). -
noise_multiplier
или - Отношение стандартного отклонения к норме отсечения. -
num_microbatches
или - Количество микропартий, на которые делится каждая мини-партия.
Как правило, чем ниже эффективное стандартное отклонение , тем лучше производительность обученной модели по ее метрикам оценки.
Три новых гиперпараметра DP-SGD имеют следующие эффекты и компромиссы:
- Количество микропартий : Как правило, увеличение этого значения повышает полезность, поскольку снижает стандартное отклонение шума. Однако это замедлит обучение во времени.
- Норма обрезки : Поскольку стандартное отклонение шума масштабируется с, вероятно, лучше всего установить быть некоторым квантилем (например, медианой, 75-м процентилем, 90-м процентилем) градиентных норм. Имея слишком большое значение добавляет неоправданно большое количество шума.
- Множитель шума : Из трех гиперпараметров степень конфиденциальности зависит только от множителя шума. Чем больше множитель шума, тем больше конфиденциальности; однако это также приводит к потере полезности.
Эти компромиссы между полезностью, конфиденциальностью и скоростью в единицах шагов в секунду суммированы здесь:
Следуйте этим советам, чтобы найти оптимальные гиперпараметры:
- Набор в квантиль, как рекомендовано выше. Значение 1,00 часто работает хорошо.
- Набор = 1, для максимальной скорости обучения.
- Поэкспериментируйте, чтобы найти наибольшее значение σ, которое все еще обеспечивает приемлемую полезность. Как правило, значения 0,01 или ниже работают хорошо.
- Как только подходящее значение найден, масштабируем оба и постоянным для достижения разумного уровня конфиденциальности.