Sixty nats

An ideal rate observer's trials-to-threshold slope on the animal axis, log(C/T − 1), stops moving above about 30 nats, at −0.57 to −0.58 over C/T 4.5 to 27, against −0.66 for rats across all groups and −1 by construction for the one-parameter pigeon model. At 60 nats it also lands on the pigeon intercept, 83 trials against 85 at C/T 4.5. One fitted parameter, one free prediction.

Part of the ANN–BNN series. Project page: Where an inference law lives.

A design question had been open since 9 November. The transformer’s in-context acquisition sits a trial or two above the ideal observer, and the animals sit far above both: the one-parameter pigeon model, reinforcements to acquisition of about 297/(C/T − 1) (Gibbon and Balsam’s 1981 slope of about −1 on log(C/T − 1), with the constant from Harris and Gallistel’s reading of it), gives 85 trials at C/T 4.5, where the exact Bayes observer at a 4:1 posterior-odds criterion needs two. The gap is where the prior odds of contingency and the decision cost live. Should I fit that one parameter to the animal intercept, or not? Fitting it felt like giving the comparison a free knob. Not fitting it left no dynamic range to measure a slope against.

The cheap thing to do was to ask the ideal observer itself how its slope depends on the threshold, before anything was fitted. The observer accumulates, for each reinforcement with an exponential wait w, the full log likelihood ratio for contingency, log(C/T) − w(1/T − 1/C). (The research code’s earlier acquisition reference had dropped the w/C term, a fault found in review; this check keeps it.) A threshold is in nats, natural-log units of posterior odds, so a 4:1 criterion is 1.4 nats. I drew 400 streams at each of eight C/T values from 3 to 108 with T = 12, and recorded the median number of reinforcements until the accumulated evidence first crossed each threshold. Every slope below is a fit of log(median trials) on log(C/T − 1), the axis Harris and Gallistel use for rats, over C/T 4.5 to 27.

thresholdmedian reinforcements, C/T 3 to 108slope on log(C/T − 1), C/T 4.5 to 27
1.4 nats (odds 4:1)3, 2, 2, 1, 1, 1, 1, 1−0.40
10 nats23, 14, 11, 8, 6, 5, 4, 3−0.53
30 nats70, 41, 31, 23, 18, 13, 10, 9−0.57
60 nats138, 83, 63, 46, 36, 26, 20, 17−0.58
pigeon model 297/(C/T − 1)149, 85, 59, 37, 24, 11, 6, 3−1.00 by construction

Rats, on the same axis at a 4:1 criterion (Harris and Gallistel, 2026): −0.66 [−0.86, −0.46] across all 14 groups, and −0.82 [−1.11, −0.52] for the groups below C/T 72, which is the range this window overlaps.

Median reinforcements to threshold against C/T − 1, log-log, for four thresholds and the pigeon model; the observer's slope settles near −0.58 above 30 nats and the 60-nat curve meets the pigeon model at C/T 4.5.

The same computation runs below in the browser: move the threshold and the observer’s curve, its fitted slope over C/T 4.5 to 27 and its C/T 4.5 median against the pigeon model’s 85 are recomputed from 400 seeded streams per C/T. The dashed grey line is the rat slope, −0.66, drawn through the observer’s C/T 4.5 point.

Bayes floor explorer1101002C/T 33.5C/T 4.55C/T 68C/T 912.5C/T 13.526C/T 2753C/T 54107C/T 108C/T − 1 (log axis; the rat axis)median reinforcements to thresholdrat slope −0.66observerpigeon
observer, 60 nats pigeon model 297/(C/T − 1) rat slope −0.66 through the observer's C/T 4.5 point
fitted slope on log(C/T − 1), C/T 4.5 to 27
-0.57rats −0.66 [−0.86, −0.46]; below C/T 72, −0.82 [−1.11, −0.52]; pigeon model -1.00
median reinforcements at C/T 4.5
82against the pigeon model's 85 (0.97× the pigeon intercept)
C/T34.56913.52754108
observer, 60 nats13982624636262017
pigeon model149855937241163

Computed in your browser: 400 streams per C/T, Exp(T) waits, cumulative log likelihood ratio log(C/T) − w(1/T − 1/C) per reinforcement, seeded PRNG (seed 12345), so the figure is reproducible and the same streams are read at every threshold. The slope is a least-squares fit of log(median) on log(C/T − 1) over C/T 4.5 to 27, the shaded window. The rat slopes are Harris and Gallistel's (2026); the pigeon model is Gibbon and Balsam's (1981) one-parameter law as read by Harris and Gallistel. The table in the post above was computed with a different random seed; the medians agree within two trials.

Two things fall out. The slope is threshold-independent once the threshold is high enough: −0.57 at 30 nats and −0.58 at 60. Below that it is compressed towards zero by saturation at one trial, which is what my transformer runs had been fighting all week. And at 60 nats the observer reproduces the pigeon intercept at C/T 4.5, 83 trials against 85, while keeping a slope that is nowhere near the pigeon model’s −1 and inside both rat intervals, near the edge of the sub-72 one.

A note on the numbers, because the first version of this post got them wrong. I had fitted the observer and the pigeon model on log(C/T) and compared the results, −0.64 and −1.12, with the rat −0.66, which is fitted on log(C/T − 1). On one axis the comparison is −0.58 against −0.66 or −0.82 against −1.00; the qualitative reading survives, the headline closeness to the rat number was partly the axis.

That settles the design question in favour of fitting. The threshold is the one fitted parameter, and it is fitted to a single number, the intercept. The slope is then a free prediction of the observer, and it is the comparison that matters: −0.58 for the ideal observer, −0.66 or −0.82 for rats depending on range, −1 for the pigeon model, all on log(C/T − 1). Whether a meta-trained transformer with a low enough prior to have 10 to 100 trials of dynamic range lands on −0.58 or somewhere else is the retrain this series is waiting on, and it has not been run. Nothing here is about the transformer, and nothing is about why pigeons and rats differ; it is a property of the reference that the next measurement will be read against.

Code and data: the instrument is public at github.com/rohit-ravi2/gallistel-icl, with the meta-trained checkpoint at huggingface.co/rohitravi2/gallistel-icl and the conditioning streams at huggingface.co/datasets/rohitravi2/gallistel-streams.