OSCR

Mutual information minimization enhances noise robustness and induces fault containment in functionally differentiated recurrent neural networks.

Code ↔ Paper

8 matches between paragraphs of the paper and lines of its authors' code, computed by the harvester (lexical-v1). Click a colored paragraph or line to see its counterpart.

The 8 matches
  1. [1] § Materials and methods › Robustness analysis › Noise robustness ↔ analyze_noise_metrics.py, lines 1–30 · score 0.95 · degradation slope, degradation curve, linear interpolation, pairwise comparison, Holm corrected, confidence interval
  2. [2] § Materials and methods › Robustness analysis › Damage robustness ↔ analyze_ablation_stats.py, lines 1–40 · score 0.91 · magnitude differs, Ablation targets, model R2, primary ablated, primary subgroup, fit
  3. [3] § Materials and methods › Evaluation of modularity ↔ analyze_mechanism.py, lines 1–32 · score 0.87 · readout weight, GRU activities, inter subgroup, absolute correlation, primary subgroup, diagonal
  4. [4] § Results › Damage robustness ↔ analyze_ablation_stats.py, lines 1–40 · score 0.82 · damage depends, ablation target, primary ablated, primary subgroup, signature, quantified
  5. [5] § Results › Noise robustness ↔ analyze_noise_metrics.py, lines 1–30 · score 0.75 · degradation slope, pairwise comparisons, Holm corrected, metrics, Cohen, Welch
  6. [6] § Results › Task performance and functional differentiation ↔ analyze_mechanism.py, lines 1–32 · score 0.65 · GRU activities, absolute correlation, MI minimization, segregated, block, predefined
  7. [7] § Materials and methods › Robustness analysis › Damage robustness ↔ determine_orientations.py, lines 1–33 · score 0.56 · absolute correlation, assignment, predefined, ablation, Lorenz, hidden
  8. [8] § Results › Damage robustness ↔ plot_dropout_robustness_from_saved.py, lines 96–127 · score 0.52 · L2 primary ablated, ablated units, curves, CI, model, robustness

Paper

Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC

The paper is loaded when this pane is shown.

The authors' code

