{"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/disentangling-by-subspace-diffusion","title":"Disentangling by Subspace Diffusion","arxiv_id":"2006.12982","date":"2020-06-23","proceeding":"NeurIPS 2020 12","authors":["David Pfau","Irina Higgins","Aleksandar Botev","Sébastien Racanière"],"abstract":"We present a novel nonparametric algorithm for symmetry-based disentangling of data manifolds, the Geometric Manifold Component Estimator (GEOMANCER). GEOMANCER provides a partial answer to the question posed by Higgins et al. (2018): is it possible to learn how to factorize a Lie group solely from observations of the orbit of an object it acts on? We show that fully unsupervised factorization of a data manifold is possible if the true metric of the manifold is known and each factor manifold has nontrivial holonomy -- for example, rotation in 3D. Our algorithm works by estimating the subspaces that are invariant under random walk diffusion, giving an approximation to the de Rham decomposition from differential geometry. We demonstrate the efficacy of GEOMANCER on several complex synthetic manifolds. Our work reduces the question of whether unsupervised disentangling is possible to the question of whether unsupervised metric learning is possible, providing a unifying insight into the geometric nature of representation learning.","url_abs":"https://arxiv.org/abs/2006.12982v2","url_pdf":"https://arxiv.org/pdf/2006.12982v2.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":"disentangling-by-subspace-diffusion","repo_url":"https://github.com/deepmind/deepmind-research/tree/master/geomancer","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":0,"framework":"tf","reach":null}],"tasks":[{"task_slug":"metric-learning","task_name":"Metric Learning"},{"task_slug":"representation-learning","task_name":"Representation Learning"}],"methods":[{"method_slug":"geomancer","method_name":"GEOMANCER"}],"datasets_introduced":[{"slug":"s3o4d","name":"S3O4D","full_name":"Stanford 3D Objects for Disentangling"}],"methods_introduced":[{"slug":"geomancer","name":"GEOMANCER","full_name":"Geometric Manifold Component Estimator"}],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2006.12982","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2006.12982"}},"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/deepmind/deepmind-research/tree/master/geomancer","reach":null}],"summary":{"ran_fixture":4,"ran_draft_wrong":2,"unverified":3},"by_repo_kind":{"official":{"samples":9,"ran":6,"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":"796ea6e47b7de60f","entry":"cluster_subspaces","repo":"deepmind/deepmind-research","repo_kind":"official","path":"geomancer/geomancer.py","file_url":"https://github.com/deepmind/deepmind-research/blob/HEAD/geomancer/geomancer.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"796ea6e47b7de60f"}},{"code_sha256_prefix":"b64fa2f6404a8f75","entry":"ffdiag","repo":"deepmind/deepmind-research","repo_kind":"official","path":"geomancer/geomancer.py","file_url":"https://github.com/deepmind/deepmind-research/blob/HEAD/geomancer/geomancer.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"b64fa2f6404a8f75"}},{"code_sha256_prefix":"366974755f039210","entry":"make_connection","repo":"deepmind/deepmind-research","repo_kind":"official","path":"geomancer/geomancer.py","file_url":"https://github.com/deepmind/deepmind-research/blob/HEAD/geomancer/geomancer.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"366974755f039210"}},{"code_sha256_prefix":"cfc00c11b004f03a","entry":"make_nearest_neighbors_graph","repo":"deepmind/deepmind-research","repo_kind":"official","path":"geomancer/geomancer.py","file_url":"https://github.com/deepmind/deepmind-research/blob/HEAD/geomancer/geomancer.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"cfc00c11b004f03a"}},{"code_sha256_prefix":"a10eba5982f8b00a","entry":"sym_op","repo":"deepmind/deepmind-research","repo_kind":"official","path":"geomancer/geomancer.py","file_url":"https://github.com/deepmind/deepmind-research/blob/HEAD/geomancer/geomancer.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"a10eba5982f8b00a"}},{"code_sha256_prefix":"eedf089341d1d425","entry":"vec_to_sym","repo":"deepmind/deepmind-research","repo_kind":"official","path":"geomancer/geomancer.py","file_url":"https://github.com/deepmind/deepmind-research/blob/HEAD/geomancer/geomancer.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"eedf089341d1d425"}},{"code_sha256_prefix":"ab9c21314cb23449","entry":"fit","repo":"deepmind/deepmind-research","repo_kind":"official","path":"geomancer/geomancer.py","file_url":"https://github.com/deepmind/deepmind-research/blob/HEAD/geomancer/geomancer.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":"ab9c21314cb23449"}},{"code_sha256_prefix":"b406722434735411","entry":"make_laplacian","repo":"deepmind/deepmind-research","repo_kind":"official","path":"geomancer/geomancer.py","file_url":"https://github.com/deepmind/deepmind-research/blob/HEAD/geomancer/geomancer.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":"b406722434735411"}},{"code_sha256_prefix":"99327d6bf1cf0f06","entry":"make_tangents","repo":"deepmind/deepmind-research","repo_kind":"official","path":"geomancer/geomancer.py","file_url":"https://github.com/deepmind/deepmind-research/blob/HEAD/geomancer/geomancer.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":"99327d6bf1cf0f06"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}