The miniml.nn module
The miniml.nn module provides some basic utilities to build simple common ML models. Among these:
miniml.nn.activationsincludes common activation functions and anActivationlayer class that can be used as a container for them;miniml.nn.linearcontains a basic linear layer;miniml.nn.mlpcontains a simple Multilayer Perceptron;miniml.nn.composecontains aStackmodel that allows to execute sequentially a list of models, passing the output of the previous one as input to the following, aParallelmodel for running multiple models on the same input and aggregating their output by either concatenation or sum, and convenienceIdentity(returns the input) andTake(extracts an index from an axis) models;miniml.nn.mhacontains aMultiHeadAttentionlayer;miniml.nn.layer_normcontains aLayerNormlayer;miniml.nn.rbfcontains various radial basis functions;miniml.nn.rbfnetcontains a basic radial basis function net layer;miniml.nn.embeddingcontains a dictionary embedding block;miniml.nn.orthocontains aCayleyMatrixparameter, namely a matrix forced to have orthogonal columns.
Check the API docs for more information.
Compositing
The compositing layers are particularly convenient for building complex models. For example, consider the need to add a skip connection to a multi-head attention layer, and cap it all with a layer norm. Then you can build:
mha = MultiHeadAttention(n_embed=16, n_head=4)
mha_w_skip = Parallel([mha, Identity()], mode="sum")
lnorm = LayerNorm((16,))
block = Stack([mha_w_skip, lnorm])
This will produce the following architecture:
graph TD
Input[Input] --> MHA
Input --> Identity
subgraph Parallel
MHA[MultiHeadAttention]
Identity[Identity]
end
MHA --> Sum(("+"))
Identity --> Sum
Sum --> LayerNorm[LayerNorm]
LayerNorm --> Output[Output]