rnn
std.nn.rnn · Level L2Run an Elman recurrent network over a sequence of inputs; returns every hidden state. A Scan of rnn_cell, differentiable end to end.
hₜ = tanh(W·hₜ₋₁ + U·xₜ + b)
Signature
rnn(h0: f64[k], X: f64[n, m], W: f64[k, k], U: f64[k, m], b: f64[k]) → f64[n, k]
Structure
The function as NOVA stores it: one box per input, operation and output, and arrows that carry values. A double border marks another library function this one runs — called once, or by Scan once per element; select it to open that function.
- input
- operation
- constant
- call
- output
Verification
- Signature proven by NOVA’s shape solver, for every size.
- Agrees with the reference
h = h0; for each x in X: h = np.tanh(W @ h + U @ x + b)to 80 digits (100-digit arithmetic), on all 40 test cases. - All 618 float64 results inside the running error bound; the closest uses 10% of it.
- Interpreter and NumPy backend return bit-identical results.
Accuracy in detail
- correctly rounded (the float64 nearest the exact value)
- 77%
- bit-equal to the NumPy formula in float64
- 100%
- largest error, in units in the last place
- 1.9e+3
Large ulp counts appear only where cancellation drives a result toward zero; the absolute error is still inside the bound.
Identity
sha256:a6d078c36678c99c773bddd11dc46ccd38d9c481ae49502d7062b9016e8be7b1The semantic hash of the graph. It changes when the program changes, and never when only its documentation does.