Python · 160 lines · 6.1 KB · MIT · 2 matches

  1. # %%
  2. """Curve-level noise-robustness metrics (Reviewer 1, point 3).
  3. Beyond the per-sigma Welch tests, this script summarizes each model's whole
  4. R^2(sigma) degradation curve with three interpretable metrics and compares the
  5. training conditions with effect sizes and confidence intervals:
  6. * AUC: area under the R^2(sigma) curve (trapezoid), higher = more robust.
  7. * slope: linear degradation slope of R^2 vs sigma (least squares), more negative
  8. = faster degradation.
  9. * sigma_cross: the noise level at which R^2 first falls below a threshold
  10. (default 0.9 and 0.5), by linear interpolation; larger = more robust.
  11. For each metric it reports the per-condition mean with a t-based 95% CI, and for
  12. each pairwise comparison Cohen's d, the difference with its 95% CI, and a Welch
  13. t-test p-value (Holm-corrected across the three comparisons).
  14. Input: the per-model R^2 curves saved by generate_fig3_noise_robustness_data.py
  15. (``ketteikeisu3_*.npy``, shape (n_models, n_sigma)).
  16. """
  17. from __future__ import annotations
  18. import argparse
  19. import csv
  20. from itertools import combinations
  21. from pathlib import Path
  22. import numpy as np
  23. from scipy.stats import t as student_t, ttest_ind
  24. from statsmodels.stats.multitest import multipletests
  25. # label -> filename written by generate_fig3_noise_robustness_data.py
  26. CONDITION_FILES = {
  27. "MI+L2": "ketteikeisu3_MINEあり.npy",
  28. "L2-only": "ketteikeisu3_MINEなし.npy",
  29. "unregularized": "ketteikeisu3_正則化なし.npy",
  30. }
  31. DEFAULT_LEVELS = np.linspace(0.0, 0.30, 31)
  32. CROSS_THRESHOLDS = (0.9, 0.5)
  33. # ``np.trapz`` was renamed to ``np.trapezoid`` in NumPy 2.0; support both.
  34. _trapezoid = getattr(np, "trapezoid", None) or np.trapz
  35. def t_ci(values, confidence=0.95):
  36. values = np.asarray(values, dtype=float)
  37. n = len(values)
  38. mean = values.mean()
  39. if n < 2:
  40. return mean, np.nan, np.nan
  41. half = values.std(ddof=1) / np.sqrt(n) * student_t.ppf((1 + confidence) / 2, n - 1)
  42. return mean, mean - half, mean + half
  43. def cohens_d(a, b):
  44. a, b = np.asarray(a, float), np.asarray(b, float)
  45. na, nb = len(a), len(b)
  46. sp = np.sqrt(((na - 1) * a.var(ddof=1) + (nb - 1) * b.var(ddof=1)) / (na + nb - 2))
  47. return (a.mean() - b.mean()) / sp if sp > 0 else np.nan
  48. def diff_ci(a, b, confidence=0.95):
  49. """95% CI for the difference of means (Welch)."""
  50. a, b = np.asarray(a, float), np.asarray(b, float)
  51. na, nb = len(a), len(b)
  52. se = np.sqrt(a.var(ddof=1) / na + b.var(ddof=1) / nb)
  53. # Welch-Satterthwaite dof
  54. df = se**4 / ((a.var(ddof=1) / na) ** 2 / (na - 1) + (b.var(ddof=1) / nb) ** 2 / (nb - 1))
  55. crit = student_t.ppf((1 + confidence) / 2, df)
  56. d = a.mean() - b.mean()
  57. return d, d - crit * se, d + crit * se
  58. def sigma_crossing(curve, levels, threshold):
  59. """First sigma where the curve drops below threshold (linear interp)."""
  60. curve = np.asarray(curve)
  61. below = np.where(curve < threshold)[0]
  62. if below.size == 0:
  63. return float(levels[-1]) # never crosses within the swept range
  64. j = below[0]
  65. if j == 0:
  66. return float(levels[0])
  67. x0, x1 = levels[j - 1], levels[j]
  68. y0, y1 = curve[j - 1], curve[j]
  69. if y1 == y0:
  70. return float(x1)
  71. return float(x0 + (threshold - y0) * (x1 - x0) / (y1 - y0))
  72. def per_model_metrics(curves, levels):
  73. out = {"AUC": [], "slope": []}
  74. for thr in CROSS_THRESHOLDS:
  75. out[f"sigma@{thr}"] = []
  76. for r in curves:
  77. out["AUC"].append(_trapezoid(r, levels))
  78. out["slope"].append(np.polyfit(levels, r, 1)[0])
  79. for thr in CROSS_THRESHOLDS:
  80. out[f"sigma@{thr}"].append(sigma_crossing(r, levels, thr))
  81. return {k: np.asarray(v) for k, v in out.items()}
  82. def main():
  83. parser = argparse.ArgumentParser(description=__doc__)
  84. parser.add_argument("--input-dir", type=Path, default=Path("."))
  85. parser.add_argument("--output", type=Path, default=Path("noise_metrics_summary.csv"))
  86. args = parser.parse_args()
  87. levels = DEFAULT_LEVELS
  88. data = {}
  89. for label, fname in CONDITION_FILES.items():
  90. path = args.input_dir / fname
  91. if path.exists():
  92. data[label] = per_model_metrics(np.load(path), levels)
  93. else:
  94. print(f" note: {fname} not found, skipping {label}")
  95. if not data:
  96. raise SystemExit("No condition files found.")
  97. metrics = ["AUC", "slope"] + [f"sigma@{thr}" for thr in CROSS_THRESHOLDS]
  98. rows = []
  99. print("=== Per-condition metrics (mean [95% CI]) ===")
  100. for m in metrics:
  101. print(f"\n{m}:")
  102. for label, md in data.items():
  103. mean, lo, hi = t_ci(md[m])
  104. n = len(md[m])
  105. print(f" {label:14s} n={n:3d} {mean:.4f} [{lo:.4f}, {hi:.4f}]")
  106. rows.append({"metric": m, "comparison": f"{label} (mean)", "value": f"{mean:.5f}",
  107. "ci_low": f"{lo:.5f}", "ci_high": f"{hi:.5f}", "n": n, "cohens_d": "", "p_holm": ""})
  108. print("\n=== Pairwise comparisons (Cohen's d, diff [95% CI], Welch p Holm-corrected per metric) ===")
  109. for m in metrics:
  110. labels = list(data.keys())
  111. pairs = list(combinations(labels, 2))
  112. pvals = []
  113. recs = []
  114. for a, b in pairs:
  115. va, vb = data[a][m], data[b][m]
  116. d = cohens_d(va, vb)
  117. diff, dlo, dhi = diff_ci(va, vb)
  118. p = ttest_ind(va, vb, equal_var=False).pvalue
  119. pvals.append(p)
  120. recs.append((a, b, d, diff, dlo, dhi))
  121. p_holm = multipletests(pvals, method="holm")[1] if pvals else []
  122. print(f"\n{m}:")
  123. for (a, b, d, diff, dlo, dhi), ph in zip(recs, p_holm):
  124. print(f" {a} vs {b}: d={d:+.3f}, diff={diff:+.4f} [{dlo:+.4f},{dhi:+.4f}], p_holm={ph:.4g}")
  125. rows.append({"metric": m, "comparison": f"{a} vs {b}", "value": f"{diff:.5f}",
  126. "ci_low": f"{dlo:.5f}", "ci_high": f"{dhi:.5f}", "n": "",
  127. "cohens_d": f"{d:.4f}", "p_holm": f"{ph:.4g}"})
  128. with args.output.open("w", newline="") as f:
  129. w = csv.DictWriter(f, fieldnames=["metric", "comparison", "value", "ci_low", "ci_high", "n", "cohens_d", "p_holm"])
  130. w.writeheader()
  131. w.writerows(rows)
  132. print(f"\nWrote {args.output}")
  133. if __name__ == "__main__":
  134. main()

