{"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/error-feedback-can-accurately-compress","title":"Error Feedback Can Accurately Compress Preconditioners","arxiv_id":"2306.06098","date":"2023-06-09","proceeding":null,"authors":["Ionut-Vlad Modoranu","Aleksei Kalinov","Eldar Kurtic","Elias Frantar","Dan Alistarh"],"abstract":"Leveraging second-order information about the loss at the scale of deep networks is one of the main lines of approach for improving the performance of current optimizers for deep learning. Yet, existing approaches for accurate full-matrix preconditioning, such as Full-Matrix Adagrad (GGT) or Matrix-Free Approximate Curvature (M-FAC) suffer from massive storage costs when applied even to small-scale models, as they must store a sliding window of gradients, whose memory requirements are multiplicative in the model dimension. In this paper, we address this issue via a novel and efficient error-feedback technique that can be applied to compress preconditioners by up to two orders of magnitude in practice, without loss of convergence. Specifically, our approach compresses the gradient information via sparsification or low-rank compression \\emph{before} it is fed into the preconditioner, feeding the compression error back into future iterations. Experiments on deep neural networks show that this approach can compress full-matrix preconditioners to up to 99\\% sparsity without accuracy loss, effectively removing the memory overhead of full-matrix preconditioners such as GGT and M-FAC. Our code is available at \\url{https://github.com/IST-DASLab/EFCP}.","url_abs":"https://arxiv.org/abs/2306.06098v5","url_pdf":"https://arxiv.org/pdf/2306.06098v5.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"error-feedback-can-accurately-compress","repo_url":"https://github.com/ist-daslab/efcp","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"jax","reach":null}],"tasks":[{"task_slug":"classification-1","task_name":"Classification"},{"task_slug":"second-order-methods","task_name":"Second-order methods"}],"methods":[{"method_slug":"adagrad","method_name":"AdaGrad"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2306.06098","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2306.06098"}},"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":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/ist-daslab/efcp","reach":null}],"summary":{"ran_fixture":1,"ran_violates":1,"unverified":1},"by_repo_kind":{"official":{"samples":3,"ran":2,"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":0,"samples":[{"code_sha256_prefix":"18d3a7f286a19440","entry":"get_cos_and_angle","repo":"ist-daslab/efcp","repo_kind":"official","path":"asdl/asdl/precondition/mfac.py","file_url":"https://github.com/ist-daslab/efcp/blob/HEAD/asdl/asdl/precondition/mfac.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"18d3a7f286a19440"}},{"code_sha256_prefix":"2be17e7ba68d794f","entry":"map_interval","repo":"ist-daslab/efcp","repo_kind":"official","path":"asdl/asdl/precondition/mfac.py","file_url":"https://github.com/ist-daslab/efcp/blob/HEAD/asdl/asdl/precondition/mfac.py","link_basis":"first_harvest_node","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"2be17e7ba68d794f"}},{"code_sha256_prefix":"97f904ca550a9f6f","entry":"get_gpus","repo":"ist-daslab/efcp","repo_kind":"official","path":"asdl/asdl/precondition/mfac.py","file_url":"https://github.com/ist-daslab/efcp/blob/HEAD/asdl/asdl/precondition/mfac.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"97f904ca550a9f6f"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}