Skip to content

Aggregation Strategies

Set the aggregation_strategy_keyword field in your config to select a strategy.

Mathematical Bounds

Byzantine-robust strategies (Krum, RFA, Trimmed Mean) have strict mathematical requirements for stability (e.g., \(n > 2f + 2\)). InteFL will reject configurations that violate these bounds to ensure research integrity. See Configuration for details.

Choosing a strategy

No attacks? Start with fedavg.
Byzantine clients? Try krum, bulyan, or trimmed_mean.
Adaptive removal? Use pid_standardized or trust.


FedAvg

Keyword: fedavg

The canonical federated averaging baseline (McMahan et al., 2017). Aggregates client updates using a weighted average proportional to each client's dataset size. No Byzantine-robustness properties.

Config fields: none beyond the common fields.


PID-based strategies

These strategies use a PID controller to score each client's update and remove outliers.

Keyword Variant
pid Raw loss-based PID
pid_scaled Min-max scaled scores
pid_standardized Z-score standardised
pid_standardized_score_based Score-based with standardisation

Required config fields:

Field Description
Kp Proportional gain
Ki Integral gain
Kd Derivative gain
num_std_dev Outlier threshold (number of standard deviations)

Clients whose PID score exceeds num_std_dev standard deviations from the mean are flagged. If remove_clients: true, flagged clients are permanently excluded after begin_removing_from_round.


Trust-based removal

Keyword: trust

Maintains a trust score for each client using exponential moving average (EMA). Clients below the trust_threshold are flagged.

Required config fields:

Field Description
trust_threshold Minimum trust score to remain in the federation
beta_value EMA decay factor (higher = slower trust updates)

Krum

Keyword: krum

Selects the single client update that minimises the sum of squared distances to its n - f - 2 nearest neighbours (Blanchard et al., 2017), where f is the assumed number of malicious clients.

Required config fields:

Field Description
num_of_malicious_clients Assumed number of Byzantine clients
num_krum_selections Number of clients to select per round

Multi-Krum

Keyword: multi-krum

Extension of Krum that selects m clients (rather than just one) using the same distance criterion.

Required config fields: same as Krum.


Multi-Krum Based Removal

Keyword: multi-krum-based

Applies Multi-Krum scoring and uses it to permanently remove consistently low-scoring clients when remove_clients: true.

Required config fields: same as Krum.


Bulyan

Keyword: bulyan

Two-stage defence (El Mhamdi et al., 2018): first selects clients with Multi-Krum, then aggregates the selected updates using coordinate-wise trimmed mean.

Required config fields:

Field Description
num_krum_selections Number of clients selected in the first stage

RFA (Robust Federated Aggregation)

Keyword: rfa

Uses a geometric median (via smoothed Weiszfeld algorithm) instead of arithmetic mean to aggregate updates, providing robustness to outliers (Pillutla et al., 2022).

Required config fields:

Field Description
num_of_malicious_clients Assumed number of Byzantine clients

Trimmed Mean Based Removal

Keyword: trimmed_mean

Sorts client updates by magnitude and trims trim_ratio from each end before averaging. Based on coordinate-wise trimmed mean for optimal statistical rates (Yin et al., 2018).

Required config fields:

Field Description
trim_ratio Fraction of updates to trim from each extreme (e.g. 0.1 trims 10% from each side)

ArKrum

Keyword: arkrum

Adaptive Robust Krum — an extended Krum variant with adaptive selection behaviour that incorporates median-based filtering (Yang & Imam, 2025).

Required config fields: none beyond the common fields.


Common fields (all strategies)

Field Description
min_fit_clients Min clients per training round
min_evaluate_clients Min clients per evaluation round
min_available_clients Min clients available before round starts
remove_clients Enable permanent client removal
begin_removing_from_round Start round for removal
evaluate_metrics_aggregation_fn Set to "weighted_average" for metric aggregation