{ "
This is a tutorial/implementation of multi-headed attention from paper Attention Is All You Need in PyTorch. The implementation is inspired from Annotated Transformer.
\nHere is the training code that uses a basic transformer with MHA for NLP auto-regression.
\nHere is an experiment implementation that trains a simple transformer.
\n": "\u0db8\u0dd9\u0dba \u0d9a\u0da9\u0daf\u0dcf\u0dc3\u0dd2 \u0dc0\u0dbd\u0dd2\u0db1\u0dca \u0db6\u0dc4\u0dd4-\u0dc1\u0dd3\u0dbb\u0dca\u0dc2 \u0d85\u0dc0\u0db0\u0dcf\u0db1\u0dba \u0dba\u0ddc\u0db8\u0dd4 \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0dda \u0db1\u0dd2\u0db6\u0db1\u0dca\u0db0\u0db1\u0dba\u0d9a\u0dca/\u0d9a\u0dca\u0dbb\u0dd2\u0dba\u0dcf\u0dad\u0dca\u0db8\u0d9a \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0d9a\u0dd2 \u0d85\u0dc0\u0db0\u0dcf\u0db1\u0dba PyTorch \u0dc4\u0dd2 \u0d94\u0db6\u0da7 \u0d85\u0dc0\u0dc1\u0dca\u0dba \u0dc3\u0dd2\u0dba\u0dbd\u0dca\u0dbd \u0dc0\u0dda. \u0d9a\u0dca\u0dbb\u0dd2\u0dba\u0dcf\u0dad\u0dca\u0db8\u0d9a \u0d9a\u0dd2\u0dbb\u0dd3\u0db8 \u0d86\u0db1\u0dd4\u0db7\u0dcf\u0dc0 \u0dbd\u0dad\u0dca \u0da7\u0dca\u0dbb\u0dcf\u0db1\u0dca\u0dc3\u0dca\u0dc6\u0ddd\u0db8\u0dbb\u0dca \u0dc0\u0dd9\u0dad\u0dd2\u0db1\u0dca \u0daf\u0dda\u0dc0\u0dcf\u0db1\u0dd4\u0db7\u0dcf\u0dc0\u0dba\u0dd9\u0db1\u0dca \u0dba.
\nNLP \u0dc3\u0dca\u0dc0\u0dba\u0d82\u0d9a\u0dca\u0dbb\u0dd3\u0dba-\u0db4\u0dca\u0dbb\u0dad\u0dd2\u0d9c\u0dcf\u0db8\u0dd3 \u0dc3\u0db3\u0dc4\u0dcf MHA \u0dc3\u0db8\u0d9f \u0db8\u0dd6\u0dbd\u0dd2\u0d9a \u0da7\u0dca\u0dbb\u0dcf\u0db1\u0dca\u0dc3\u0dca\u0dc6\u0ddd\u0db8\u0dbb\u0dba\u0d9a\u0dca \u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf \u0d9a\u0dbb\u0db1 \u0db4\u0dd4\u0dc4\u0dd4\u0dab\u0dd4 \u0d9a\u0dda\u0dad\u0dba \u0db8\u0dd9\u0db1\u0dca\u0db1.
\n\n", "This method can be overridden for other variations like relative attention.
\n": "\u0dc3\u0dcf\u0db4\u0dda\u0d9a\u0dca\u0dc2\u0d85\u0dc0\u0db0\u0dcf\u0db1\u0dba \u0dc0\u0dd0\u0db1\u0dd2 \u0dc0\u0dd9\u0db1\u0dad\u0dca \u0dc0\u0dd9\u0db1\u0dc3\u0dca\u0d9a\u0db8\u0dca \u0dc3\u0db3\u0dc4\u0dcf \u0db8\u0dd9\u0db8 \u0d9a\u0dca\u0dbb\u0db8\u0dba \u0d89\u0d9a\u0dca\u0db8\u0dc0\u0dcf \u0dba\u0dcf \u0dc4\u0dd0\u0d9a\u0dd2\u0dba.
\n", "\nThis computes scaled multi-headed attention for given _^_0_^_, _^_1_^_ and _^_2_^_ vectors.
\n_^_3_^_
\nIn simple terms, it finds keys that matches the query, and gets the values of those keys.
\nIt uses dot-product of query and key as the indicator of how matching they are. Before taking the _^_4_^_ the dot-products are scaled by _^_5_^_. This is done to avoid large dot-product values causing softmax to give very small gradients when _^_6_^_ is large.
\nSoftmax is calculated along the axis of of the sequence (or time).
\n": "\n\u0db8\u0dd9\u0dba\u0dbd\u0db6\u0dcf \u0daf\u0dd3 _^_0_^_\u0d87\u0dad\u0dd2 _^_1_^_ \u0dc3\u0dc4 _^_2_^_ \u0daf\u0ddb\u0dc1\u0dd2\u0d9a \u0dc3\u0db3\u0dc4\u0dcf \u0db6\u0dc4\u0dd4-\u0dc1\u0dd3\u0dbb\u0dca\u0dc2 \u0d85\u0dc0\u0db0\u0dcf\u0db1\u0dba \u0db4\u0dbb\u0dd2\u0db8\u0dcf\u0dab\u0dba \u0d9a\u0dbb\u0dba\u0dd2.
\n_^_3_^_
\n\u0dc3\u0dbb\u0dc5\u0dc0\u0d9a\u0dd2\u0dc0\u0dc4\u0ddc\u0dad\u0dca, \u0d91\u0dba \u0dc0\u0dd2\u0db8\u0dc3\u0dd4\u0db8\u0da7 \u0d9c\u0dd0\u0dbd\u0db4\u0dd9\u0db1 \u0dba\u0dad\u0dd4\u0dbb\u0dd4 \u0dc3\u0ddc\u0dba\u0dcf \u0d9c\u0db1\u0dca\u0db1\u0dcf \u0d85\u0dad\u0dbb \u0d91\u0db8 \u0dba\u0dad\u0dd4\u0dbb\u0dd4 \u0dc0\u0dbd \u0d85\u0d9c\u0dba\u0db1\u0dca \u0dbd\u0db6\u0dcf \u0d9c\u0db1\u0dd3.
\n\u0d91\u0dba\u0d94\u0dc0\u0dd4\u0db1\u0dca \u0d9a\u0dd9\u0dad\u0dbb\u0db8\u0dca \u0d9c\u0dd0\u0dbd\u0db4\u0dd9\u0db1 \u0daf\u0dbb\u0dca\u0dc1\u0d9a\u0dba\u0d9a\u0dca \u0dbd\u0dd9\u0dc3 \u0dc0\u0dd2\u0db8\u0dc3\u0dd4\u0db8 \u0dc4\u0dcf \u0db4\u0dca\u0dbb\u0db0\u0dcf\u0db1 \u0dad\u0dd2\u0dad\u0dca-\u0db1\u0dd2\u0dc2\u0dca\u0db4\u0dcf\u0daf\u0db1 \u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf \u0d9a\u0dbb\u0dba\u0dd2. _^_4_^_ \u0dad\u0dd2\u0dad\u0dca-\u0db1\u0dd2\u0dc2\u0dca\u0db4\u0dcf\u0daf\u0db1 \u0d9c\u0dd0\u0db1\u0dd3\u0db8\u0da7 \u0db4\u0dd9\u0dbb \u0db4\u0dbb\u0dd2\u0db8\u0dcf\u0dab\u0dba \u0d9a\u0dbb\u0db1\u0dd4 \u0dbd\u0dd0\u0db6\u0dda _^_5_^_. \u0db8\u0dd9\u0dba \u0dc3\u0dd2\u0daf\u0dd4 \u0d9a\u0dbb\u0db1\u0dd4 \u0dbd\u0db6\u0db1\u0dca\u0db1\u0dda \u0dc0\u0dd2\u0dc1\u0dcf\u0dbd \u0dad\u0dd2\u0dad\u0dca \u0db1\u0dd2\u0dc2\u0dca\u0db4\u0dcf\u0daf\u0db1 \u0d85\u0d9c\u0dba\u0db1\u0dca \u0dc0\u0dc5\u0d9a\u0dca\u0dc0\u0dcf \u0d9c\u0dd0\u0db1\u0dd3\u0db8 \u0dc3\u0db3\u0dc4\u0dcf \u0dc0\u0db1 \u0d85\u0dad\u0dbb \u0d91\u0db8\u0d9f\u0dd2\u0db1\u0dca \u0dc3\u0ddc\u0dc6\u0dca\u0da7\u0dca\u0db8\u0dd0\u0d9a\u0dca\u0dc3\u0dca \u0dc0\u0dd2\u0dc1\u0dcf\u0dbd _^_6_^_ \u0dc0\u0db1 \u0dc0\u0dd2\u0da7 \u0d89\u0dad\u0dcf \u0d9a\u0dd4\u0da9\u0dcf \u0d85\u0db1\u0dd4\u0d9a\u0dca\u0dbb\u0db8\u0dd2\u0d9a \u0db4\u0dca\u0dbb\u0db8\u0dcf\u0dab\u0dba\u0d9a\u0dca \u0dbd\u0db6\u0dcf \u0daf\u0dda.
\nSoftmax\u0d85\u0db1\u0dd4\u0d9a\u0dca\u0dbb\u0db8\u0dba (\u0dc4\u0ddd \u0d9a\u0dcf\u0dbd\u0dba) \u0d85\u0d9a\u0dca\u0dc2\u0dba \u0d94\u0dc3\u0dca\u0dc3\u0dda \u0d9c\u0dab\u0db1\u0dba \u0d9a\u0dbb\u0db1\u0dd4 \u0dbd\u0dd0\u0db6\u0dda.
\n", "\nThis module does a linear transformation and splits the vector into given number of heads for multi-head attention. This is used to transform key, query, and value vectors.
\n": "\n\u0db8\u0dd9\u0db8\u0db8\u0ddc\u0da9\u0dd2\u0dba\u0dd4\u0dbd\u0dba \u0dbb\u0dda\u0d9b\u0dd3\u0dba \u0db4\u0dbb\u0dd2\u0dc0\u0dbb\u0dca\u0dad\u0db1\u0dba\u0d9a\u0dca \u0dc3\u0dd2\u0daf\u0dd4 \u0d9a\u0dbb\u0db1 \u0d85\u0dad\u0dbb \u0db6\u0dc4\u0dd4 \u0dc4\u0dd2\u0dc3 \u0d85\u0dc0\u0db0\u0dcf\u0db1\u0dba \u0dc3\u0db3\u0dc4\u0dcf \u0daf\u0ddb\u0dc1\u0dd2\u0d9a\u0dba \u0dbd\u0db6\u0dcf \u0daf\u0dd3 \u0d87\u0dad\u0dd2 \u0dc4\u0dd2\u0dc3\u0dca \u0d9c\u0dab\u0db1\u0da7 \u0db6\u0dd9\u0daf\u0dda. \u0dba\u0dad\u0dd4\u0dbb, \u0dc0\u0dd2\u0db8\u0dc3\u0dd4\u0db8\u0dc3\u0dc4 \u0d85\u0d9c\u0dba\u0daf\u0ddb\u0dc1\u0dd2\u0d9a \u0db4\u0dbb\u0dd2\u0dc0\u0dbb\u0dca\u0dad\u0db1\u0dba \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0da7 \u0db8\u0dd9\u0dba \u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf \u0d9a\u0dbb\u0dba\u0dd2.
\n", "_^_0_^_ has shape _^_1_^_, where first dimension is the query dimension. If the query dimension is equal to _^_2_^_ it will be broadcasted.
\n": "_^_0_^_ \u0dc4\u0dd0\u0da9\u0dba \u0d87\u0dad _^_1_^_, \u0d91\u0dc4\u0dd2\u0daf\u0dd3 \u0db4\u0dc5\u0db8\u0dd4 \u0db8\u0dcf\u0db1\u0dba \u0dc0\u0dd2\u0db8\u0dc3\u0dd4\u0db8\u0dca \u0db8\u0dcf\u0db1\u0dba\u0d9a\u0dca \u0dc0\u0dda. \u0dc0\u0dd2\u0db8\u0dc3\u0dd4\u0db8 \u0db8\u0dcf\u0db1\u0dba\u0d9a\u0dca \u0dc3\u0db8\u0dcf\u0db1 \u0dc0\u0dda \u0db1\u0db8\u0dca _^_2_^_ \u0d91\u0dba \u0dc0\u0dd2\u0d9a\u0dcf\u0dc1\u0db1\u0dba \u0d9a\u0dbb\u0db1\u0dd4 \u0d87\u0dad.
\n", "_^_0_^_, _^_1_^_ and _^_2_^_ are the tensors that store collection of query, key and value vectors. They have shape _^_3_^_.
\n_^_4_^_ has shape _^_5_^_ and _^_6_^_ indicates whether for batch _^_7_^_, query at position _^_8_^_ has access to key-value at position _^_9_^_.
\n": "_^_0_^_, _^_1_^_ \u0dc3\u0dc4 _^_2_^_ \u0dc0\u0dd2\u0db8\u0dc3\u0dd4\u0db8, \u0dba\u0dad\u0dd4\u0dbb\u0dc3\u0dc4 \u0d85\u0d9c\u0dba\u0daf\u0ddb\u0dc1\u0dd2\u0d9a \u0d91\u0d9a\u0dad\u0dd4 \u0d9a\u0dd2\u0dbb\u0dd3\u0db8 \u0d9c\u0db6\u0da9\u0dcf \u0d9a\u0dbb\u0db1 \u0d86\u0dad\u0db1\u0dca\u0dba \u0dc0\u0dda. \u0d92\u0dc0\u0dcf\u0dba\u0dda \u0dc4\u0dd0\u0da9\u0dba \u0d87\u0dad _^_3_^_.
\n_^_4_^_ \u0dc4\u0dd0\u0da9\u0dba \u0d87\u0dad\u0dd2 _^_5_^_ \u0d85\u0dad\u0dbb \u0d9a\u0dab\u0dca\u0da9\u0dcf\u0dba\u0db8 \u0dc3\u0db3\u0dc4\u0dcf _^_7_^_, \u0dc3\u0dca\u0dae\u0dcf\u0db1\u0dba\u0dda \u0dc0\u0dd2\u0db8\u0dc3\u0dd4\u0db8\u0da7 \u0db4\u0dca\u0dbb\u0dc0\u0dda\u0dc1\u0dba _^_8_^_ \u0dad\u0dd2\u0db6\u0dda\u0daf \u0dba\u0db1\u0dca\u0db1 _^_6_^_ \u0daf\u0d9a\u0dca\u0dc0\u0dba\u0dd2 \u0dc3\u0dca\u0dae\u0dcf\u0db1\u0dba\u0dda \u0db4\u0dca\u0dbb\u0db0\u0dcf\u0db1-\u0d85\u0d9c\u0dba _^_9_^_.
\n", "_^_0_^_ attention along the key sequence dimension _^_1_^_
\n": "_^_0_^_ \u0db4\u0dca\u0dbb\u0db0\u0dcf\u0db1 \u0d85\u0db1\u0dd4\u0d9a\u0dca\u0dbb\u0db8\u0dba \u0db8\u0dcf\u0db1\u0dba\u0d9a\u0dca \u0d94\u0dc3\u0dca\u0dc3\u0dda \u0d85\u0dc0\u0db0\u0dcf\u0db1\u0dba _^_1_^_
\n", "_^_0_^_, _^_1_^_ and _^_2_^_ have shape _^_3_^_
\n": "_^_0_^_, _^_1_^_ _^_2_^_ \u0dc3\u0dc4 \u0dc4\u0dd0\u0da9\u0dba _^_3_^_
\n", "Apply dropout
\n": "\u0d85\u0dad\u0dc4\u0dd0\u0dbb\u0daf\u0dd0\u0db8\u0dd3\u0db8 \u0dba\u0ddc\u0daf\u0db1\u0dca\u0db1
\n", "Apply mask
\n": "\u0dc0\u0dd9\u0dc3\u0dca\u0dba\u0ddc\u0daf\u0db1\u0dca\u0db1
\n", "Calculate _^_0_^_ or _^_1_^_
\n": "\u0d9c\u0dab\u0db1\u0dba\u0d9a\u0dbb\u0db1\u0dca\u0db1 _^_0_^_ \u0dc4\u0ddd _^_1_^_
\n", "Compute attention scores _^_0_^_. This gives a tensor of shape _^_1_^_.
\n": "\u0d85\u0dc0\u0db0\u0dcf\u0db1\u0dba\u0dbd\u0d9a\u0dd4\u0dab\u0dd4 \u0d9c\u0dab\u0db1\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1 _^_0_^_. \u0db8\u0dd9\u0dba \u0dc4\u0dd0\u0da9\u0dba\u0dda \u0d86\u0dad\u0dad\u0dd2\u0d9a\u0dba\u0d9a\u0dca \u0dbd\u0db6\u0dcf \u0daf\u0dd9\u0dba\u0dd2 _^_1_^_.
\n", "Concatenate multiple heads
\n": "\u0db6\u0dc4\u0dd4\u0dc4\u0dd2\u0dc3\u0dca \u0dc3\u0d82\u0dba\u0dd4\u0d9a\u0dca\u0dad \u0d9a\u0dbb\u0db1\u0dca\u0db1
\n", "Dropout
\n": "\u0dc4\u0dd0\u0dbd\u0dd3\u0db8
\n", "Input has shape _^_0_^_ or _^_1_^_. We apply the linear transformation to the last dimension and split that into the heads.
\n": "\u0d86\u0daf\u0dcf\u0db1\u0dba\u0da7\u0dc4\u0dd0\u0da9\u0dba _^_0_^_ \u0dc4\u0ddd _^_1_^_\u0d87\u0dad. \u0d85\u0db4\u0dd2 \u0dbb\u0dda\u0d9b\u0dd3\u0dba \u0db4\u0dbb\u0dd2\u0dc0\u0dbb\u0dca\u0dad\u0db1\u0dba \u0d85\u0dc0\u0dc3\u0dcf\u0db1 \u0db8\u0dcf\u0db1\u0dba\u0da7 \u0d85\u0daf\u0dcf\u0dc5 \u0dc0\u0db1 \u0d85\u0dad\u0dbb \u0d91\u0dba \u0dc4\u0dd2\u0dc3\u0dca \u0db6\u0dc0\u0da7 \u0db6\u0dd9\u0daf\u0dd3 \u0dba\u0dba\u0dd2.
\n", "Linear layer for linear transform
\n": "\u0dbb\u0dda\u0d9b\u0dd3\u0dba\u0db4\u0dbb\u0dd2\u0dab\u0dcf\u0db8\u0db1\u0dba \u0dc3\u0db3\u0dc4\u0dcf \u0dbb\u0dda\u0d9b\u0dd3\u0dba \u0dc3\u0dca\u0dae\u0dbb\u0dba
\n", "Linear transform
\n": "\u0dbb\u0dda\u0d9b\u0dd3\u0dba\u0db4\u0dbb\u0dd2\u0dab\u0dcf\u0db8\u0db1\u0dba
\n", "Multiply by values _^_0_^_
\n": "\u0d85\u0d9c\u0dba\u0db1\u0dca\u0d85\u0db1\u0dd4\u0dc0 \u0d9c\u0dd4\u0dab \u0d9a\u0dbb\u0db1\u0dca\u0db1 _^_0_^_
\n", "Number of dimensions in vectors in each head
\n": "\u0d91\u0d9a\u0dca\u0d91\u0d9a\u0dca \u0dc4\u0dd2\u0dc3\u0dd9\u0dc4\u0dd2 \u0daf\u0ddb\u0dc1\u0dd2\u0d9a\u0dc0\u0dbd \u0db8\u0dcf\u0db1\u0dba\u0db1\u0dca \u0d9c\u0dab\u0db1
\n", "Number of features per head
\n": "\u0dc4\u0dd2\u0dc3\u0d9a\u0da7\u0dc0\u0dd2\u0dc1\u0dda\u0dc2\u0dcf\u0d82\u0d9c \u0d9c\u0dab\u0db1
\n", "Number of heads
\n": "\u0dc4\u0dd2\u0dc3\u0dca\u0d9c\u0dab\u0db1
\n", "Output has shape _^_0_^_ or _^_1_^_
\n": "\u0db1\u0dd2\u0db8\u0dd0\u0dc0\u0dd4\u0db8\u0dda\u0dc4\u0dd0\u0da9\u0dba _^_0_^_ \u0dc4\u0ddd _^_1_^_
\n", "Output layer
\n": "\u0db4\u0dca\u0dbb\u0dad\u0dd2\u0daf\u0dcf\u0db1\u0dc3\u0dca\u0dae\u0dbb\u0dba
\n", "Prepare _^_0_^_, _^_1_^_ and _^_2_^_ for attention computation. These will then have shape _^_3_^_.
\n": "\u0dc3\u0dd6\u0daf\u0dcf\u0db1\u0db8\u0dca\u0dc0\u0db1\u0dca\u0db1 _^_0_^_, _^_1_^_ \u0dc3\u0dc4 \u0d85\u0dc0\u0db0\u0dcf\u0db1\u0dba \u0d9c\u0dab\u0db1\u0dba \u0d9a\u0dd2\u0dbb\u0dd3\u0db8 _^_2_^_ \u0dc3\u0db3\u0dc4\u0dcf. \u0db8\u0dda\u0dc0\u0dcf\u0da7 \u0db4\u0dc3\u0dd4\u0dc0 \u0dc4\u0dd0\u0da9\u0dba \u0d87\u0dad _^_3_^_.
\n", "Same mask applied to all heads.
\n": "\u0dc3\u0dd2\u0dba\u0dbd\u0dd4\u0db8\u0dc4\u0dd2\u0dc3\u0dca \u0dc3\u0db3\u0dc4\u0dcf \u0d91\u0d9a\u0db8 \u0d86\u0dc0\u0dbb\u0dab \u0dba\u0ddc\u0daf\u0db1\u0dd4 \u0dbd\u0dd0\u0db6\u0dda.
\n", "Save attentions for any other calculations
\n": "\u0dc0\u0dd9\u0db1\u0dad\u0dca\u0d9c\u0dab\u0db1\u0dba \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0dca \u0dc3\u0db3\u0dc4\u0dcf \u0d85\u0dc0\u0db0\u0dcf\u0db1\u0dba \u0dc3\u0dd4\u0dbb\u0d9a\u0dd2\u0db1\u0dca\u0db1
\n", "Save attentions if debugging
\n": "\u0db1\u0dd2\u0daf\u0ddc\u0dc3\u0dca\u0d9a\u0dbb\u0dab\u0dba\u0db1\u0db8\u0dca \u0d85\u0dc0\u0db0\u0dcf\u0db1\u0dba \u0dc3\u0dd4\u0dbb\u0d9a\u0dd2\u0db1\u0dca\u0db1
\n", "Scale scores _^_0_^_
\n": "\u0db4\u0dbb\u0dd2\u0db8\u0dcf\u0dab\u0dbd\u0d9a\u0dd4\u0dab\u0dd4 _^_0_^_
\n", "Scaling factor before the softmax
\n": "\u0dc3\u0ddc\u0dc6\u0dca\u0da7\u0dca\u0db8\u0dd0\u0d9a\u0dca\u0dc3\u0dca\u0dc0\u0dbd\u0da7 \u0db4\u0dd9\u0dbb \u0db4\u0dbb\u0dd2\u0db8\u0dcf\u0dab \u0dc3\u0dcf\u0db0\u0d9a\u0dba
\n", "Softmax for attention along the time dimension of _^_0_^_
\n": "\u0d9a\u0dcf\u0dbd\u0db8\u0dcf\u0db1\u0dba \u0d94\u0dc3\u0dca\u0dc3\u0dda \u0d85\u0dc0\u0db0\u0dcf\u0db1\u0dba \u0dba\u0ddc\u0db8\u0dd4 \u0d9a\u0dd2\u0dbb\u0dd3\u0db8 \u0dc3\u0db3\u0dc4\u0dcf \u0dc3\u0ddc\u0dc6\u0dca\u0da7\u0dca\u0db8\u0dd0\u0d9a\u0dca\u0dc3\u0dca _^_0_^_
\n", "Split last dimension into heads
\n": "\u0d85\u0dc0\u0dc3\u0dcf\u0db1\u0db8\u0dcf\u0db1\u0dba \u0dc4\u0dd2\u0dc3\u0dca \u0db6\u0dc0\u0da7 \u0db6\u0dd9\u0daf\u0db1\u0dca\u0db1
\n", "These transform the _^_0_^_, _^_1_^_ and _^_2_^_ vectors for multi-headed attention.
\n": "\u0db8\u0dda\u0dc0\u0dcf\u0db6\u0dc4\u0dd4-\u0dc1\u0dd3\u0dbb\u0dca\u0dc2 \u0d85\u0dc0\u0db0\u0dcf\u0db1\u0dba \u0dc3\u0db3\u0dc4\u0dcf _^_1_^_ \u0dc3\u0dc4 _^_2_^_ \u0daf\u0ddb\u0dc1\u0dd2\u0d9a \u0db4\u0dbb\u0dd2\u0dc0\u0dbb\u0dca\u0dad\u0db1\u0dba \u0d9a\u0dbb\u0dba\u0dd2. _^_0_^_
\n", "We store attentions so that it can be used for logging, or other computations if needed
\n": "\u0d85\u0dc0\u0dc1\u0dca\u0dba\u0db1\u0db8\u0dca \u0dbd\u0ddc\u0d9c\u0dca \u0dc0\u0dd3\u0db8 \u0dc4\u0ddd \u0dc0\u0dd9\u0db1\u0dad\u0dca \u0d9c\u0dab\u0db1\u0dba \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0dca \u0dc3\u0db3\u0dc4\u0dcf \u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf \u0d9a\u0dc5 \u0dc4\u0dd0\u0d9a\u0dd2 \u0dc0\u0db1 \u0db4\u0dbb\u0dd2\u0daf\u0dd2 \u0d85\u0db4\u0dd2 \u0d85\u0dc0\u0db0\u0dcf\u0db1\u0dba \u0d9c\u0db6\u0da9\u0dcf \u0d9a\u0dbb\u0db8\u0dd4
\n", "resulting mask has shape _^_0_^_
\n": "\u0d91\u0dc4\u0dd2\u0db4\u0dca\u0dbb\u0dad\u0dd2 ing \u0dbd\u0dba\u0d9a\u0dca \u0dbd\u0dd9\u0dc3 \u0dc0\u0dd9\u0dc3\u0dca _^_0_^_
\n", "