{"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/beyond-geometry-comparing-the-temporal","title":"Beyond Geometry: Comparing the Temporal Structure of Computation in Neural Circuits with Dynamical Similarity Analysis","arxiv_id":"2306.10168","date":"2023-06-16","proceeding":"NeurIPS 2023 11","authors":["Mitchell Ostrow","Adam Eisen","Leo Kozachkov","Ila Fiete"],"abstract":"How can we tell whether two neural networks utilize the same internal processes for a particular computation? This question is pertinent for multiple subfields of neuroscience and machine learning, including neuroAI, mechanistic interpretability, and brain-machine interfaces. Standard approaches for comparing neural networks focus on the spatial geometry of latent states. Yet in recurrent networks, computations are implemented at the level of dynamics, and two networks performing the same computation with equivalent dynamics need not exhibit the same geometry. To bridge this gap, we introduce a novel similarity metric that compares two systems at the level of their dynamics, called Dynamical Similarity Analysis (DSA). Our method incorporates two components: Using recent advances in data-driven dynamical systems theory, we learn a high-dimensional linear system that accurately captures core features of the original nonlinear dynamics. Next, we compare different systems passed through this embedding using a novel extension of Procrustes Analysis that accounts for how vector fields change under orthogonal transformation. In four case studies, we demonstrate that our method disentangles conjugate and non-conjugate recurrent neural networks (RNNs), while geometric methods fall short. We additionally show that our method can distinguish learning rules in an unsupervised manner. Our method opens the door to comparative analyses of the essential temporal structure of computation in neural circuits.","url_abs":"https://arxiv.org/abs/2306.10168v3","url_pdf":"https://arxiv.org/pdf/2306.10168v3.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":"beyond-geometry-comparing-the-temporal","repo_url":"https://github.com/mitchellostrow/dsa","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"beyond-geometry-comparing-the-temporal","repo_url":"https://github.com/qglht/repal","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[],"methods":[{"method_slug":"focus","method_name":"Focus"},{"method_slug":"procrustes","method_name":"Procrustes"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2306.10168","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2306.10168"}},"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/qglht/repal","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/mitchellostrow/dsa","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"unverified":17},"by_repo_kind":{"official":{"samples":17,"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":"ce82b9159690e201","entry":"coarse_grain","repo":"mitchellostrow/dsa","repo_kind":"official","path":"DSA/preprocessing.py","file_url":"https://github.com/mitchellostrow/dsa/blob/HEAD/DSA/preprocessing.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":"ce82b9159690e201"}},{"code_sha256_prefix":"f619414f24f51acd","entry":"compute_angle","repo":"mitchellostrow/dsa","repo_kind":"official","path":"DSA/simdist.py","file_url":"https://github.com/mitchellostrow/dsa/blob/HEAD/DSA/simdist.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":"f619414f24f51acd"}},{"code_sha256_prefix":"2c07e6403bc87552","entry":"compute_residuals","repo":"mitchellostrow/dsa","repo_kind":"official","path":"DSA/resdmd.py","file_url":"https://github.com/mitchellostrow/dsa/blob/HEAD/DSA/resdmd.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":"2c07e6403bc87552"}},{"code_sha256_prefix":"70f1203a7cd08d77","entry":"compute_residuals_pykoopman","repo":"mitchellostrow/dsa","repo_kind":"official","path":"DSA/resdmd.py","file_url":"https://github.com/mitchellostrow/dsa/blob/HEAD/DSA/resdmd.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":"70f1203a7cd08d77"}},{"code_sha256_prefix":"4b89656fc2246ff0","entry":"compute_residuals_subspace_dmdc","repo":"mitchellostrow/dsa","repo_kind":"official","path":"DSA/resdmd.py","file_url":"https://github.com/mitchellostrow/dsa/blob/HEAD/DSA/resdmd.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":"4b89656fc2246ff0"}},{"code_sha256_prefix":"e56244a3bcbf33c4","entry":"compute_subspace_angles","repo":"mitchellostrow/dsa","repo_kind":"official","path":"DSA/simdist.py","file_url":"https://github.com/mitchellostrow/dsa/blob/HEAD/DSA/simdist.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":"e56244a3bcbf33c4"}},{"code_sha256_prefix":"43f545258d864847","entry":"embed_data_DMDc","repo":"mitchellostrow/dsa","repo_kind":"official","path":"DSA/dmdc.py","file_url":"https://github.com/mitchellostrow/dsa/blob/HEAD/DSA/dmdc.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":"43f545258d864847"}},{"code_sha256_prefix":"727929ee435d8106","entry":"embed_signal_torch","repo":"mitchellostrow/dsa","repo_kind":"official","path":"DSA/dmd.py","file_url":"https://github.com/mitchellostrow/dsa/blob/HEAD/DSA/dmd.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":"727929ee435d8106"}},{"code_sha256_prefix":"43a5b3592b84536d","entry":"mae","repo":"mitchellostrow/dsa","repo_kind":"official","path":"DSA/stats.py","file_url":"https://github.com/mitchellostrow/dsa/blob/HEAD/DSA/stats.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":"43a5b3592b84536d"}},{"code_sha256_prefix":"aa9cf3edabb13e0d","entry":"mase","repo":"mitchellostrow/dsa","repo_kind":"official","path":"DSA/stats.py","file_url":"https://github.com/mitchellostrow/dsa/blob/HEAD/DSA/stats.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":"aa9cf3edabb13e0d"}},{"code_sha256_prefix":"f56b12d183adacab","entry":"normalize_data","repo":"mitchellostrow/dsa","repo_kind":"official","path":"DSA/preprocessing.py","file_url":"https://github.com/mitchellostrow/dsa/blob/HEAD/DSA/preprocessing.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":"f56b12d183adacab"}},{"code_sha256_prefix":"be99d312201d0c3d","entry":"normalize_dataset","repo":"mitchellostrow/dsa","repo_kind":"official","path":"DSA/preprocessing.py","file_url":"https://github.com/mitchellostrow/dsa/blob/HEAD/DSA/preprocessing.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":"be99d312201d0c3d"}},{"code_sha256_prefix":"fb3e7fc8f5aae568","entry":"pad_zeros","repo":"mitchellostrow/dsa","repo_kind":"official","path":"DSA/simdist.py","file_url":"https://github.com/mitchellostrow/dsa/blob/HEAD/DSA/simdist.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":"fb3e7fc8f5aae568"}},{"code_sha256_prefix":"16779f71fd8051f6","entry":"split_train_test","repo":"mitchellostrow/dsa","repo_kind":"official","path":"DSA/sweeps.py","file_url":"https://github.com/mitchellostrow/dsa/blob/HEAD/DSA/sweeps.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":"16779f71fd8051f6"}},{"code_sha256_prefix":"dea4ecf3be0f5736","entry":"sweep_local_dmd","repo":"mitchellostrow/dsa","repo_kind":"official","path":"DSA/sweeps.py","file_url":"https://github.com/mitchellostrow/dsa/blob/HEAD/DSA/sweeps.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":"dea4ecf3be0f5736"}},{"code_sha256_prefix":"aa3a546937bafe14","entry":"sweep_pykoopman","repo":"mitchellostrow/dsa","repo_kind":"official","path":"DSA/sweeps.py","file_url":"https://github.com/mitchellostrow/dsa/blob/HEAD/DSA/sweeps.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":"aa3a546937bafe14"}},{"code_sha256_prefix":"e1d6e88bffac80b7","entry":"torch_convert","repo":"mitchellostrow/dsa","repo_kind":"official","path":"DSA/stats.py","file_url":"https://github.com/mitchellostrow/dsa/blob/HEAD/DSA/stats.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":"e1d6e88bffac80b7"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}