Class: Ignis::AI::Transformer::SwiGLU
- Inherits:
-
NN::Module
- Object
- NN::Module
- Ignis::AI::Transformer::SwiGLU
- Defined in:
- lib/nnw/ai/transformer/swiglu.rb
Overview
SwiGLU feed-forward (Llama / Qwen / SmolLM / Mistral):
down( silu(gate(x)) ⊙ up(x) )
Two input projections (gate, up) into the hidden dim and one output (down) back to embed. silu(z) = z·sigmoid(z). Llama-style uses no bias. This is a pure composition of verified ops (Linear, silu, elementwise mul), so autograd produces the backward automatically.
Instance Attribute Summary
Attributes inherited from NN::Module
Instance Method Summary collapse
-
#forward(x) ⇒ Tensor
[*, embed_dim].
-
#initialize(embed_dim, ff_dim, bias: false, device_id: 0) ⇒ SwiGLU
constructor
A new instance of SwiGLU.
- #to_s ⇒ String
Methods inherited from NN::Module
#call, #eval!, #load_state_dict, #named_parameters, #num_parameters, #parameters, #state_dict, #to, #train!, #zero_grad!
Constructor Details
#initialize(embed_dim, ff_dim, bias: false, device_id: 0) ⇒ SwiGLU
Returns a new instance of SwiGLU.
17 18 19 20 21 22 23 24 |
# File 'lib/nnw/ai/transformer/swiglu.rb', line 17 def initialize(, ff_dim, bias: false, device_id: 0) super() @embed_dim = @ff_dim = ff_dim @gate = register_module("gate", NN::Linear.new(, ff_dim, bias: bias, device_id: device_id)) @up = register_module("up", NN::Linear.new(, ff_dim, bias: bias, device_id: device_id)) @down = register_module("down", NN::Linear.new(ff_dim, , bias: bias, device_id: device_id)) end |
Instance Method Details
#forward(x) ⇒ Tensor
Returns [*, embed_dim].
28 29 30 |
# File 'lib/nnw/ai/transformer/swiglu.rb', line 28 def forward(x) @down.call(@gate.call(x).silu * @up.call(x)) end |
#to_s ⇒ String
33 34 35 |
# File 'lib/nnw/ai/transformer/swiglu.rb', line 33 def to_s "SwiGLU(embed=#{@embed_dim}, ff=#{@ff_dim})" end |