Input-Layer Starvation: Why Per-Layer Pruning Breaks IoT Intrusion Detectors
Organizations: School of Computing, University of Portsmouth, Portsmouth, United Kingdom
Abstract
Intrusion detectors for small Internet-of-Things (IoT) devices are usually compressed by pruning and judged by overall accuracy. We show that this hides a severe class-level failure, find its cause, and give low-overhead prevention and repair. On CICIoT2023, a two-layer convolutional detector pruned with uniform layer-wise magnitude pruning at 80% sparsity loses 16 points of accuracy but half of its macro-F1, the mean per-class F1 (0.542 to 0.271 over five independently trained models); 17 of 34 classes are materially damaged. Remaining weight count does not explain it: a perceptron and a transformer pruned to the same or fewer weights lose at most 0.096. The first layer does. It has 192 weights; uniform pruning leaves 38, 46% of its 64 filters lose every input weight, and fine-tuning under that starvation leaves the running means of the first normalisation layer displaced by up to 0.8 standard deviations in a few surviving channels, on which the deployed model collapses. Protecting those 192 weights, or pruning globally at the same sparsity, prevents the collapse (loss 0.013); recomputing the normalisation statistics on unlabelled training data, with no weight changed, repairs it (loss 0.039) and returns the false-alert rate to 33% (dense 29%). Damage shows a strong increasing dose-response in first-layer sparsity, starving a perceptron's input layer reproduces the collapse, and the pattern holds on TON_IoT. The failure is misattribution and false alerts, not silent evasion: on validation-selected blind spots, uniformly pruned detectors misattribute 72% of the traffic, against 50% with the first layer protected and 47% for the dense model.
Figures & tables
| Architecture | Layers (weights per layer) | Total parameters | Role in the paper |
|---|---|---|---|
| CNN1D (primary) | conv.0: Conv1d 1 to 64, kernel 3 (192); conv.3: Conv1d 64 to 128, kernel 3 (24,576); head: Linear 128 to 34 (4,352) | 29,730 | The detector that collapses under the uniform layer-wise recipe |
| MLP | body.0: Linear 39 to 256 (9,984); body.3: Linear 256 to 128 (32,768); head: Linear 128 to 34 (4,352) | about 50,000 | Co-equal arm (validation gate passed); capacity control; positive control by input starvation |
| FT-Transformer (small) | token embedding (96 per feature), 3 attention layers with 8 heads, feed-forward width 192, classification head | 227,938 | Capacity control without a locality prior; weaker baseline, reported with that caveat |
| Recipe | What is pruned and how | Total sparsity reached |
|---|---|---|
| Default, per-layer uniform 80% | Each weight matrix (every Linear and Conv1d) loses its 80% smallest-magnitude weights independently; biases and normalisation layers untouched | 78.4% of all parameters |
| First layer protected | Same as default, but conv.0 is left dense (192 weights) | 77.8% |
| Global magnitude 80% | One magnitude threshold across all weight matrices so that 80% of prunable weights are removed in total; small layers with larger weights keep more | 78.4% (identical to default) |
| Dose sweep (Section 5) | conv.0 pruned at 0/20/50/80/90/95% while conv.3 and head stay at 80% | varies by design |
| Hand-built masks (Section 5) | conv.0 mask constructed at a fixed number of surviving weights with the survivors spread across many filters or concentrated in few | varies by design |
| Gradual with recovery (Section 5.2) | Sparsity follows the cubic schedule of Zhu and Gupta from 0 to 80% over eight fine-tuning epochs, the mask is recomputed from current weights every 100 steps and training is dense between updates so pruned weights can regrow (a regrowth-enabled variant; the original method masks gradients); two fixed-mask epochs follow. Per-layer and global variants. | 80% |
| Architecture | Cell | Remaining non-zero weights | Macro-F1 (mean) | Loss vs own baseline | Classes damaged (>=3/5 seeds) |
|---|---|---|---|---|---|
| CNN1D | uniform 50% | 14,560 | 0.499 | 0.042 | 4 |
| CNN1D | uniform 80% | 5,823 | 0.271 | 0.271 | 17 |
| MLP | body 50% | 22,246 | 0.551 | 0.002 | 0 |
| MLP | body 80% | 9,421 | 0.546 | 0.008 | 0 |
| MLP | body 90% | 5,145 | 0.540 | 0.013 | 0 |
| MLP | body 95% | 3,007 | 0.531 | 0.022 | 0 |
| Recipe | Non-zero prunable weights (conv.0 / conv.3 / head) | Macro-F1 (mean +/- sd) | Loss | Classes damaged |
|---|---|---|---|---|
| Uniform layer-wise 80% | 5,823 (38 / 4,915 / 870) | 0.271 +/- 0.164 | 0.271 | 17 |
| First layer protected, rest 80% | 5,977 (192 / 4,915 / 870) | 0.529 +/- 0.012 | 0.013 | 2 |
| Global magnitude 80% | 5,824 (136 / 2,598 / 3,090) | 0.527 +/- 0.007 | 0.014 | 0 |
| Gradual per-layer schedule, regrowth-enabled | 5,823 (38 / 4,915 / 870) | 0.377 +/- 0.070 | 0.165 | 8 |
| Gradual global schedule, regrowth-enabled | 5,824 (132 / 2,732 / 2,960) | 0.512 +/- 0.051 | 0.029 | 0 |
| Architecture | Input-layer sparsity | Surviving input weights | Macro-F1 (mean +/- sd) | Loss | Classes damaged |
|---|---|---|---|---|---|
| CNN1D | 0% | 192 | 0.529 +/- 0.012 | 0.013 | 2 |
| CNN1D | 20% | 154 | 0.527 +/- 0.013 | 0.014 | 1 |
| CNN1D | 50% | 96 | 0.487 +/- 0.063 | 0.055 | 4 |
| CNN1D | 80% (default) | 38 | 0.271 +/- 0.164 | 0.271 | 17 |
| CNN1D | 90% | 19 | 0.074 +/- 0.096 | 0.468 | 25 |
| CNN1D | 95% | 10 | 0.016 +/- 0.014 | 0.526 | 25 |
| Filters | Surviving weights | Connected filters (fraction) | Macro-F1 (mean +/- sd) | Loss | Classes damaged |
|---|---|---|---|---|---|
| 32 | 96 | 32.0 (1.00) | 0.516 +/- 0.020 | 0.021 | 0 |
| 32 | 48 | 29.6 (0.93) | 0.482 +/- 0.044 | 0.055 | 3 |
| 32 | 38 | 27.8 (0.87) | 0.490 +/- 0.026 | 0.047 | 2 |
| 32 | 19 | 18.0 (0.56) | 0.101 +/- 0.080 | 0.436 | 21 |
| 32 | 10 | 9.8 (0.31) | 0.065 +/- 0.052 | 0.472 | 20 |
| 64 | 192 | 64.0 (1.00) | 0.529 +/- 0.012 | 0.013 | 2 |
| Surviving conv.0 weights | Mask | Live filters (of 64) | Macro-F1 (mean +/- sd) | Loss | Classes damaged |
|---|---|---|---|---|---|
| 38 | concentrated (whole filters) | 13 | 0.067 +/- 0.064 | 0.475 | 25 |
| 38 | magnitude (uniform layer-wise recipe) | 34.6 | 0.271 +/- 0.164 | 0.271 | 17 |
| 38 | spread (one weight per filter) | 38 | 0.225 +/- 0.142 | 0.316 | 20 |
| 96 | concentrated | 32 | 0.329 +/- 0.086 | 0.212 | 12 |
| 96 | magnitude | 58.4 | 0.487 +/- 0.063 | 0.055 | 4 |
| 96 | spread | 64 | 0.523 +/- 0.007 | 0.018 | 0 |
| Cell | Loss before | Loss after | Recovered | Benign flagged before / after | Damaged classes before / after | Dense benign flagged |
|---|---|---|---|---|---|---|
| CNN uniform 80% | 0.271 | 0.039 | 85% | 56.3% / 33.3% | 17 / 1 | 28.6% |
| CNN first layer protected | 0.013 | 0.014 | none | 30.8% / 33.0% | 2 / 0 | 28.6% |
| CNN global 80% | 0.014 | 0.015 | none | 34.0% / 31.1% | 0 / 1 | 28.6% |
| CNN gradual per-layer | 0.165 | 0.028 | 83% | 78.2% / 32.1% | 8 / 2 | 28.6% |
| CNN gradual global | 0.029 | 0.008 | 72% | 33.8% / 23.3% | 0 / 0 | 28.6% |
| CNN starved input, dense head | 0.226 | 0.017 | 92% | 72.5% / 31.8% | 16 / 0 | 28.6% |
| Architecture | Input-layer sparsity | Surviving input weights | Macro-F1 (mean +/- sd) | Loss | Classes damaged (of 10) |
|---|---|---|---|---|---|
| CNN1D | 0% | 192 | 0.395 +/- 0.066 | 0.065 | 1 |
| CNN1D | 50% | 96 | 0.341 +/- 0.017 | 0.119 | 1 |
| CNN1D | 80% (default) | 38 | 0.203 +/- 0.083 | 0.256 | 4 |
| CNN1D | 90% | 19 | 0.131 +/- 0.083 | 0.328 | 5 |
| CNN1D | 95% | 10 | 0.060 +/- 0.058 | 0.400 | 5 |
| MLP | 80% | 1,536 | 0.425 +/- 0.051 | 0.085 | 2 |
| Held-out detector | Blind-spot traffic: misattributed | Excess over dense | Blind-spot traffic: cross-family | Blind-spot traffic: labelled benign | Random detectable type: misattributed |
|---|---|---|---|---|---|
| Uniform layer-wise 80% | 72.4% | +25.1 | 47.7% | 17.8% | 53.5% |
| First layer protected | 49.6% | +2.3 | 27.3% | 19.9% | 20.2% |
| Global magnitude 80% | 51.5% | +4.2 | 27.9% | 20.9% | 20.2% |
| Dense (unpruned) | 47.3% | 0 | 26.4% | 18.8% | 19.5% |
| Detector | Benign records flagged as attack (mean +/- sd over 5 seeds) |
|---|---|
| Uniform layer-wise 80% | 56.3% +/- 42.7% |
| First layer protected | 30.8% +/- 6.4% |
| Global magnitude 80% | 34.0% +/- 8.0% |
| Dense (unpruned) | 28.6% +/- 4.2% |
| Detector | Macro-F1 (mean +/- sd) | Total sparsity | Serialized bytes | Sparse payload estimate (bytes) | CPU latency, batch 1 (median ms) | CPU latency, batch 1,024 (median ms) |
|---|---|---|---|---|---|---|
| Dense (unpruned) | 0.542 +/- 0.006 | 0.0% | 125,683 | 118,920 | 0.260 | 61.9 |
| Uniform layer-wise 80% | 0.271 +/- 0.164 | 78.4% | 125,683 | 49,024 | 0.256 | 61.3 |
| First layer protected | 0.529 +/- 0.012 | 77.8% | 125,683 | 49,488 | 0.266 | 61.4 |
| Global magnitude 80% | 0.527 +/- 0.007 | 78.4% | 125,683 | 49,032 | 0.252 | 62.3 |
Appendix figures & tables30 assets
Supplementary material from the paper’s appendix.
Appendix
| Class | Uniform 80%: mean recall loss | Uniform 80%: affected frequency | Protected: mean loss | Protected: affected freq. | Global: mean loss | Global: affected freq. |
|---|---|---|---|---|---|---|
| Mirai-greip_flood | 0.815 | 1.0 | 0.015 | 0.0 | 0.015 | 0.0 |
| DoS-HTTP_Flood | 0.732 | 1.0 | 0.005 | 0.0 | 0.068 | 0.2 |
| DDoS-SlowLoris | 0.506 | 0.8 | 0.021 | 0.0 | 0.022 | 0.0 |
| DoS-TCP_Flood | 0.408 | 0.8 | 0.205 | 0.6 | 0.304 | 0.4 |
| DDoS-PSHACK_Flood | 0.405 | 0.4 | -0.0 | 0.0 | -0.0 | 0.0 |
| Recon-HostDiscovery | 0.39 | 1.0 | -0.027 | 0.0 | -0.004 | 0.0 |
| class | conv.0 0% | conv.0 20% | conv.0 50% | conv.0 80% | conv.0 90% | conv.0 95% |
|---|---|---|---|---|---|---|
| Backdoor_Malware | 0.014 | 0.014 | 0.014 | 0.014 | 0.014 | 0.014 |
| BenignTraffic | 0.021 | 0.018 | 0.089 | 0.277 | 0.49 | 0.695 |
| BrowserHijacking | 0.008 | 0.007 | 0.001 | 0.004 | 0.011 | 0.011 |
| CommandInjection | 0.036 | 0.034 | 0.039 | 0.051 | 0.051 | 0.051 |
| DDoS-ACK_Fragmentation | -0.036 | -0.036 | -0.022 | 0.322 | 0.555 | 0.707 |
| DDoS-HTTP_Flood | 0.015 | -0.001 | 0.089 | 0.383 | 0.641 | 0.811 |
| class | input 80.00% | input 90.00% | input 98.08% | input 99.04% | input 99.62% |
|---|---|---|---|---|---|
| Backdoor_Malware | 0.025 | 0.03 | 0.03 | 0.034 | -0.001 |
| BenignTraffic | -0.008 | -0.014 | 0.018 | 0.151 | 0.477 |
| BrowserHijacking | 0.001 | 0.005 | 0.002 | 0.019 | 0.02 |
| CommandInjection | 0.01 | 0.002 | 0.034 | 0.044 | 0.06 |
| DDoS-ACK_Fragmentation | -0.018 | -0.046 | -0.037 | 0.321 | 0.498 |
| DDoS-HTTP_Flood | -0.01 | -0.005 | 0.013 | 0.113 | 0.315 |
| class | conv.0 0% | conv.0 50% | conv.0 80% | conv.0 90% | conv.0 95% |
|---|---|---|---|---|---|
| backdoor | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
| ddos | 0.108 | 0.055 | 0.476 | 0.371 | 0.696 |
| dos | -0.201 | -0.147 | -0.079 | 0.105 | 0.232 |
| injection | 0.161 | 0.228 | 0.397 | 0.237 | 0.42 |
| mitm | 0.05 | 0.045 | 0.194 | 0.197 | 0.137 |
| normal | -0.002 | -0.003 | 0.189 | 0.55 | 0.761 |
| arch | seed | validation macro f1 | cnn band | mlp band | overlaps archived bands |
|---|---|---|---|---|---|
| ft_transformer | 0 | 0.5253 | (0.561, 0.575) | (0.567, 0.593) | False |
| ft_transformer | 1 | 0.5304 | (0.561, 0.575) | (0.567, 0.593) | False |
| ft_transformer | 2 | 0.5321 | (0.561, 0.575) | (0.567, 0.593) | False |
| ft_transformer | 3 | 0.5294 | (0.561, 0.575) | (0.567, 0.593) | False |
| ft_transformer | 4 | 0.5244 | (0.561, 0.575) | (0.567, 0.593) | False |
| cell | n | mean | sd | min | max |
|---|---|---|---|---|---|
| M0 | 5 | 0.4927 | 0.0091 | 0.4793 | 0.501 |
| prune90 | 5 | 0.4584 | 0.0052 | 0.4496 | 0.4629 |
| prune95 | 5 | 0.4371 | 0.0073 | 0.4255 | 0.4432 |
| prune97 | 5 | 0.4226 | 0.017 | 0.3994 | 0.4398 |
| prune98p5 | 5 | 0.3966 | 0.0177 | 0.3704 | 0.4151 |
| label | auc M0 | auc compressed | auc drop |
|---|---|---|---|
| BenignTraffic | 0.9439 | 0.9286 | 0.0153 |
| DDoS-SlowLoris | 0.9932 | 0.9853 | 0.0078 |
| DNS_Spoofing | 0.9529 | 0.9332 | 0.0197 |
| DoS-TCP_Flood | 0.9847 | 0.9828 | 0.0019 |
| DoS-UDP_Flood | 0.9915 | 0.9896 | 0.0019 |
| Mirai-greip_flood | 0.9981 | 0.9923 | 0.0058 |
| cell | n | accuracy | macro f1 | nll | multiclass brier | ece 10 | mean confidence | conf. wrong >0.5 |
|---|---|---|---|---|---|---|---|---|
| transformer_prune97_head_refit | 549271 | 0.6255 | 0.4529 | 0.9965 | 0.4572 | 0.0371 | 0.6412 | 0.1436 |
| fine label | alert family |
|---|---|
| Backdoor_Malware | malware_botnet |
| BenignTraffic | benign |
| BrowserHijacking | web_application |
| CommandInjection | web_application |
| DDoS-ACK_Fragmentation | ddos |
| DDoS-HTTP_Flood | ddos |
| arch | dose | surviving | observed live | expected live random | expected covered features random | observed minus expected |
|---|---|---|---|---|---|---|
| cnn1d | 0.0 | 192 | 64.0 | 64.0 | 0.0 | |
| cnn1d | 0.2 | 154 | 63.6 | 63.54 | 0.06 | |
| cnn1d | 0.5 | 96 | 58.4 | 56.13 | 2.27 | |
| cnn1d | 0.8 | 38 | 34.6 | 31.1 | 3.5 | |
| cnn1d | 0.9 | 19 | 18.6 | 17.26 | 1.34 | |
| cnn1d | 0.95 | 10 | 10.0 | 9.54 | 0.46 |
| T | live units K | covered features F | mean macro f1 | sd | mean macro f1 loss | classes affected ge3of5 |
|---|---|---|---|---|---|---|
| 96 | 96 | 1 | 0.0449 | 0.0305 | 0.5081 | 26 |
| 96 | 32 | 3 | 0.1144 | 0.0471 | 0.4386 | 21 |
| 96 | 12 | 8 | 0.2 | 0.0736 | 0.3529 | 19 |
| 96 | 8 | 12 | 0.1185 | 0.1173 | 0.4344 | 24 |
| 96 | 3 | 32 | 0.0174 | 0.0212 | 0.5355 | 26 |
| 192 | 192 | 1 | 0.0691 | 0.0454 | 0.4839 | 25 |
| runs | surviving input weights | live channels | rep1 participation ratio | rep1 rank99 | rep1 numerical rank | penult participation ratio | penult rank99 |
|---|---|---|---|---|---|---|---|
| pooled | -0.549 | -0.682 | -0.781 | -0.794 | -0.696 | -0.868 | -0.895 |
| cnn1d | -0.871 | -0.893 | -0.468 | -0.525 | -0.771 | -0.868 | -0.926 |
| mlp | -0.705 | -0.758 | -0.911 | -0.931 | -0.86 | -0.9 | -0.929 |
| mlp_grid_only | -0.234 | -0.128 | -0.605 | -0.753 | -0.48 | -0.614 | -0.718 |
| cnn_tap_masks_only | -0.763 | -0.776 | 0.271 | 0.186 | -0.456 | -0.904 | -0.944 |
| arch | input layer sparsity | surviving input weights | mean macro f1 | sd macro f1 | mean macro f1 loss | classes affected ge3of5 |
|---|---|---|---|---|---|---|
| cnn1d | 0.0 | 192 | 0.3945 | 0.0659 | 0.0648 | 1 |
| cnn1d | 0.5 | 96 | 0.3408 | 0.0167 | 0.1185 | 1 |
| cnn1d | 0.8 | 38 | 0.2034 | 0.0832 | 0.256 | 4 |
| cnn1d | 0.9 | 19 | 0.1313 | 0.0834 | 0.3281 | 5 |
| cnn1d | 0.95 | 10 | 0.0598 | 0.0583 | 0.3995 | 5 |
| mlp | 0.8 | 1536 | 0.4248 | 0.051 | 0.0849 | 2 |
| attacker seeds | n blind | blind spots |
|---|---|---|
| (0, 1, 2) | 3 | DoS-HTTP_Flood;DoS-TCP_Flood;MITM-ArpSpoofing |
| (0, 1, 3) | 2 | DoS-TCP_Flood;MITM-ArpSpoofing |
| (0, 1, 4) | 2 | DoS-HTTP_Flood;MITM-ArpSpoofing |
| (0, 2, 3) | 2 | DoS-TCP_Flood;MITM-ArpSpoofing |
| (0, 2, 4) | 5 | DDoS-SlowLoris;DDoS-TCP_Flood;DoS-HTTP_Flood;DoS-UDP_Flood;MITM-ArpSpoofing |
| (0, 3, 4) | 1 | MITM-ArpSpoofing |
| recipe | strategy | misattribution rate | attack to benign rate | cross family rate |
|---|---|---|---|---|
| default_layerwise80 | blind_spot_set | 0.7235 | 0.1776 | 0.4766 |
| default_layerwise80 | random_over_detectable | 0.5345 | 0.0496 | 0.3007 |
| dense | blind_spot_set | 0.473 | 0.1881 | 0.2641 |
| dense | random_over_detectable | 0.1945 | 0.0371 | 0.1252 |
| global80 | blind_spot_set | 0.5148 | 0.2091 | 0.2794 |
| global80 | random_over_detectable | 0.2023 | 0.0395 | 0.1274 |
| attacker seeds | n detectable | n blind | blind spots |
|---|---|---|---|
| (0, 1, 2) | 20 | 3 | DoS-HTTP_Flood;DoS-TCP_Flood;Recon-HostDiscovery |
| (0, 1, 3) | 19 | 2 | DoS-HTTP_Flood;DoS-TCP_Flood |
| (0, 1, 4) | 20 | 1 | DoS-HTTP_Flood |
| (0, 2, 3) | 18 | 4 | DNS_Spoofing;DoS-HTTP_Flood;DoS-TCP_Flood;Recon-HostDiscovery |
| (0, 2, 4) | 19 | 4 | DDoS-SlowLoris;DDoS-SynonymousIP_Flood;DoS-HTTP_Flood;DoS-UDP_Flood |
| (0, 3, 4) | 18 | 1 | DoS-HTTP_Flood |
| recipe | strategy | misattribution | attack to benign | cross family | wrong family or benign | n types |
|---|---|---|---|---|---|---|
| default_layerwise80 | blind_spot_set | 0.6456 | 0.0342 | 0.5375 | 0.5718 | 3.0 |
| default_layerwise80 | random_over_detectable | 0.5134 | 0.029 | 0.2833 | 0.3123 | 19.0 |
| dense | blind_spot_set | 0.1931 | 0.0161 | 0.1307 | 0.1468 | 3.0 |
| dense | random_over_detectable | 0.1622 | 0.0155 | 0.098 | 0.1135 | 19.0 |
| global80 | blind_spot_set | 0.2599 | 0.0156 | 0.196 | 0.2117 | 3.0 |
| global80 | random_over_detectable | 0.1647 | 0.0153 | 0.1079 | 0.1233 | 19.0 |
| recipe | strategy | misattribution | attack to benign | cross family | wrong family or benign | n types | exposed lift vs random |
|---|---|---|---|---|---|---|---|
| default_layerwise80 | exposed_set | 0.7693 | 0.1685 | 0.4592 | 0.6277 | 14.4 | 1.1198 |
| default_layerwise80 | oracle_per_model | 0.9744 | 0.1412 | 0.4658 | 0.607 | 19.8 | 1.1198 |
| default_layerwise80 | random_attack_type | 0.687 | 0.0999 | 0.4052 | 0.505 | 33.0 | 1.1198 |
| dense | exposed_set | 0.6091 | 0.161 | 0.2864 | 0.4474 | 14.4 | 1.343 |
| dense | oracle_per_model | 0.8712 | 0.2238 | 0.4028 | 0.6265 | 10.6 | 1.343 |
| dense | random_attack_type | 0.4535 | 0.0788 | 0.2735 | 0.3523 | 33.0 | 1.343 |
| mapping | recipe | misattribution rate | attack to benign rate | cross family rate | wrong family or benign rate |
|---|---|---|---|---|---|
| M0_original | default_layerwise80 | 0.6456 | 0.0342 | 0.5375 | 0.5718 |
| M0_original | dense | 0.1931 | 0.0161 | 0.1307 | 0.1468 |
| M0_original | global80 | 0.2599 | 0.0156 | 0.196 | 0.2117 |
| M0_original | protect_conv0 | 0.227 | 0.0146 | 0.1588 | 0.1734 |
| M1_dos_ddos_merged | default_layerwise80 | 0.6456 | 0.0342 | 0.1234 | 0.1577 |
| M1_dos_ddos_merged | dense | 0.1931 | 0.0161 | 0.0172 | 0.0332 |
| arch | cell | seed | M0 | before | after | loss before | loss after | benign to attack before | benign to attack after |
|---|---|---|---|---|---|---|---|---|---|
| cnn1d | uniform80 | 0 | 0.5451 | 0.3377 | 0.5047 | 0.2075 | 0.0404 | 0.8215 | 0.3746 |
| cnn1d | uniform80 | 1 | 0.5494 | 0.4052 | 0.475 | 0.1442 | 0.0744 | 0.0532 | 0.3518 |
| cnn1d | uniform80 | 2 | 0.5361 | 0.009 | 0.519 | 0.527 | 0.0171 | 0.9852 | 0.2842 |
| cnn1d | uniform80 | 3 | 0.5406 | 0.3849 | 0.5004 | 0.1558 | 0.0402 | 0.1548 | 0.2919 |
| cnn1d | uniform80 | 4 | 0.5369 | 0.2163 | 0.5123 | 0.3206 | 0.0246 | 0.8021 | 0.3615 |
| cnn1d | protected | 0 | 0.5451 | 0.508 | 0.5148 | 0.0372 | 0.0303 | 0.3947 | 0.3437 |
| seed | saved running stats | batch stats on test | recal cumulative | recal ema 0.1 |
|---|---|---|---|---|
| 0 | 0.3377 | 0.0502 | 0.5047 | 0.512 |
| 1 | 0.4052 | 0.0389 | 0.475 | 0.4891 |
| 2 | 0.009 | 0.0454 | 0.519 | 0.5193 |
| 3 | 0.3849 | 0.0501 | 0.5004 | 0.5077 |
| 4 | 0.2163 | 0.0408 | 0.5123 | 0.5098 |
| seed | saved running stats | batch stats shuffled test |
|---|---|---|
| 0 | 0.3377 | 0.5126 |
| 1 | 0.4052 | 0.5114 |
| 2 | 0.009 | 0.5155 |
| 3 | 0.3849 | 0.5006 |
| 4 | 0.2163 | 0.5122 |
| variant | mean | std |
|---|---|---|
| all | 0.2317 | 0.1771 |
| bn0_only | 0.2281 | 0.1778 |
| bn1_only | 0.0033 | 0.0089 |
| means_only | 0.2342 | 0.1728 |
| vars_only | 0.0011 | 0.0054 |
| t | mean | std |
|---|---|---|
| 0.0 | 0.2706 | 0.1636 |
| 0.1 | 0.3032 | 0.1531 |
| 0.2 | 0.333 | 0.1352 |
| 0.3 | 0.3654 | 0.1169 |
| 0.4 | 0.3955 | 0.0981 |
| 0.5 | 0.4288 | 0.0583 |
| bn layer | channels | abs mean shift median | abs mean shift p95 | abs mean shift max | var ratio median |
|---|---|---|---|---|---|
| 0 | 320 | 0.0008 | 0.3264 | 0.7675 | 1.0 |
| 1 | 640 | 0.0058 | 0.0295 | 0.0812 | 0.9933 |
| recipe | seed | parameters | nonzero parameters | whole model sparsity | torch state dict bytes | index value sparse payload estimate bytes |
|---|---|---|---|---|---|---|
| dense | 0 | 29730 | 29730 | 0.0 | 125683 | 118920 |
| dense | 1 | 29730 | 29730 | 0.0 | 125683 | 118920 |
| dense | 2 | 29730 | 29730 | 0.0 | 125683 | 118920 |
| dense | 3 | 29730 | 29730 | 0.0 | 125683 | 118920 |
| dense | 4 | 29730 | 29730 | 0.0 | 125683 | 118920 |
| default_layerwise80 | 0 | 29730 | 6433 | 0.7836 | 125683 | 49024 |
| recipe | seed | batch size | median latency ms | p95 latency ms | throughput flows per s |
|---|---|---|---|---|---|
| dense | 0 | 1 | 0.248 | 0.284 | 4037.949 |
| dense | 0 | 32 | 2.176 | 2.428 | 14705.399 |
| dense | 0 | 256 | 16.226 | 17.745 | 15777.345 |
| dense | 0 | 1024 | 61.48 | 65.926 | 16655.904 |
| dense | 1 | 1 | 0.258 | 0.422 | 3879.322 |
| dense | 1 | 32 | 2.351 | 2.662 | 13611.238 |
| Notebook | Criterion | Value | Met |
|---|---|---|---|
| 30 | T1_compensation_pairs | 2.0 of 4 | False |
| 30 | T2_exact_p | 0.5333 of 105 | False |
| 30 | T3_within_pair_share | 0.5145 of 1 | False |
| 31 | i_mean_prune80_macro_f1_loss_gt_0.15 | 0.0187 | False |
| 31 | ii_classes_affected_in_ge3of5_seeds_ge_4 | 1.0 | False |
| 31 | iii_min_probe_auc_collapsed_ge_0.85 | 0.9902 | True |
| Manuscript item | Committed table(s) | Notebook(s) |
|---|---|---|
| Table 1, 2 | Methods | Notebook 34 structural check; src/models.py |
| Table 3, Fig. 1 | capacity_axis_combined.csv | 31, 32, 33 |
| Table 4 | cnn_policy_comparison.csv, gradual_comparison.csv | 34, 41 |
| Table 5, Fig. 2 | input_starvation_dose_response.csv | 35 |
| Table 6 | filter_sweep_dose_response.csv, controls_A_f128_80_wide.csv | 45, 46 |
| Table 7, Fig. 3 | tap_distribution_comparison.csv | 37 |