pub struct SparseFfn { /* private fields */ }Expand description
Sparse Feed-Forward Network computation.
This implements a two-layer FFN that can compute using only a subset of neurons:
- W1: [hidden_dim, input_dim] - first projection (row-major for neuron access)
- W2_T: [hidden_dim, output_dim] - second projection TRANSPOSED (row-major for contiguous access)
- Activation function applied between layers
The sparse forward pass:
- Sparse first layer: only compute active neurons
- Apply activation function
- Sparse second layer: accumulate only active neuron contributions (now contiguous!)
§Performance Optimization
W2 is stored transposed so that accessing columns (by neuron index) becomes row access, which is contiguous in memory. This provides 15-25% speedup in the sparse accumulation step.
Implementations§
Source§impl SparseFfn
impl SparseFfn
Sourcepub fn new(
input_dim: usize,
hidden_dim: usize,
output_dim: usize,
activation: ActivationType,
) -> Result<Self>
pub fn new( input_dim: usize, hidden_dim: usize, output_dim: usize, activation: ActivationType, ) -> Result<Self>
Create a new sparse FFN with given dimensions.
Sourcepub fn from_weights(
w1: Array2<f32>,
w2: Array2<f32>,
b1: Array1<f32>,
b2: Array1<f32>,
activation: ActivationType,
) -> Result<Self>
pub fn from_weights( w1: Array2<f32>, w2: Array2<f32>, b1: Array1<f32>, b2: Array1<f32>, activation: ActivationType, ) -> Result<Self>
Create from existing weights.
Get hidden dimension.
Sourcepub fn output_dim(&self) -> usize
pub fn output_dim(&self) -> usize
Get output dimension.
Trait Implementations§
Source§impl<'de> Deserialize<'de> for SparseFfn
impl<'de> Deserialize<'de> for SparseFfn
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl FeedForward for SparseFfn
impl FeedForward for SparseFfn
Auto Trait Implementations§
impl Freeze for SparseFfn
impl RefUnwindSafe for SparseFfn
impl Send for SparseFfn
impl Sync for SparseFfn
impl Unpin for SparseFfn
impl UnwindSafe for SparseFfn
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
Mutably borrows from an owned value. Read more