Empezar

Este documento supone que usted ya está familiarizado con la privacidad diferencial y ha determinado que le gustaría utilizar TF Privacy para implementar garantías de privacidad diferencial en su(s) modelo(s). Si no está familiarizado con la privacidad diferencial, revise la página de descripción general . Después de instalar TF Privacy, comience siguiendo estos pasos:

1. Elija una versión diferencialmente privada de un Optimizador existente

Si actualmente está utilizando un optimizador de TensorFlow, lo más probable es que desee seleccionar un optimizador con el nombre DPKeras*Optimizer , como [ DPKerasAdamOptimizer ] en [ TF Privacy ].

Opcionalmente, puede probar optimizadores vectorizados como [ tf_privacy.VectorizedDPKerasAdamOptimizer ]. para una posible mejora de la velocidad (en términos de pasos globales por segundo). Se ha descubierto que el uso de optimizadores vectorizados proporciona aceleraciones inconsistentes en los experimentos, pero aún no se comprende bien. Como antes, lo más probable es que quieras utilizar un optimizador análogo al que estás utilizando ahora. Estos optimizadores vectorizados utilizan el operador vectorized_map de Tensorflow, que puede no funcionar con otros operadores de Tensorflow. Si este es su caso, abra una incidencia en el repositorio GitHub de TF Privacy .

2. Calcule la pérdida de su minibatch de entrada

Al calcular la pérdida de su minibatch de entrada, asegúrese de que sea un vector con una entrada por ejemplo, en lugar de agregarlo en un escalar. Esto es necesario ya que DP-SGD debe poder calcular la pérdida de microlotes individuales.

3. Entrena tu modelo

Entrene su modelo usando DP Optimizer (paso 1) y pérdida vectorizada (paso 2). Hay dos opciones para hacer esto:

Una vez hecho esto, se recomienda ajustar sus hiperparámetros. Para obtener un tutorial completo, consulte el tutorial sobre privacidad de clasificación.

4. Ajuste los hiperparámetros DP-SGD

Todos los optimizadores tf_privacy toman tres hiperparámetros adicionales:

  • l2_norm_clip o \(C\) : norma de recorte (la norma euclidiana máxima (L2) de cada gradiente individual calculada por minibatch).
  • noise_multiplier o \(σ\) : relación entre la desviación estándar y la norma de recorte.
  • num_microbatches o \(B\) : número de microlotes en los que se divide cada minilote.

Generalmente, cuanto menor sea la desviación estándar efectiva \(σC / B\), mejor será el desempeño del modelo entrenado en sus métricas de evaluación.

Los tres nuevos hiperparámetros DP-SGD tienen los siguientes efectos y compensaciones:

  1. El número de microlotes \(B\): generalmente, aumentar esto mejorará la utilidad porque reduce la desviación estándar del ruido. Sin embargo, ralentizará el entrenamiento en términos de tiempo.
  2. La norma de recorte \(C\): dado que la desviación estándar del ruido escala con\(C\), probablemente sea mejor establecer \(C\) para que sea algún cuantil (por ejemplo, mediana, percentil 75, percentil 90) de las normas de gradiente. Tener un valor demasiado grande de \(C\) añade cantidades innecesariamente grandes de ruido.
  3. El multiplicador de ruido \(σ\): de los tres hiperparámetros, la cantidad de privacidad depende únicamente del multiplicador de ruido. Cuanto mayor sea el multiplicador de ruido, más privacidad se obtiene; sin embargo, esto también conlleva una pérdida de utilidad.

Estas compensaciones entre utilidad, privacidad y velocidad en términos de pasos/segundo se resumen aquí:

compensaciones

Siga estas sugerencias para encontrar los hiperparámetros óptimos:

  • Establezca \(C\) en un cuantil como se recomienda anteriormente. Un valor de 1,00 suele funcionar bien.
  • Establezca \(B\) = 1, para obtener la máxima velocidad de entrenamiento.
  • Experimente para encontrar el valor más grande de σ que aún proporcione una utilidad aceptable. Generalmente, se ha observado que valores de 0,01 o inferiores funcionan bien.
  • Una vez que se encuentre un valor adecuado de \(σ\) , escale tanto \(B\) como \(σ\) mediante una constante para lograr un nivel razonable de privacidad.