Iniciar

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:

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:

  1. 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.
  2. 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.
  3. 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:

compensações

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.