std1.0.0-beta-7 SafeC docs

std :: ml::attention

Struct std::MultiHeadAttention

#include <std/ml/attention.h> source

struct MultiHeadAttention {
    &FloatTensor Wq;
    &FloatTensor Wk;
    &FloatTensor Wv;
    &FloatTensor Wo;
    unsigned long numHeads;
    int causal;
    unsigned long window;
}

The projections around mha_forward as one layer:

out = mha_forward_mask(X Wq, X Wk, X Wv, numHeads, causal, window) Wo

X: [seqLen, dModel]. The weights require grad (a Module: module.h).

Fields

[dModel, dModel]

§unsigned long numHeadssource
§int causalsource

0 from new(); 1 for a decoder (each token sees itself and earlier ones)

§unsigned long windowsource

0 from new(); > 0 a sliding window

Methods

§&FloatTensor forward(const &FloatTensor X) constsource · definition

[seqLen, dModel] -> [seqLen, dModel]

§void collect_params(&Vec<&FloatTensor> out) constsource · definition

Parameterized (module.h): Wq, Wk, Wv, Wo.

§void collect_state(&Vec<&FloatTensor> out) constsource · definition
§void drop()source · definition
§void free() consumesource · definition

= drop()

§static struct MultiHeadAttention new( unsigned long dModel, unsigned long numHeads, &Rng rng, )source · definition

Weights U(-1/sqrt(dModel), 1/sqrt(dModel)) from rng; numHeads divides dModel.