DPQuery for tree aggregation queries with adaptive clipping.

Inherits From: SumAggregationDPQuery, DPQuery

The implementation is based on tree aggregation noise for cumulative sum in "Practical and Private (Deep) Learning without Sampling or Shuffling" ( and quantile-based adaptive clipping in "Differentially Private Learning with Adaptive Clipping" (

The quantile value will be continuously estimated, but the clip norm is only updated when reset_state is called, and the tree state will be reset. This will force the clip norm (and corresponding stddev) in a tree unchanged.

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.
record_specs A nested structure of tf.TensorSpecs specifying structure and shapes of records.
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).
noise_seed Integer seed for the Gaussian noise generator of TreeResidualSumQuery. If None, a nondeterministic seed based on system time will be generated.



View source

Implements tensorflow_privacy.DPQuery.accumulate_preprocessed_record.


View source

Accumulates a single record into the sample state.

This is a helper method that simply delegates to preprocess_record and accumulate_preprocessed_record for the common case when both of those functions run on a single device. Typically this will be a simple sum.

params The parameters for the sample. In standard DP-SGD training, the clipping norm for the sample's microbatch gradients (i.e., a maximum norm magnitude to which each gradient is clipped)
sample_state The current sample state. In standard DP-SGD training, the accumulated sum of previous clipped microbatch gradients.
record The record to accumulate. In standard DP-SGD training, the gradient computed for the examples in one microbatch, which may be the gradient for just one example (for size 1 microbatches).

The updated sample state. In standard DP-SGD training, the set of previous microbatch gradients with the addition of the record argument.


View source

Returns the clipping norm and estimated quantile value as a metric.


View source

Implements tensorflow_privacy.DPQuery.derive_sample_params.


View source

Implements tensorflow_privacy.DPQuery.get_noised_result.


View source

Implements tensorflow_privacy.DPQuery.initial_global_state.


View source

Implements tensorflow_privacy.DPQuery.initial_sample_state.


View source

Implements tensorflow_privacy.DPQuery.merge_sample_states.


View source

Implements tensorflow_privacy.DPQuery.preprocess_record.


View source

Returns state after resetting the tree and updating the clip norm.

This function will be used in restart_query.RestartQuery after calling get_noised_result when the restarting condition is met. The clip norm ( and corresponding noise stddev) for the tree aggregated sum query is only updated from the quantile-based estimation when reset_state is called.

noised_results Noised cumulative sum returned by get_noised_result.
global_state Updated global state returned by get_noised_result, which records noise for the conceptual cumulative sum of the current leaf node, and tree state for the next conceptual cumulative sum.

New global state with restarted tree state, and new clip norm.