pub struct ResidualGate {
pub gates: Vec<f32>,
}Expand description
Per-loop residual scaling gate. h^(τ) = h̃^(τ) + ρ_τ ⊙ h^(τ-1) Zero-init so first iteration is h̃^(1) (no residual from “previous”).
Fields§
§gates: Vec<f32>Per-loop gates: [loop_count, dim]. Each ρ_τ is element-wise, zero-init.
Implementations§
Source§impl ResidualGate
impl ResidualGate
Sourcepub fn new_loop_stable(loop_count: usize, dim: usize, decay: f32) -> Self
pub fn new_loop_stable(loop_count: usize, dim: usize, decay: f32) -> Self
Deterministic loop-stable residual gates (Plan 483 T2.1, §3.5 path 2).
Sets gates to a constant decay factor for τ > 0, enabling information
carry-forward between T passes. The first loop (τ=0) has zero gates
(no previous state to carry forward).
This is a modelless construction — no training, no gradient descent.
The decay factor controls the trade-off between carry-forward strength
and stability. Conservative values (0.1–0.3) are safe for most weight
matrices; larger values risk divergence.
Rationale: the zero-init default (new()) makes every T-pass effectively
independent — no hidden state carries forward between loops. This
undermines the LT2 paper’s “effective depth T×n_layer” claim. A non-zero
deterministic gate restores the residual connection across loops without
requiring trained gate parameters.
§Arguments
loop_count- Number of T-passes (T)dim- Hidden dimension (n_embd)decay- Constant gate value for τ > 0 (e.g., 0.1 = conservative)
Sourcepub fn new_loop_stable_exp_decay(
loop_count: usize,
dim: usize,
base: f32,
) -> Self
pub fn new_loop_stable_exp_decay( loop_count: usize, dim: usize, base: f32, ) -> Self
Deterministic loop-stable residual gates with exponential decay (Plan 483 T2.1, §3.5 path 2 variant).
ρ_τ = base^(τ-1) for τ > 0 — later loops contribute exponentially less.
This schedule mirrors the spectral-radius-based stabilization where the
residual contribution decays as the hidden state converges.
§Arguments
loop_count- Number of T-passes (T)dim- Hidden dimension (n_embd)base- Decay base (e.g., 0.5 → ρ_1=1.0, ρ_2=0.5, ρ_3=0.25, …)
Trait Implementations§
Source§impl Clone for ResidualGate
impl Clone for ResidualGate
Source§fn clone(&self) -> ResidualGate
fn clone(&self) -> ResidualGate
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for ResidualGate
impl RefUnwindSafe for ResidualGate
impl Send for ResidualGate
impl Sync for ResidualGate
impl Unpin for ResidualGate
impl UnsafeUnpin for ResidualGate
impl UnwindSafe for ResidualGate
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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