class_docstr: `DPQuery` for Gaussian sum queries with adaptive clipping.
  
  Clipping norm is tuned adaptively to converge to a value such that a specified
  quantile of updates are clipped, using the algorithm of Andrew et al. (
  https://arxiv.org/abs/1905.03871). See the paper for details and suggested
  hyperparameter settings.
class_docstr_tok: ["`","DPQuery","`","for","Gaussian","sum","queries","with","adaptive","clipping",".","Clipping","norm","is","tuned","adaptively","to","converge","to","a","value","such","that","a","specified","quantile","of","updates","are","clipped",",","using","the","algorithm","of","Andrew","et","al",".","(","https",":","\/\/arxiv.org\/abs\/1905.03871",")",".","See","the","paper","for","details","and","suggested","hyperparameter","settings","."]
docstr: Initializes the QuantileAdaptiveClipSumQuery.
  
  Args:
    initial_l2_norm_clip: The initial value of clipping norm.
    noise_multiplier: The stddev of the noise added to the output will be this
      times the current value of the clipping norm.
    target_unclipped_quantile: The desired quantile of updates which should be
      unclipped. I.e., a value of 0.8 means a value of l2_norm_clip should be
      found for which approximately 20% of updates are clipped each round.
      Andrew et al. recommends that this be set to 0.5 to clip to the median.
    learning_rate: The learning rate for the clipping norm adaptation. With
      geometric updating, a rate of r means that the clipping norm will change
      by a maximum factor of exp(r) at each round. This maximum is attained
      when |actual_unclipped_fraction - target_unclipped_quantile| is 1.0.
      Andrew et al. recommends that this be set to 0.2 for geometric updating.
    clipped_count_stddev: The stddev of the noise added to the clipped_count.
      Andrew et al. recommends that this be set to `expected_num_records / 20`
      for reasonably fast adaptation and high privacy.
    expected_num_records: The expected number of records per round, used to
      estimate the clipped count quantile.
    geometric_update: If `True`, use geometric updating of clip (recommended).
docstr_tok: ["Initializes","the","QuantileAdaptiveClipSumQuery",".","Args",":","initial_l2_norm_clip",":","The","initial","value","of","clipping","norm",".","noise_multiplier",":","The","stddev","of","the","noise","added","to","the","output","will","be","this","times","the","current","value","of","the","clipping","norm",".","target_unclipped_quantile",":","The","desired","quantile","of","updates","which","should","be","unclipped",".","I.e.",",","a","value","of","0.8","means","a","value","of","l2_norm_clip","should","be","found","for","which","approximately","20","%","of","updates","are","clipped","each","round",".","Andrew","et","al",".","recommends","that","this","be","set","to","0.5","to","clip","to","the","median",".","learning_rate",":","The","learning","rate","for","the","clipping","norm","adaptation",".","With","geometric","updating",",","a","rate","of","r","means","that","the","clipping","norm","will","change","by","a","maximum","factor","of","exp","(","r",")","at","each","round",".","This","maximum","is","attained","when","|actual_unclipped_fraction","-","target_unclipped_quantile|","is","1.0",".","Andrew","et","al",".","recommends","that","this","be","set","to","0.2","for","geometric","updating",".","clipped_count_stddev",":","The","stddev","of","the","noise","added","to","the","clipped_count",".","Andrew","et","al",".","recommends","that","this","be","set","to","`","expected_num_records","\/","20","`","for","reasonably","fast","adaptation","and","high","privacy",".","expected_num_records",":","The","expected","number","of","records","per","round",",","used","to","estimate","the","clipped","count","quantile",".","geometric_update",":","If","`","True","`",",","use","geometric","updating","of","clip","(","recommended",")","."]
code: def __init__(
      self,
      initial_l2_norm_clip,
      noise_multiplier,
      target_unclipped_quantile,
      learning_rate,
      clipped_count_stddev,
      expected_num_records,
      geometric_update=True,
  ):
      """Initializes the QuantileAdaptiveClipSumQuery.
  
      Args:
        initial_l2_norm_clip: The initial value of clipping norm.
        noise_multiplier: The stddev of the noise added to the output will be this
          times the current value of the clipping norm.
        target_unclipped_quantile: The desired quantile of updates which should be
          unclipped. I.e., a value of 0.8 means a value of l2_norm_clip should be
          found for which approximately 20% of updates are clipped each round.
          Andrew et al. recommends that this be set to 0.5 to clip to the median.
        learning_rate: The learning rate for the clipping norm adaptation. With
          geometric updating, a rate of r means that the clipping norm will change
          by a maximum factor of exp(r) at each round. This maximum is attained
          when |actual_unclipped_fraction - target_unclipped_quantile| is 1.0.
          Andrew et al. recommends that this be set to 0.2 for geometric updating.
        clipped_count_stddev: The stddev of the noise added to the clipped_count.
          Andrew et al. recommends that this be set to `expected_num_records / 20`
          for reasonably fast adaptation and high privacy.
        expected_num_records: The expected number of records per round, used to
          estimate the clipped count quantile.
        geometric_update: If `True`, use geometric updating of clip (recommended).
      """
      self._noise_multiplier = noise_multiplier
  
      self._quantile_estimator_query = (
          quantile_estimator_query.QuantileEstimatorQuery(
              initial_l2_norm_clip,
              target_unclipped_quantile,
              learning_rate,
              clipped_count_stddev,
              expected_num_records,
              geometric_update,
          )
      )
  
      self._sum_query = gaussian_query.GaussianSumQuery(
          initial_l2_norm_clip, noise_multiplier * initial_l2_norm_clip
      )
  
      assert isinstance(self._sum_query, dp_query.SumAggregationDPQuery)
      assert isinstance(
          self._quantile_estimator_query, dp_query.SumAggregationDPQuery
      )
  
file_path: privacy/tensorflow_privacy/privacy/dp_query/quantile_adaptive_clip_sum_query.py
imports: import collections
  import dp_accounting
  import tensorflow
  from tensorflow_privacy.privacy.dp_query import dp_query
  from tensorflow_privacy.privacy.dp_query import gaussian_query
  from tensorflow_privacy.privacy.dp_query import quantile_estimator_query
label_desc: Use image node_id 1 to create a new QuantileAdaptiveClipSumQuery object from inherited base classes: dp_query with example: obj = QuantileAdaptiveClipSumQuery(initial_l2_norm_clip, noise_multiplier, target_unclipped_quantile, learning_rate, clipped_count_stddev, expected_num_records, geometric_update)