Iniciar

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:

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:

  1. 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.
  2. 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.
  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 acarreta uma perda de utilidade.

Essas compensações entre utilidade, privacidade e velocidade em termos de passos/segundo estão resumidas aqui:

compensações

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.