{"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/dictionary-and-prior-learning-with-unrolled","title":"Understanding approximate and unrolled dictionary learning for pattern recovery","arxiv_id":"2106.06338","date":"2021-06-11","proceeding":"ICLR 2022 4","authors":["Benoît Malézieux","Thomas Moreau","Matthieu Kowalski"],"abstract":"Dictionary learning consists of finding a sparse representation from noisy data and is a common way to encode data-driven prior knowledge on signals. Alternating minimization (AM) is standard for the underlying optimization, where gradient descent steps alternate with sparse coding procedures. The major drawback of this method is its prohibitive computational cost, making it unpractical on large real-world data sets. This work studies an approximate formulation of dictionary learning based on unrolling and compares it to alternating minimization to find the best trade-off between speed and precision. We analyze the asymptotic behavior and convergence rate of gradients estimates in both methods. We show that unrolling performs better on the support of the inner problem solution and during the first iterations. Finally, we apply unrolling on pattern learning in magnetoencephalography (MEG) with the help of a stochastic algorithm and compare the performance to a state-of-the-art method.","url_abs":"https://arxiv.org/abs/2106.06338v3","url_pdf":"https://arxiv.org/pdf/2106.06338v3.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":"dictionary-and-prior-learning-with-unrolled","repo_url":"https://github.com/bmalezieux/unrolled_dl","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"dictionary-learning","task_name":"Dictionary Learning"},{"task_slug":"unrolling","task_name":"Rolling Shutter Correction"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2106.06338","atlas_url":"https://app.syntology.ai/?focus=2106.06338","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2106.06338"}},"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/bmalezieux/unrolled_dl","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":"bcd29c73f5f1180f","entry":"condat_vu_iteration","repo":"bmalezieux/unrolled_dl","repo_kind":"official","path":"plipy/loss_and_gradients.py","file_url":"https://github.com/bmalezieux/unrolled_dl/blob/HEAD/plipy/loss_and_gradients.py","link_basis":"first_harvest_node","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":"bcd29c73f5f1180f"}},{"code_sha256_prefix":"0487c4d5581f5388","entry":"cost_matrix_v","repo":"bmalezieux/unrolled_dl","repo_kind":"official","path":"experiments_approximate/experiments/benchmark_meg.py","file_url":"https://github.com/bmalezieux/unrolled_dl/blob/HEAD/experiments_approximate/experiments/benchmark_meg.py","link_basis":"first_harvest_node","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":"0487c4d5581f5388"}},{"code_sha256_prefix":"fb5ade9a35fff503","entry":"fista_iteration","repo":"bmalezieux/unrolled_dl","repo_kind":"official","path":"plipy/loss_and_gradients.py","file_url":"https://github.com/bmalezieux/unrolled_dl/blob/HEAD/plipy/loss_and_gradients.py","link_basis":"first_harvest_node","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":"fb5ade9a35fff503"}},{"code_sha256_prefix":"398828f7e4e99059","entry":"ista_iteration","repo":"bmalezieux/unrolled_dl","repo_kind":"official","path":"plipy/loss_and_gradients.py","file_url":"https://github.com/bmalezieux/unrolled_dl/blob/HEAD/plipy/loss_and_gradients.py","link_basis":"first_harvest_node","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":"398828f7e4e99059"}},{"code_sha256_prefix":"394d3d798e8be9aa","entry":"recovery_score","repo":"bmalezieux/unrolled_dl","repo_kind":"official","path":"experiments_approximate/experiments/benchmark_meg.py","file_url":"https://github.com/bmalezieux/unrolled_dl/blob/HEAD/experiments_approximate/experiments/benchmark_meg.py","link_basis":"first_harvest_node","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":"394d3d798e8be9aa"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}