analyze_noise_metrics.py at commit e17ca3f, under MIT · at the source

Overview

Authors: Yuki Tomoda1, Yutaka Yamaguti2
  1. Graduate School of Engineering, Fukuoka Institute of Technology, Fukuoka, Japan
  2. Faculty of Information Engineering, Fukuoka Institute of Technology, Fukuoka, Japan
Institutions: Fukuoka Institute of Technology (Japan)
Journal: Frontiers in neuroscience, volume 20, article 1892212
Dates: received 27 May 2026; accepted 24 July 2026; published online 13 August 2026
Type: Brief report · Language: English
License: CC BY
Identifiers: DOI 10.3389/fnins.2026.1892212 · PMID 42661901 · PMCID PMC13518512 · OpenAlex W7202370954
Open access: gold, a free copy (OpenAlex)
Status: code verified
Methods: Spectral & time-frequency, Statistics, Connectivity, Graphs
Keywords: chaotic dynamics, functional differentiation, modularity, mutual information, recurrent neural network, robustness
Topic: Neural dynamics and brain function (Cognitive Neuroscience, Neuroscience), according to OpenAlex
Citations: not cited yet (Europe PMC); 19 references in the paper

Abstract

Functional differentiation, the emergence of specialized neural populations, is a hallmark of biological brains and has been proposed to provide robustness, metabolic efficiency, and evolvability. In our previous work, we showed that minimizing mutual information (MI) between predefined subgroups of a recurrent neural network (RNN), using mutual information neural estimation (MINE), promotes the emergence of functionally specialized modules. However, whether such information-theoretically induced differentiation translates into functional benefits has remained unclear. Here we examine the robustness of MI-minimized RNNs trained on a chaotic signal separation task in which a superimposed input from the Lorenz and Rössler systems must be demixed into separate output channels. We find that MI minimization, while preserving task accuracy, consistently, and significantly enhances tolerance to input noise and produces qualitatively distinct responses to neuronal ablation: damage to the subgroup an output relies on impairs that output sharply, whereas damage to the other subgroup leaves it largely intact. This selectivity is essentially absent in control networks trained without the MI constraint. These results indicate that minimizing statistical dependence between neural populations not only induces functional specialization but also confers a form of fault containment, isolating damage to the affected output while sparing the others, supporting the view that modular organization is an adaptive consequence of information-theoretic constraints on neural representation.

