This is a genuinely 2D reading of Federated Averaging (FedAvg, McMahan et al. 2017): instead of walking a 3D bowl-shaped surface, every client's private objective is collapsed to a single scalar parameter w, so the whole global loss is one 1D parabola L(w) drawn as a real function graph. Each round, client i starts from the global weight wg, runs E local gradient steps on its own quadratic loss Li(w) = (w − ci)², and only the resulting scalar is sent back:
w_i ← w_g − η · dL_i/dw = (1−2η)·w_i + 2η·c_i (E local steps)
w_g ← Σ_i (n_i / N) · w_i (FedAvg aggregation)
Each local step contracts the distance to ci by exactly (1 − 2η), so after E steps a client's reported weight is w_i = ci + (1−2η)ᴱ·(w_g − ci). Non-IID skew spreads the five ci apart on the w-axis; more epochs, a larger η, or more skew all increase pre-aggregation drift. Because the global objective here is an exact weighted sum of quadratics, the aggregated model provably converges to the true weighted optimum w* = Σ (ni/N)·ci — drift only slows the approach, it does not bias the final answer in this idealized setting (real non-quadratic losses can be biased, which is why FedProx/SCAFFOLD exist).
The lower strip plots global error vs. round as a genuine convergence chart, and the weight bar shows how ni/N vs. equal weighting changes each client's leverage over the aggregate.
- Non-IID skew — how far apart each client's scalar optimum ci sits on the loss axis.
- Local epochs E — gradient steps each client takes before reporting back.
- Learning rate η — local step size; each step contracts distance to ci by (1 − 2η).
- Sample-weighted vs equal — real FedAvg weights each update by ni/N; equal weighting lets a tiny client outvote a huge one.