pub struct StreamingTTT { /* private fields */ }Expand description
Streaming TTT model with RLS readout.
Processes one sample at a time. The TTT layer adapts its internal representation (fast weights) via gradient descent on reconstruction at every step. An RLS readout maps the TTT output to the target.
§Example
use irithyll::ttt::{StreamingTTT, TTTConfig};
use irithyll::StreamingLearner;
let config = TTTConfig::builder().d_model(16).eta(0.1).build().unwrap();
let mut model = StreamingTTT::new(config);
model.train(&[1.0, 2.0, 3.0], 4.0);
let pred = model.predict(&[1.0, 2.0, 3.0]);Implementations§
Source§impl StreamingTTT
impl StreamingTTT
Sourcepub fn past_warmup(&self) -> bool
pub fn past_warmup(&self) -> bool
Whether the model has seen enough samples for meaningful predictions.
Sourcepub fn prediction_uncertainty(&self) -> f64
pub fn prediction_uncertainty(&self) -> f64
Forward-looking prediction uncertainty from the RLS readout.
Returns the estimated prediction standard deviation, computed as the square root of the RLS noise variance (EWMA of squared residuals). This is a model-level uncertainty signal that does not require transformed features.
Returns 0.0 before any training has occurred.
Sourcepub fn output_dim(&self) -> usize
pub fn output_dim(&self) -> usize
Output dimension of the TTT layer.
Sourcepub fn pretrain_projections(&mut self, data: &[(&[f64], f64)], epochs: usize)
pub fn pretrain_projections(&mut self, data: &[(&[f64], f64)], epochs: usize)
Pretrain projection matrices W_K, W_V, W_Q using a warmup data buffer.
This is the “outer loop” learning step that the papers (Titans, TTT) require. Random projections cause the fast weights to learn in an arbitrary subspace. Pretraining aligns the projections with the actual data distribution.
Like MTS (minimum training samples) for trees: collect warmup data, learn the projection basis, then switch to pure streaming.
§Arguments
data— Slice of(features, target)pairs for pretraining.epochs— Number of passes over the data (typically 3–10).
§How it works
- Initialize — process data normally to build up W_fast and RLS readout so that readout weights exist for gradient computation.
- Optimize — for each epoch, accumulate gradients on W_Q (prediction loss) and W_K/W_V (reconstruction loss), clip, then update projections.
- Clean slate — reset fast weights, RLS, and all tracking state so the model is ready for normal streaming with learned projections.
Sourcepub fn set_projections(
&mut self,
w_k: &[f64],
w_v: &[f64],
w_q: &[f64],
) -> Result<(), ConfigError>
pub fn set_projections( &mut self, w_k: &[f64], w_v: &[f64], w_q: &[f64], ) -> Result<(), ConfigError>
Inject custom projection matrices for W_K, W_V, W_Q.
Enables researchers to load externally pre-trained projections
(e.g. from PyTorch/JAX experiments) before streaming.
Each matrix is [d_state x d_input] in row-major order.
Trait Implementations§
Source§impl Debug for StreamingTTT
impl Debug for StreamingTTT
Source§impl DiagnosticSource for StreamingTTT
impl DiagnosticSource for StreamingTTT
Source§fn config_diagnostics(&self) -> Option<ConfigDiagnostics>
fn config_diagnostics(&self) -> Option<ConfigDiagnostics>
None if not supported.Source§impl StreamingLearner for StreamingTTT
impl StreamingLearner for StreamingTTT
Source§fn train_one(&mut self, features: &[f64], target: f64, weight: f64)
fn train_one(&mut self, features: &[f64], target: f64, weight: f64)
Source§fn predict(&self, features: &[f64]) -> f64
fn predict(&self, features: &[f64]) -> f64
Source§fn n_samples_seen(&self) -> u64
fn n_samples_seen(&self) -> u64
Source§fn adjust_config(&mut self, lr_multiplier: f64, _lambda_delta: f64)
fn adjust_config(&mut self, lr_multiplier: f64, _lambda_delta: f64)
Source§fn readout_weights(&self) -> Option<&[f64]>
fn readout_weights(&self) -> Option<&[f64]>
Source§fn train(&mut self, features: &[f64], target: f64)
fn train(&mut self, features: &[f64], target: f64)
Source§fn predict_batch(&self, feature_matrix: &[&[f64]]) -> Vec<f64>
fn predict_batch(&self, feature_matrix: &[&[f64]]) -> Vec<f64>
Source§fn apply_structural_change(&mut self, _depth_delta: i32, _steps_delta: i32)
fn apply_structural_change(&mut self, _depth_delta: i32, _steps_delta: i32)
Source§fn replacement_count(&self) -> u64
fn replacement_count(&self) -> u64
Source§fn check_proactive_prune(&mut self) -> bool
fn check_proactive_prune(&mut self) -> bool
Source§fn set_prune_half_life(&mut self, _hl: usize)
fn set_prune_half_life(&mut self, _hl: usize)
Auto Trait Implementations§
impl Freeze for StreamingTTT
impl RefUnwindSafe for StreamingTTT
impl Send for StreamingTTT
impl Sync for StreamingTTT
impl Unpin for StreamingTTT
impl UnsafeUnpin for StreamingTTT
impl UnwindSafe for StreamingTTT
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more