Data and code from: Double descent without digital computation
Data files
Sep 09, 2026 version files 506.58 MB
-
PNASscripts2026.zip
506.57 MB
-
README.md
4.70 KB
Abstract
In principle, computation with analog devices is faster, more compact, and lower power than using digital devices. However, compelling analog systems to perform precise computations, especially with many parameters, has long been a challenging goal, and stands in the way of low-power low-latency AI. Analog electronic contrastive local learning networks (CLLNs) learn to perform computations with many parameters, and in this dataset we include experimental demonstrations and companion simulations of such a system exhibiting the phenomenon of double descent, wherein raising the ratio of parameters to training datapoints first decreases then increases the generalization of a learned function. This phenomenon is a byproduct only of precise, many parameter optimization, and an indication that analog systems can exhibit essential properties of deep learning systems. Included here are data and scripts required to generate figures 2-4 and S1-3 of the manuscript titled "Double descent without digital computation".
https://doi.org/10.5061/dryad.8cz8w9h6p
Data from the double-descent experiments on a nonlinear analog learning network, with additional simulations on a digital network.
Description of the data and file structure
Unzip PNASscripts2026.zip and run all scripts from this folder (PNASscripts2026/). Helpers are in src/; all input data are in data/.
| Figure | Description | Script | Flags |
|---|---|---|---|
| Fig. 2 | Train and test error vs γ on the analog network | MakeFigs2and3.m |
DATASET = 'doubledescentZ_22' |
| Fig. 3 | Negative-class output histograms, hinge loss, and example decision maps | MakeFigs2and3.m |
DATASET = 'doubledescentZ_22'; NEGATIVE_CLASS = true |
| Fig. 4 | Simulated train/test loss (2 features) compared with experiment | MakeFig4.ipynb |
|
| Fig. S1 | Same as Fig. 2 but without overclamping technique (no double descent) | MakeFigs2and3.m |
DATASET = 'doubledescentZ_43' |
| Fig. S2 | Same as Fig. 3 for the positive class | MakeFigs2and3.m |
DATASET = 'doubledescentZ_22'; NEGATIVE_CLASS = false |
| Fig. S3 | Same as Fig. 4 but for more (16) input features (peak moves to predicted value) | MakeFigS3.ipynb |
In the python notebooks, USE_RAW = False (default) loads pre-averaged simulation means; USE_RAW = True averages from the per-run .csv.gz files. RUN_SWEEP = True will resimulate (slow).
src/ {MATLAB and Python helpers: Experiment2.m, network_project_superclass2.m, nonlinearClassificationMap6.m, makeErrorBar.m, makePlotPrettyNow.m, makeColormap.m, train_data.py, numerics.py}
data/{CSV, MAT, and gzipped simulation files listed below}
Experimental CSVs (doubledescentZ_22*.csv; doubledescentZ_43* for Fig. S1)
One row per experimental run unless noted. Training arrays are padded with NaN where a run has fewer than the maximum number of training points.
doubledescentZ_22Dates.csv: run ID (date-time string).doubledescentZ_22TrainLabel.csv,TrainIn1.csv,TrainIn2.csv,TrainOutput.csv: training labels, two analog inputs, and measured outputs.doubledescentZ_22TestLabel.csv,TestIn1.csv,TestIn2.csv: shared test labels and inputs (one row).doubledescentZ_22TestOutput.csv: measured test outputs (rows = runs, columns = test points).
Labels are in 0–1 measurement units with magnitude ρ = 0.005; multiply by NODEMULT ≈ 0.45 to convert to volts.
Other experimental files
doubledescentZ_22_data.mat: task coefficients and related constants (coeff, TEST, …) used to draw the decision line in Fig. 3.
experiment_doubledescentZ_22_TRA=*.mat: nine example runs (training size TRA = 2, 6, or 32) stored as an experiment object (class in Experiment2.m). Fields include:
- TRA: training set size
- TST: test set size
- MES: number of measurement steps
- SOR, TAR: number of source (input) and target (output) nodes
- NODEMULT, GATEMULT: convert 0–1 stored values to volts
- TRAIN, TEST: training/test sets (sources then targets are rows)
- HorizontalCapacitors, VerticalCapacitors: gate voltages vs. measurement step (0–1; × GATEMULT for volts)
- TestFreeState: free-state node voltages vs. measurement step and test point (0–1; × NODEMULT for volts)
Simulation CSVs
Columns: train_size (M), params (P), features, hinge_loss_train, hinge_loss_test, lambda, function (tanh or relu). Raw files also have replicate.
SimulatedData_both_07pct_02F_withconst5.28.csv: Fig. 4 means (2 input features). Matching raw runs are split across *_raw_tanh_P1-5.csv.gz, *_raw_tanh_P6-10.csv.gz, *_raw_relu_P1-5.csv.gz, *_raw_relu_P6-10.csv.gz.
SimulatedData_both_07pct_16F_withconst5.4.csv: Fig. S3 means (16 input features). Matching raw runs are *_raw_tanh.csv.gz and *_raw_relu.csv.gz.
Sharing/Access information
Data were taken in experiments and simulations described in the manuscript.
Code/Software
MATLAB figures: MATLAB R2020b or later. Python figures: Python 3 with numpy, pandas, matplotlib, scipy, and tqdm.
