Skip to content

Cutting by module role does not remove the source either

scripts/module_split.py, datasets/results/module-split.json. PFAdapter (Liu, Yang, Wang, Yang, Hao, Zhang, Liu and Zhou, IEEE TCCN, arXiv:2607.12111, 13 July 2026, read from the PDF) cuts the adapter by the role of the projection: "query and key projections are assigned to global synchronization ... while value and output projections remain localized", and transmits only the global-shared set, halving traffic. The geometry already stores a cosine matrix per adapted module, and a mean of positive semi-definite matrices is positive semi-definite, so any subset of the 196 modules is scored directly as the Gram matrix of unit vectors.

43 C++ clients, detector AUC with the reference split over projects:

cut modules attribution AOSP Qt
PFAdapter transmits (q, k) 56 0.395 0.702 0.583
PFAdapter keeps local (v, o) 56 0.395 0.754 0.669
attention, all four 112 0.395 0.735 0.628
MLP, all three 84 0.395 0.732 0.627
everything 196 0.395 0.735 0.628
q_proj alone 28 0.442 0.700 0.589
v_proj alone 28 0.372 0.755 0.657

The source is redundantly encoded across module roles. What PFAdapter transmits carries almost the whole signal: AOSP at 0.702 against 0.735 for the complete update. The set it keeps local is slightly the more identifying of the two, at 0.754, but withholding it removes almost nothing from what the server already has. Every single projection type, alone, detects AOSP between 0.700 and 0.755.

The attribution column reading 0.395 for five different cuts is a coincidence of count, not a bug: the matrices differ (mean off-diagonal cosine 0.229 for q and k against 0.334 for v and o, largest entrywise difference 0.152), and the q,k cut gets a different pair of clients right than the full update does. The nearest-class rule is simply coarse at 43 clients, which is the classification operating point this study already reports as uninformative. The detector is what separates the cuts.