Este documento pressupõe que você já esteja familiarizado com a privacidade diferencial e tenha determinado que gostaria de usar o TF Privacy para implementar garantias de privacidade diferenciadas em seu(s) modelo(s). Se você não estiver familiarizado com a privacidade diferencial, consulte a página de visão geral . Depois de instalar o TF Privacy, comece seguindo estas etapas:
1. Escolha uma versão diferentemente privada de um otimizador existente
Se você estiver usando atualmente um otimizador TensorFlow , provavelmente desejará selecionar um otimizador com o nome DPKeras*Optimizer
, como [ DPKerasAdamOptimizer
] em [ TF Privacy
].
Opcionalmente, você pode tentar otimizadores vetorizados como [ tf_privacy.VectorizedDPKerasAdamOptimizer
]. para uma possível melhoria de velocidade (em termos de passos globais por segundo). Descobriu-se que o uso de otimizadores vetorizados fornece acelerações inconsistentes em experimentos, mas ainda não é bem compreendido. Como antes, você provavelmente desejará usar um otimizador análogo ao que está usando agora. Esses otimizadores vetorizados usam o operador vectorized_map
do Tensorflow, que pode não funcionar com alguns outros operadores do Tensorflow. Se este for o seu caso, abra um problema no repositório TF Privacy GitHub .
2. Calcule a perda para seu minilote de entrada
Ao calcular a perda do seu minilote de entrada, certifique-se de que seja um vetor com uma entrada por exemplo, em vez de agregá-lo em um escalar. Isto é necessário porque o DP-SGD deve ser capaz de calcular a perda de microlotes individuais.
3. Treine seu modelo
Treine seu modelo usando o DP Optimizer (etapa 1) e perda vetorizada (etapa 2). Existem duas opções para fazer isso:
- Passe o otimizador e a perda como argumentos para
Model.compile
antes de chamarModel.fit
. - Ao escrever um loop de treinamento personalizado, use
Optimizer.minimize()
na perda vetorizada.
Feito isso, é recomendável ajustar seus hiperparâmetros. Para um passo a passo completo, consulte o tutorial de privacidade de classificação
4. Ajuste os hiperparâmetros DP-SGD
Todos os otimizadores tf_privacy
utilizam três hiperparâmetros adicionais:
-
l2_norm_clip
ou - Norma de recorte (a norma euclidiana máxima (L2) de cada gradiente individual calculado por minilote). -
noise_multiplier
ou - Razão entre o desvio padrão e a norma de recorte. -
num_microbatches
ou - Número de microlotes em que cada minilote é dividido.
Geralmente, quanto menor o desvio padrão efetivo , melhor será o desempenho do modelo treinado em suas métricas de avaliação.
Os três novos hiperparâmetros DP-SGD têm os seguintes efeitos e compensações:
- O número de microlotes : Geralmente, aumentar isso melhorará a utilidade porque reduz o desvio padrão do ruído. No entanto, isso atrasará o treinamento em termos de tempo.
- A norma de recorte : Como o desvio padrão das escalas de ruído com, provavelmente é melhor definir ser algum quantil (por exemplo, mediana, percentil 75, percentil 90) das normas de gradiente. Tendo um valor muito grande de adiciona quantidades desnecessariamente grandes de ruído.
- O multiplicador de ruído : Dos três hiperparâmetros, a quantidade de privacidade depende apenas do multiplicador de ruído. Quanto maior o multiplicador de ruído, mais privacidade é obtida; no entanto, isso também acarreta uma perda de utilidade.
Essas compensações entre utilidade, privacidade e velocidade em termos de passos/segundo estão resumidas aqui:
Siga estas sugestões para encontrar os hiperparâmetros ideais:
- Definir para um quantil conforme recomendado acima. Um valor de 1,00 geralmente funciona bem.
- Definir = 1, para velocidade máxima de treinamento.
- Experimente encontrar o maior valor de σ que ainda forneça utilidade aceitável. Geralmente, observou-se que valores de 0,01 ou inferiores funcionam bem.
- Uma vez que um valor adequado de for encontrado, dimensione ambos e por uma constante para atingir um nível razoável de privacidade.