Creates an aggregation factory to perform L2 clipping.

Used in the notebooks

Used in the tutorials

The created tff.templates.AggregationProcess projects the values onto an L2 ball (also referred to as "clipping") with norm determined by the provided clipping_norm, before aggregating the values as specified by inner_agg_factory.

The provided clipping_norm can either be a constant (for fixed norm), or an instance of tff.templates.EstimationProcess (for adaptive norm). If it is an estimation process, the value returned by its report method will be used as the clipping norm. Its next method needs to accept a scalar float32 at clients, corresponding to the norm of value being aggregated. The process can thus adaptively determine the clipping norm based on the set of aggregated values. For example if a tff.aggregators.PrivateQuantileEstimationProcess is used, the clip will be an estimate of a quantile of the norms of the values being aggregated.

The value_type provided to the create method must be a structure of floats, but they do not all need to be the same, e.g. a mix of np.float32 and np.float16 dtypes is allowed.

The created process will report measurements

  • clipped_count: The number of aggregands clipped.
  • clipping_norm: The norm used to determine whether to clip an aggregand.

The returned AggregationFactory takes its weightedness (UnweightedAggregationFactory vs. WeightedAggregationFactory) from inner_agg_factory.

clipping_norm Either a float (for fixed norm) or an EstimationProcess (for adaptive norm) that specifies the norm over which the values should be clipped.
inner_agg_factory A factory specifying the type of aggregation to be done after clipping.
clipped_count_sum_factory A factory specifying the type of aggregation done for clipped_count measurement. If None, tff.aggregators.SumFactory will be used.

An aggregation factory to perform L2 clipping.