{"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/double-control-variates-for-gradient","title":"Double Control Variates for Gradient Estimation in Discrete Latent Variable Models","arxiv_id":"2111.05300","date":"2021-11-09","proceeding":"pproximateinference AABI Symposium 2022 2","authors":["Michalis K. Titsias","Jiaxin Shi"],"abstract":"Stochastic gradient-based optimisation for discrete latent variable models is challenging due to the high variance of gradients. We introduce a variance reduction technique for score function estimators that makes use of double control variates. These control variates act on top of a main control variate, and try to further reduce the variance of the overall estimator. We develop a double control variate for the REINFORCE leave-one-out estimator using Taylor expansions. For training discrete latent variable models, such as variational autoencoders with binary latent variables, our approach adds no extra computational cost compared to standard training with the REINFORCE leave-one-out estimator. We apply our method to challenging high-dimensional toy examples and training variational autoencoders with binary latent variables. We show that our estimator can have lower variance compared to other state-of-the-art estimators.","url_abs":"https://arxiv.org/abs/2111.05300v3","url_pdf":"https://arxiv.org/pdf/2111.05300v3.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":"double-control-variates-for-gradient","repo_url":"https://github.com/thjashin/double-cv","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"tf","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[],"methods":[{"method_slug":"reinforce","method_name":"REINFORCE"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2111.05300","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2111.05300"}},"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/thjashin/double-cv","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"unverified":5},"by_repo_kind":{"official":{"samples":5,"ran":0,"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":"4a9cf0f4fb5bff3a","entry":"estimate_gradients","repo":"thjashin/double-cv","repo_kind":"official","path":"src/experiment_launcher_singlelayer.py","file_url":"https://github.com/thjashin/double-cv/blob/HEAD/src/experiment_launcher_singlelayer.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"4a9cf0f4fb5bff3a"}},{"code_sha256_prefix":"3e9f920962698723","entry":"initialize_grad_variables","repo":"thjashin/double-cv","repo_kind":"official","path":"src/experiment_launcher_singlelayer.py","file_url":"https://github.com/thjashin/double-cv/blob/HEAD/src/experiment_launcher_singlelayer.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"3e9f920962698723"}},{"code_sha256_prefix":"185d634d6277d581","entry":"logit_func","repo":"thjashin/double-cv","repo_kind":"official","path":"src/networks.py","file_url":"https://github.com/thjashin/double-cv/blob/HEAD/src/networks.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"185d634d6277d581"}},{"code_sha256_prefix":"38ce39f9b5f128ef","entry":"process_batch_input","repo":"thjashin/double-cv","repo_kind":"official","path":"src/experiment_launcher_singlelayer.py","file_url":"https://github.com/thjashin/double-cv/blob/HEAD/src/experiment_launcher_singlelayer.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"38ce39f9b5f128ef"}},{"code_sha256_prefix":"ea241979ac2a803c","entry":"safe_log_prob","repo":"thjashin/double-cv","repo_kind":"official","path":"src/networks.py","file_url":"https://github.com/thjashin/double-cv/blob/HEAD/src/networks.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"ea241979ac2a803c"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}