Reproduced under the paper's license (CC BY), from the paper cited above.

Repositories

Its files are read in the Code ↔ Paper reader above, with 8 matches between paragraphs and lines of code.

yymgch/mirnn-robust

License: MIT
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Commit: e17ca3f28aa5ef40e832a421fa4a0e64caba773b, 10 July 2026
Languages: Python (12), Shell (1)
Size: 17 files, 13 scripts
Software Heritage: not archived
Found in: “Data availability statement”
Holds: README, license file, environment (requirements.txt)
Not found: CITATION.cff, tests, continuous integration, documentation
Tools: NumPy (12 files), SciPy (7 files), scikit-learn (5 files), Keras (4 files), TensorFlow (4 files), Matplotlib (3 files), statsmodels (3 files), pandas (2 files), NetworkX (1 file)
Availability: 1 check, the latest on 27 September 2026: the link answers
  • 27 September 2026: the link answers
15 files

Zenodo 21287687

License: MIT
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Size: 1 file
Software Heritage: not checked
Found in: “Data availability statement”
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: NumPy (12 files), SciPy (7 files), scikit-learn (5 files), Keras (4 files), TensorFlow (4 files), Matplotlib (3 files), statsmodels (3 files), pandas (2 files), NetworkX (1 file)
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
  • 27 September 2026: the link answers (HTTP 200)
15 files

The paper's code and data availability statement is in the Data section.

Tracing map

Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.

What the map holds:

  • 2 repositories of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
  • 26 scripts, each with its path and the digest of its content;
  • 8 matches between paragraphs of the paper and lines of the code (method lexical-v1);
  • neither the text of the paper nor the code itself.

Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.

Data

No dataset and no data link were found in the paper.

Data availability statement

The code used to generate and analyze the simulations of this study is openly available on GitHub at https://github.com/yymgch/mirnn-robust and archived at Zenodo (DOI: https://doi.org/10.5281/zenodo.21287687).

Reproduced under the paper's license (CC BY), from the paper cited above.

Versions

The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.

Version 3, 28 September 2026

  • Funding: added Japan Society for the Promotion of Science: 23K11256

Version 1, 27 September 2026: the first record

Recorded: type, language, journal, volume, pages, dates, 2 authors, 6 keywords, 17 references.

Cite

This paper

Tomoda, Y., & Yamaguti, Y. (2026). Mutual information minimization enhances noise robustness and induces fault containment in functionally differentiated recurrent neural networks. Frontiers in neuroscience, 20, 1892212. https://doi.org/10.3389/fnins.2026.1892212

BibTeX

