Este documento asume 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:
- Pase el optimizador y la pérdida como argumentos a
Model.compile
antes de llamar aModel.fit
. - Al escribir un ciclo de entrenamiento personalizado, use
Optimizer.minimize()
en la pérdida vectorizada.
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 rendimiento del modelo entrenado en sus métricas de evaluación.
Los tres nuevos hiperparámetros DP-SGD tienen los siguientes efectos y compensaciones:
- 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.
- La norma de recorte \(C\): Dado que la desviación estándar de las escalas de ruido con\(C\), probablemente sea mejor configurar \(C\) ser 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.
- 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í:
Siga estas sugerencias para encontrar los hiperparámetros óptimos:
- Colocar \(C\) a un cuantil como se recomendó anteriormente. Un valor de 1,00 suele funcionar bien.
- Colocar \(B\) = 1, para velocidad máxima 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 alcanzado un valor adecuado de \(σ\) se encuentra, escale ambos \(B\) y \(σ\) por una constante para lograr un nivel razonable de privacidad.