Este documento pressupõe que você já esteja familiarizado com a privacidade diferencial e determinou 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 um otimizador do 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 GitHub do TF Privacy .
2. Perda de cálculo para seu minilote de entrada
Ao calcular a perda para seu minilote de entrada, certifique-se de que seja um vetor com uma entrada por exemplo, em vez de agregá-lo em um escalar. Isso é necessário, pois o DP-SGD deve ser capaz de calcular a perda para 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 obter 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
usam 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 \(σ\) - Relação do desvio padrão para 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 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 \(B\): Geralmente, aumentar isso melhorará a utilidade porque reduz o desvio padrão do ruído. No entanto, ele irá desacelerar 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\) como algum quantil (por exemplo, mediana, 75º percentil, 90º percentil) das normas de gradiente. Ter 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 vem com uma perda de utilidade.
Essas compensações entre utilidade, privacidade e velocidade em termos de etapas/segundo estão resumidas aqui:
Siga estas sugestões para encontrar os hiperparâmetros ideais:
- Defina \(C\) como um quantil conforme recomendado acima. Um valor de 1,00 geralmente funciona bem.
- Defina \(B\) = 1, para velocidade máxima de treinamento.
- Experimente encontrar o maior valor de σ que ainda dê utilidade aceitável. Geralmente, os valores de 0,01 ou inferiores foram observados para funcionar bem.
- Assim que um valor adequado de \(σ\) for encontrado, dimensione \(B\) e \(σ\) por uma constante para alcançar um nível razoável de privacidade.