@article{tomoda2026mutual,
author = {Tomoda, Yuki and Yamaguti, Yutaka},
title = {{Mutual information minimization enhances noise robustness and induces fault containment in functionally differentiated recurrent neural networks}},
journal = {Frontiers in neuroscience},
year = {2026},
month = aug,
volume = {20},
pages = {1892212},
publisher = {Frontiers Media SA},
issn = {1662-4548},
doi = {10.3389/fnins.2026.1892212},
url = {https://doi.org/10.3389/fnins.2026.1892212},
pmid = {42661901},
pmcid = {PMC13518512}
}

RIS

TY - JOUR
AU - Tomoda, Yuki
AU - Yamaguti, Yutaka
TI - Mutual information minimization enhances noise robustness and induces fault containment in functionally differentiated recurrent neural networks
T2 - Frontiers in neuroscience
J2 - Front Neurosci
PY - 2026
DA - 2026/08/13
VL - 20
SP - 1892212
SN - 1662-4548
PB - Frontiers Media SA
DO - 10.3389/fnins.2026.1892212
UR - https://doi.org/10.3389/fnins.2026.1892212
LA - en
ER -

CSL-JSON

{
"id": "10.3389/fnins.2026.1892212",
"type": "article-journal",
"title": "Mutual information minimization enhances noise robustness and induces fault containment in functionally differentiated recurrent neural networks",
"container-title": "Frontiers in neuroscience",
"author": [
{
"family": "Tomoda",
"given": "Yuki"
},
{
"family": "Yamaguti",
"given": "Yutaka"
}
],
"container-title-short": "Front Neurosci",
"volume": "20",
"page": "1892212",
"DOI": "10.3389/fnins.2026.1892212",
"PMID": "42661901",
"PMCID": "PMC13518512",
"ISSN": "1662-4548",
"publisher": "Frontiers Media SA",
"URL": "https://doi.org/10.3389/fnins.2026.1892212",
"language": "en",
"issued": {
"date-parts": [
[
2026,
8,
13
]
]
}
}

The tracing map gets a citation of its own once an author has validated it and it has a DOI.

Similar papers

The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.

[1] doi:10.1038/s41467-026-74466-2 [code]
Neuromorphic hierarchical modular reservoirs.
Journal: Nature communications
In common: NetworkX, statsmodels, scikit-learn, 4 other tools, 4 references
[2] doi:10.1038/s42003-026-10957-8 [code]
Brain defence by the extracellular matrix protein Cochlin.
Journal: Communications biology
In common: Keras, TensorFlow, NetworkX, 6 other tools
[3] doi:10.1371/journal.pcbi.1014571 [code]
SynAPSeg: A novel dataset and image analysis framework for deep learning-based synapse detection and quantification.
Journal: PLoS computational biology
In common: Keras, TensorFlow, NetworkX, 6 other tools
[4] doi:10.1016/j.isci.2026.116439 [code]
Decoding the role of transcriptomic clocks in the human prefrontal cortex.
Journal: iScience
In common: Keras, TensorFlow, NetworkX, 6 other tools
[5] doi:10.1093/nar/gkag706 [code]
scDifformer: diffusion-based post-training for virtual cell modeling across large-scale single-cell data.
Journal: Nucleic acids research
In common: Keras, TensorFlow, NetworkX, 6 other tools
[6] doi:10.1002/ana.78203 [code]
AI-Driven Mapping of Seizure Spread Patterns.
Journal: Annals of neurology
In common: Keras, TensorFlow, NetworkX, 6 other tools
[7] doi:10.1126/sciadv.aed3650 [code]
Truthful visualizations for mass spectrometry imaging enable high-spatial-resolution interactive &lt;i&gt;m/z&lt;/i&gt; mapping and exploration.
Journal: Science advances
In common: Keras, TensorFlow, NetworkX, 5 other tools
[8] doi:10.1016/j.bpj.2026.06.005 [code]
Curvature-based machine-learning method for automated segmentation of dendritic spines.
Journal: Biophysical journal
In common: Keras, TensorFlow, NetworkX, 5 other tools
[9] doi:10.3389/fnsys.2026.1822122 [code]
Convergence-divergence circuits for multimodal integration of innate and learned opponent valences.
Journal: Frontiers in systems neuroscience
In common: Keras, TensorFlow, NetworkX, 5 other tools
[10] doi:10.1038/s41467-026-72687-z [code]
Chordless cycle filtrations for dimensionality detection in complex networks via topological data analysis.
Journal: Nature communications
In common: Keras, TensorFlow, NetworkX, 5 other tools

Contribute

The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.

Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.

Request its removal

To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).

Discussion, reproductions, activity

Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.

Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.

Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.