{"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-fixes-signsgd-and-other","title":"Error Feedback Fixes SignSGD and other Gradient Compression Schemes","arxiv_id":"1901.09847","date":"2019-01-28","proceeding":null,"authors":["Sai Praneeth Karimireddy","Quentin Rebjock","Sebastian U. Stich","Martin Jaggi"],"abstract":"Sign-based algorithms (e.g. signSGD) have been proposed as a biased gradient compression technique to alleviate the communication bottleneck in training large neural networks across multiple workers. We show simple convex counter-examples where signSGD does not converge to the optimum. Further, even when it does converge, signSGD may generalize poorly when compared with SGD. These issues arise because of the biased nature of the sign compression operator. We then show that using error-feedback, i.e. incorporating the error made by the compression operator into the next step, overcomes these issues. We prove that our algorithm EF-SGD with arbitrary compression operator achieves the same rate of convergence as SGD without any additional assumptions. Thus EF-SGD achieves gradient compression for free. Our experiments thoroughly substantiate the theory and show that error-feedback improves both convergence and generalization. Code can be found at \\url{https://github.com/epfml/error-feedback-SGD}.","url_abs":"https://arxiv.org/abs/1901.09847v2","url_pdf":"https://arxiv.org/pdf/1901.09847v2.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-fixes-signsgd-and-other","repo_url":"https://github.com/epfml/error-feedback-SGD","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":null},{"paper_slug":"error-feedback-fixes-signsgd-and-other","repo_url":"https://github.com/MindSpore-scientific-2/code-11/tree/main/signSGD","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":0,"framework":"mindspore","reach":null}],"tasks":[],"methods":[{"method_slug":"sgd","method_name":"SGD"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/1901.09847","atlas_url":"https://app.syntology.ai/?focus=1901.09847","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"1901.09847"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-25T09:33:49+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/epfml/error-feedback-SGD","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/MindSpore-scientific-2/code-11/tree/main/signSGD","reach":null}],"summary":{"ran_draft_wrong":1,"ran_honours":2},"by_repo_kind":{"official":{"samples":3,"ran":3,"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":"0f23e7e681845fe0","entry":"ResNet18","repo":"epfml/error-feedback-SGD","repo_kind":"official","path":"models/resnet.py","file_url":"https://github.com/epfml/error-feedback-SGD/blob/HEAD/models/resnet.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"0f23e7e681845fe0"}},{"code_sha256_prefix":"d979441c66cfc515","entry":"scaled_sign","repo":"epfml/error-feedback-SGD","repo_kind":"official","path":"optimizers/ErrorFeedbackSGD.py","file_url":"https://github.com/epfml/error-feedback-SGD/blob/HEAD/optimizers/ErrorFeedbackSGD.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"d979441c66cfc515"}},{"code_sha256_prefix":"f45a2479358fd34b","entry":"unscaled_sign","repo":"epfml/error-feedback-SGD","repo_kind":"official","path":"optimizers/ErrorFeedbackSGD.py","file_url":"https://github.com/epfml/error-feedback-SGD/blob/HEAD/optimizers/ErrorFeedbackSGD.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f45a2479358fd34b"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}