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 \(C\) - 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 \(B\) - Número de microlotes em que cada minilote é dividido.
Geralmente, quanto menor o desvio padrão efetivo \(σC / B\), 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 \(B\): 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 \(C\): Como o desvio padrão das escalas de ruído com\(C\), provavelmente é melhor definir \(C\) ser algum quantil (por exemplo, mediana, percentil 75, percentil 90) das normas de gradiente. Tendo um valor muito grande de \(C\) 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 \(C\) para um quantil conforme recomendado acima. Um valor de 1,00 geralmente funciona bem.
- Definir \(B\) = 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 \(B\) e \(σ\) por uma constante para atingir um nível razoável de privacidade.