{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/arxiv-2604-27833","title":"Taming Noise-Induced Prototype Degradation for Privacy-Preserving Personalized Federated Fine-Tuning","arxiv_id":"2604.27833","date":"2026-04-30","proceeding":null,"authors":["Yuhua Wang","Qinnan Zhang","Xiaodong Li","Huan Zhang","Yifan Sun","Wangjie Qiu","Hainan Zhang","Yongxin Tong","Zhiming Zheng"],"abstract":"Prototype-based Personalized Federated Learning (ProtoPFL) enables efficient multi-domain adaptation by communicating compact class prototypes, but directly sharing them poses privacy risks. A common defense involves per-example $\\ell_2$ clipping before prototype computation to bound sensitivity, followed by isotropic Gaussian noise to enforce Local Differential Privacy (LDP). However, Isotropic Gaussian Prototype Perturbation (IGPP) typically over-perturbs discriminative dimensions and struggles to balance the clipping threshold with representation fidelity. In this paper, we propose VPDR, a client-side privacy plug-in that seamlessly integrates into existing ProtoPFLs. Motivated by the observation that dimension-wise class variance reflects discriminability, we introduce Variance-adaptive Prototype Perturbation (VPP), which allocates less noise to discriminative subspaces, preserving semantic separability while ensuring privacy. We further develop Distillation-guided Clipping Regularization (DCR), which enables feature norms to adaptively concentrate near the predefined clipping threshold while maintaining prediction consistency. Theoretical analysis shows that our groupwise mechanism provides privacy guarantees no weaker than the isotropic baseline under the same privacy constraints. Extensive experiments on multi-domain benchmarks demonstrate that VPDR achieves a superior privacy-utility trade-off, outperforming IGPP in personalized federated fine-tuning without sacrificing robustness against realistic attacks.","url_abs":"https://arxiv.org/abs/2604.27833","url_pdf":"https://arxiv.org/pdf/2604.27833","source":{"archive":null,"snapshot":"2025-07-28","note":"not in the Papers with Code archive (frozen at the snapshot)","row_kind":"graph","title_abstract_authors_date":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)"},"code_links":[],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":null,"mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2604.27833"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/yuCoryx/ProtoPFL_VPDR","reach":null}],"summary":{"ran":12,"unverified":1},"by_repo_kind":{"found_in_text":{"samples":13,"ran":12,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":13,"samples":[{"code_sha256_prefix":"19c579f9334eb63b","entry":"build_dirichlet_partitions","repo":"yuCoryx/ProtoPFL_VPDR","repo_kind":"found_in_text","path":"utils/label_skew.py","file_url":"https://github.com/yuCoryx/ProtoPFL_VPDR/blob/HEAD/utils/label_skew.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"19c579f9334eb63b"}},{"code_sha256_prefix":"dd3a2b9b242bb09a","entry":"calculate_infonce_loss","repo":"yuCoryx/ProtoPFL_VPDR","repo_kind":"found_in_text","path":"utils/tools.py","file_url":"https://github.com/yuCoryx/ProtoPFL_VPDR/blob/HEAD/utils/tools.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"dd3a2b9b242bb09a"}},{"code_sha256_prefix":"b44e366fa88b55c6","entry":"dcr_forward","repo":"yuCoryx/ProtoPFL_VPDR","repo_kind":"found_in_text","path":"client.py","file_url":"https://github.com/yuCoryx/ProtoPFL_VPDR/blob/HEAD/client.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b44e366fa88b55c6"}},{"code_sha256_prefix":"b37f9f1d606e5ef7","entry":"ensure_ema_teacher_heads","repo":"yuCoryx/ProtoPFL_VPDR","repo_kind":"found_in_text","path":"client.py","file_url":"https://github.com/yuCoryx/ProtoPFL_VPDR/blob/HEAD/client.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b37f9f1d606e5ef7"}},{"code_sha256_prefix":"a97089deb1feaf9f","entry":"get_federated_loaders","repo":"yuCoryx/ProtoPFL_VPDR","repo_kind":"found_in_text","path":"utils/label_skew.py","file_url":"https://github.com/yuCoryx/ProtoPFL_VPDR/blob/HEAD/utils/label_skew.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"a97089deb1feaf9f"}},{"code_sha256_prefix":"f4103d2f2f29df98","entry":"get_global_proto","repo":"yuCoryx/ProtoPFL_VPDR","repo_kind":"found_in_text","path":"server.py","file_url":"https://github.com/yuCoryx/ProtoPFL_VPDR/blob/HEAD/server.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"f4103d2f2f29df98"}},{"code_sha256_prefix":"2cf7c74a1232cea7","entry":"get_model_info","repo":"yuCoryx/ProtoPFL_VPDR","repo_kind":"found_in_text","path":"utils/tools.py","file_url":"https://github.com/yuCoryx/ProtoPFL_VPDR/blob/HEAD/utils/tools.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"2cf7c74a1232cea7"}},{"code_sha256_prefix":"5b1bc6cedccad7b5","entry":"load_pacs","repo":"yuCoryx/ProtoPFL_VPDR","repo_kind":"found_in_text","path":"utils/domain_skew.py","file_url":"https://github.com/yuCoryx/ProtoPFL_VPDR/blob/HEAD/utils/domain_skew.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"5b1bc6cedccad7b5"}},{"code_sha256_prefix":"ee12522f22589e28","entry":"move_to_device","repo":"yuCoryx/ProtoPFL_VPDR","repo_kind":"found_in_text","path":"utils/tools.py","file_url":"https://github.com/yuCoryx/ProtoPFL_VPDR/blob/HEAD/utils/tools.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"ee12522f22589e28"}},{"code_sha256_prefix":"bb37562944a4aa43","entry":"partition_domain_skew_loaders","repo":"yuCoryx/ProtoPFL_VPDR","repo_kind":"found_in_text","path":"utils/domain_skew.py","file_url":"https://github.com/yuCoryx/ProtoPFL_VPDR/blob/HEAD/utils/domain_skew.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"bb37562944a4aa43"}},{"code_sha256_prefix":"495590663f1f4be4","entry":"receive_client_models","repo":"yuCoryx/ProtoPFL_VPDR","repo_kind":"found_in_text","path":"server.py","file_url":"https://github.com/yuCoryx/ProtoPFL_VPDR/blob/HEAD/server.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"495590663f1f4be4"}},{"code_sha256_prefix":"7f556266229020cb","entry":"soft_clip","repo":"yuCoryx/ProtoPFL_VPDR","repo_kind":"found_in_text","path":"client.py","file_url":"https://github.com/yuCoryx/ProtoPFL_VPDR/blob/HEAD/client.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"7f556266229020cb"}},{"code_sha256_prefix":"a6851c50f3b9f19d","entry":"load_digits","repo":"yuCoryx/ProtoPFL_VPDR","repo_kind":"found_in_text","path":"utils/domain_skew.py","file_url":"https://github.com/yuCoryx/ProtoPFL_VPDR/blob/HEAD/utils/domain_skew.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"a6851c50f3b9f19d"}}]},"arxiv_metadata":{"licence":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)","fields":["title","abstract","authors","date"],"primary_category":"cs.LG","source":"arxiv_2026.jsonl"},"syntology_extracted_results":{"kind":"leaderboard_placements","source":"Syntology's leaderboard-shaped extractor over the paper's own arXiv-HTML tables: a model pointed at a cell, the number was read from that cell and checked against the board's metric, dataset, split and scale, and an independent check accepted the entry; not reviewed by the paper's authors or the archive's editors","extractor_model":"global.anthropic.claude-sonnet-4-5-20250929-v1:0","verifier_model":"us.anthropic.claude-sonnet-4-5-20250929-v1:0","prompt_sha":"fa63d4bb9d755694","coverage":{"sentence":"Syntology has checked 6,264 of the 9,581 papers on this site that are newer than the archive; results from the others appear after they are checked.","papers_newer_than_archive":9581,"papers_checked":6264},"entries":[],"not_placed":{"boards":1,"rejected_by_independent_check":1,"refused_by_a_rule":0,"check_did_not_answer":0,"proposed_without_a_cell":0,"declined_by_site":0}}}