Начало работы

В этом документе предполагается, что вы уже знакомы с дифференциальной конфиденциальностью и решили, что хотите использовать 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 имеют следующие эффекты и компромиссы:

  1. Количество микропартий \(B\): Как правило, увеличение этого значения повышает полезность, поскольку снижает стандартное отклонение шума. Однако это замедлит обучение во времени.
  2. Норма отсечения \(C\): поскольку стандартное отклонение шума масштабируется с помощью\(C\), вероятно, лучше всего установить \(C\) как некоторый квантиль (например, медиана, 75-й процентиль, 90-й процентиль) норм градиента. Слишком большое значение \(C\) добавляет неоправданно большое количество шума.
  3. Множитель шума \(σ\): Из трех гиперпараметров степень конфиденциальности зависит только от множителя шума. Чем больше множитель шума, тем больше конфиденциальности; однако это также приводит к потере полезности.

Эти компромиссы между полезностью, конфиденциальностью и скоростью в единицах шагов в секунду суммированы здесь:

компромиссы

Следуйте этим советам, чтобы найти оптимальные гиперпараметры:

  • Установите для \(C\) квантиль, как рекомендовано выше. Значение 1,00 часто работает хорошо.
  • Установите \(B\) = 1 для максимальной скорости обучения.
  • Поэкспериментируйте, чтобы найти наибольшее значение σ, которое все еще обеспечивает приемлемую полезность. Как правило, значения 0,01 или ниже работают хорошо.
  • Как только подходящее значение \(σ\) будет найдено, масштабируйте \(B\) и \(σ\) на константу, чтобы достичь разумного уровня конфиденциальности.