{ "

Transformer Encoder and Decoder Models

\n

_^_0_^_

\n": "

\u0da7\u0dca\u0dbb\u0dcf\u0db1\u0dca\u0dc3\u0dca\u0dc6\u0ddd\u0db8\u0dbb\u0dca \u0d91\u0db1\u0dca\u0d9a\u0ddd\u0da9\u0dbb\u0dca \u0dc3\u0dc4 \u0dc0\u0dd2\u0d9a\u0dda\u0dad\u0d9a \u0d86\u0d9a\u0dd8\u0dad\u0dd2

\n

_^_0_^_

\n", "

\n

Transformer Decoder

\n": "

\n

\u0da7\u0dca\u0dbb\u0dcf\u0db1\u0dca\u0dc3\u0dca\u0dc6\u0ddd\u0db8\u0dbb\u0dca\u0dc0\u0dd2\u0d9a\u0dda\u0dad\u0d9a\u0dba

\n", "

\n

Embed tokens and add parameterized positional encodings

\n": "

\n

\u0da7\u0ddd\u0d9a\u0db1\u0d9a\u0dcf\u0dc0\u0dd0\u0daf\u0dca\u0daf\u0dd3\u0db8 \u0dc3\u0dc4 \u0db4\u0dbb\u0dcf\u0db8\u0dd2\u0dad\u0dd2\u0d9a\u0dbb\u0dab\u0dba \u0d9a\u0dc5 \u0dc3\u0dca\u0dae\u0dcf\u0db1\u0dd3\u0dba \u0d9a\u0dda\u0dad\u0dd3\u0d9a\u0dbb\u0dab \u0d91\u0d9a\u0dad\u0dd4 \u0d9a\u0dbb\u0db1\u0dca\u0db1

\n", "

\n

Embed tokens and add fixed positional encoding

\n": "

\n

\u0da7\u0ddd\u0d9a\u0db1\u0d9a\u0dcf\u0dc0\u0dd0\u0daf\u0dca\u0daf\u0dd3\u0db8 \u0dc3\u0dc4 \u0dc3\u0dca\u0dae\u0dcf\u0dc0\u0dbb \u0dc3\u0dca\u0dae\u0dcf\u0db1\u0dd3\u0dba \u0d9a\u0dda\u0dad\u0dd3\u0d9a\u0dbb\u0dab\u0d91\u0d9a\u0dad\u0dd4 \u0d9a\u0dbb\u0db1\u0dca\u0db1

\n", "

\n

Transformer Encoder

\n": "

\n

\u0da7\u0dca\u0dbb\u0dcf\u0db1\u0dca\u0dc3\u0dca\u0dc6\u0ddd\u0db8\u0dbb\u0dca\u0d91\u0db1\u0dca\u0d9a\u0ddd\u0da9\u0dbb\u0dba

\n", "

\n

Combined Encoder-Decoder

\n": "

\n

\u0d92\u0d9a\u0dcf\u0db6\u0daf\u0dca\u0db0\u0d91\u0db1\u0dca\u0d9a\u0ddd\u0da9\u0dbb\u0dba-\u0dc0\u0dd2\u0d9a\u0dda\u0dad\u0d9a\u0dba

\n", "

\n

Generator

\n

This predicts the tokens and gives the lof softmax of those. You don't need this if you are using _^_0_^_.

\n": "

\n

\u0d8b\u0dad\u0dca\u0db4\u0dcf\u0daf\u0d9a\u0dba\u0db1\u0dca\u0dad\u0dca\u0dbb\u0dba

\n

\u0db8\u0dd9\u0dba\u0da7\u0ddd\u0d9a\u0db1 \u0db4\u0dd4\u0dbb\u0ddd\u0d9a\u0dae\u0db1\u0dba \u0d9a\u0dbb\u0db1 \u0d85\u0dad\u0dbb \u0d91\u0db8 \u0d85\u0dba\u0d9c\u0dda \u0dc3\u0ddc\u0dc6\u0dca\u0da7\u0dca\u0db8\u0dd0\u0d9a\u0dca\u0dc3\u0dca \u0dbd\u0db6\u0dcf \u0daf\u0dd9\u0dba\u0dd2. \u0d94\u0db6 \u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf \u0d9a\u0dbb\u0db1\u0dca\u0db1\u0dda \u0db1\u0db8\u0dca \u0d94\u0db6\u0da7 \u0db8\u0dd9\u0dba \u0d85\u0dc0\u0dc1\u0dca\u0dba \u0db1\u0ddc\u0dc0\u0dda _^_0_^_.

\n", "

\n

Transformer Layer

\n

This can act as an encoder layer or a decoder layer.

\n

\ud83d\uddd2 Some implementations, including the paper seem to have differences in where the layer-normalization is done. Here we do a layer normalization before attention and feed-forward networks, and add the original residual vectors. Alternative is to do a layer normalization after adding the residuals. But we found this to be less stable when training. We found a detailed discussion about this in the paper On Layer Normalization in the Transformer Architecture.

\n": "

\n

\u0da7\u0dca\u0dbb\u0dcf\u0db1\u0dca\u0dc3\u0dca\u0dc6\u0ddd\u0db8\u0dbb\u0dca\u0dc3\u0dca\u0dae\u0dbb\u0dba

\n

\u0db8\u0dd9\u0dba\u0d91\u0db1\u0dca\u0d9a\u0ddd\u0da9\u0dbb\u0dca \u0dad\u0da7\u0dca\u0da7\u0dd4\u0dc0\u0d9a\u0dca \u0dc4\u0ddd \u0dc0\u0dd2\u0d9a\u0dda\u0dad\u0d9a \u0dad\u0da7\u0dca\u0da7\u0dd4\u0dc0\u0d9a\u0dca \u0dbd\u0dd9\u0dc3 \u0d9a\u0dca\u0dbb\u0dd2\u0dba\u0dcf \u0d9a\u0dc5 \u0dc4\u0dd0\u0d9a\u0dd2\u0dba.

\n

\ud83d\uddd2\u0d9a\u0da9\u0daf\u0dcf\u0dc3\u0dd2 \u0d87\u0dad\u0dd4\u0dc5\u0dd4 \u0dc3\u0db8\u0dc4\u0dbb \u0d9a\u0dca\u0dbb\u0dd2\u0dba\u0dcf\u0dad\u0dca\u0db8\u0d9a \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0dca, \u0dc3\u0dca\u0dae\u0dbb-\u0dc3\u0dcf\u0db8\u0dcf\u0db1\u0dca\u0dba\u0d9a\u0dbb\u0dab\u0dba \u0dc3\u0dd2\u0daf\u0dd4 \u0d9a\u0dbb\u0db1 \u0dc3\u0dca\u0dae\u0dcf\u0db1\u0dba\u0dda \u0dc0\u0dd9\u0db1\u0dc3\u0dca\u0d9a\u0db8\u0dca \u0d87\u0dad\u0dd2 \u0db6\u0dc0 \u0db4\u0dd9\u0db1\u0dda. \u0db8\u0dd9\u0db1\u0dca\u0db1 \u0d85\u0db4\u0dd2 \u0d85\u0dc0\u0db0\u0dcf\u0db1\u0dba \u0dc3\u0dc4 \u0db4\u0ddd\u0dc2\u0d9a \u0d89\u0daf\u0dd2\u0dbb\u0dd2\u0dba\u0da7 \u0da2\u0dcf\u0dbd \u0db4\u0dd9\u0dbb \u0dc3\u0dca\u0dae\u0dbb\u0dba\u0d9a\u0dca \u0dc3\u0dcf\u0db8\u0dcf\u0db1\u0dca\u0dba\u0d9a\u0dbb\u0dab\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1, \u0dc3\u0dc4 \u0db8\u0dd4\u0dbd\u0dca \u0d85\u0dc0\u0dc1\u0dda\u0dc2 \u0daf\u0ddb\u0dc1\u0dd2\u0d9a \u0d91\u0d9a\u0dad\u0dd4 \u0d9a\u0dbb\u0db1\u0dca\u0db1. \u0dc0\u0dd2\u0d9a\u0dbd\u0dca\u0db4\u0dba\u0d9a\u0dca \u0dc0\u0db1\u0dca\u0db1\u0dda \u0d85\u0db4\u0daf\u0dca\u0dbb\u0dc0\u0dca\u0dba \u0d91\u0d9a\u0dad\u0dd4 \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0dd9\u0db1\u0dca \u0db4\u0dc3\u0dd4 \u0dc3\u0dca\u0dae\u0dbb \u0dc3\u0dcf\u0db8\u0dcf\u0db1\u0dca\u0dba\u0d9a\u0dbb\u0dab\u0dba \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0dba\u0dd2. \u0db1\u0db8\u0dd4\u0dad\u0dca \u0db4\u0dd4\u0dc4\u0dd4\u0dab\u0dd4\u0dc0\u0dd3\u0db8\u0dda\u0daf\u0dd3 \u0db8\u0dd9\u0dba \u0d85\u0da9\u0dd4 \u0dc3\u0dca\u0dae\u0dcf\u0dc0\u0dbb \u0db6\u0dc0 \u0d85\u0db4\u0da7 \u0db4\u0dd9\u0db1\u0dd3 \u0d9c\u0dd2\u0dba\u0dda\u0dba. \u0da7\u0dca\u0dbb\u0dcf\u0db1\u0dca\u0dc3\u0dca\u0dc6\u0ddd\u0db8\u0dbb\u0dca \u0d9c\u0dd8\u0dc4 \u0db1\u0dd2\u0dbb\u0dca\u0db8\u0dcf\u0dab \u0dc1\u0dd2\u0dbd\u0dca\u0db4\u0dba\u0dda ON Layer \u0dc3\u0dcf\u0db8\u0dcf\u0db1\u0dca\u0dba\u0d9a\u0dbb\u0dab\u0dba \u0db4\u0dd2\u0dc5\u0dd2\u0db6\u0db3\u0db4\u0dad\u0dca\u0dbb\u0dd2\u0d9a\u0dcf\u0dc0\u0dda \u0db8\u0dda \u0db4\u0dd2\u0dc5\u0dd2\u0db6\u0db3\u0dc0 \u0dc3\u0dc0\u0dd2\u0dc3\u0dca\u0dad\u0dbb\u0dcf\u0dad\u0dca\u0db8\u0d9a \u0dc3\u0dcf\u0d9a\u0da0\u0dca\u0da1\u0dcf\u0dc0\u0d9a\u0dca \u0d85\u0db4\u0da7 \u0dc4\u0db8\u0dd4 \u0dc0\u0dd2\u0dba.

\n", "

Add the feed-forward results back

\n": "

\u0db4\u0dca\u0dbb\u0dad\u0dd2\u0db4\u0ddd\u0dc2\u0dab\u0d89\u0daf\u0dd2\u0dbb\u0dd2 \u0db4\u0dca\u0dbb\u0dad\u0dd2 results \u0dbd \u0db1\u0dd0\u0dc0\u0dad \u0d91\u0d9a\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1

\n", "

Add the self attention results

\n": "

\u0dc3\u0dca\u0dc0\u0dba\u0d82\u0d85\u0dc0\u0db0\u0dcf\u0db1\u0dba \u0db4\u0dca\u0dbb\u0dad\u0dd2\u0db5\u0dbd \u0d91\u0d9a\u0dad\u0dd4

\n", "

Add the source attention results

\n": "

\u0db8\u0dd6\u0dbd\u0dcf\u0dc1\u0dca\u0dbb\u0d85\u0dc0\u0db0\u0dcf\u0db1\u0dba \u0dba\u0ddc\u0db8\u0dd4 \u0db4\u0dca\u0dbb\u0dad\u0dd2\u0db5\u0dbd \u0d91\u0d9a\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1

\n", "

Attention to source. i.e. keys and values are from source

\n": "

\u0db4\u0dca\u0dbb\u0db7\u0dc0\u0dba\u0da7\u0d85\u0dc0\u0db0\u0dcf\u0db1\u0dba \u0dba\u0ddc\u0db8\u0dd4 \u0d9a\u0dbb\u0db1\u0dca\u0db1. \u0d91\u0db1\u0db8\u0dca \u0dba\u0dad\u0dd4\u0dbb\u0dd4 \u0dc3\u0dc4 \u0d85\u0d9c\u0dba\u0db1\u0dca \u0db4\u0dca\u0dbb\u0db7\u0dc0\u0dba\u0dd9\u0db1\u0dca \u0dc0\u0dda

\n", "

Final normalization layer

\n": "

\u0d85\u0dc0\u0dc3\u0dcf\u0db1\u0dc3\u0dcf\u0db8\u0dcf\u0db1\u0dca\u0dba\u0d9a\u0dbb\u0dab \u0dc3\u0dca\u0dad\u0dbb\u0dba

\n", "

Finally, normalize the vectors

\n": "

\u0d85\u0dc0\u0dc3\u0dcf\u0db1\u0dc0\u0dc1\u0dba\u0dd9\u0db1\u0dca, \u0daf\u0ddb\u0dc1\u0dd2\u0d9a \u0dc3\u0dcf\u0db8\u0dcf\u0db1\u0dca\u0dba\u0d9a\u0dbb\u0dab\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1

\n", "

If a source is provided, get results from attention to source. This is when you have a decoder layer that pays attention to encoder outputs

\n": "

\u0db4\u0dca\u0dbb\u0db7\u0dc0\u0dba\u0d9a\u0dca\u0dbd\u0db6\u0dcf \u0daf\u0dd9\u0db1\u0dca\u0db1\u0dda \u0db1\u0db8\u0dca, \u0db4\u0dca\u0dbb\u0db7\u0dc0\u0dba\u0da7 \u0d85\u0dc0\u0db0\u0dcf\u0db1\u0dba \u0dba\u0ddc\u0db8\u0dd4 \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0dd9\u0db1\u0dca \u0db4\u0dca\u0dbb\u0dad\u0dd2 results \u0dbd \u0dbd\u0db6\u0dcf \u0d9c\u0db1\u0dca\u0db1. \u0d91\u0db1\u0dca\u0d9a\u0ddd\u0da9\u0dbb\u0dca \u0db4\u0dca\u0dbb\u0dad\u0dd2\u0daf\u0dcf\u0db1\u0dba\u0db1\u0dca \u0d9a\u0dd9\u0dbb\u0dd9\u0dc4\u0dd2 \u0d85\u0dc0\u0db0\u0dcf\u0db1\u0dba \u0dba\u0ddc\u0db8\u0dd4 \u0d9a\u0dbb\u0db1 \u0dc0\u0dd2\u0d9a\u0dda\u0dad\u0d9a \u0dad\u0da7\u0dca\u0da7\u0dd4\u0dc0\u0d9a\u0dca \u0d94\u0db6\u0da7 \u0d87\u0dad\u0dd2 \u0dc0\u0dd2\u0da7 \u0db8\u0dd9\u0dba

\u0dc0\u0dda\n", "

Make copies of the transformer layer

\n": "

\u0da7\u0dca\u0dbb\u0dcf\u0db1\u0dca\u0dc3\u0dca\u0dc6\u0ddd\u0db8\u0dbb\u0dca\u0dc3\u0dca\u0dae\u0dbb\u0dba\u0dda \u0db4\u0dd2\u0da7\u0db4\u0dad\u0dca \u0dc3\u0dcf\u0daf\u0db1\u0dca\u0db1

\n", "

Normalize for feed-forward

\n": "

\u0db4\u0ddd\u0dc2\u0dab\u0dba\u0dc3\u0db3\u0dc4\u0dcf \u0dc3\u0dcf\u0db8\u0dcf\u0db1\u0dca\u0dba\u0d9a\u0dbb\u0dab\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1

\n", "

Normalize the vectors before doing self attention

\n": "

\u0dc3\u0dca\u0dc0\u0dba\u0d82\u0d85\u0dc0\u0db0\u0dcf\u0db1\u0dba \u0dba\u0ddc\u0db8\u0dd4 \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0da7 \u0db4\u0dd9\u0dbb \u0daf\u0ddb\u0dc1\u0dd2\u0d9a \u0dc3\u0dcf\u0db8\u0dcf\u0db1\u0dca\u0dba\u0d9a\u0dbb\u0dab\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1

\n", "

Normalize vectors

\n": "

\u0daf\u0ddb\u0dc1\u0dd2\u0d9a\u0dc3\u0dcf\u0db8\u0dcf\u0db1\u0dca\u0dba\u0d9a\u0dbb\u0dab\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1

\n", "

Pass through the feed-forward network

\n": "

Feed-forward\u0da2\u0dcf\u0dbd\u0dba \u0dc4\u0dbb\u0dc4\u0dcf \u0d9c\u0db8\u0db1\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1

\n", "

Run encodings and targets through decoder

\n": "

\u0dc0\u0dd2\u0d9a\u0dda\u0dad\u0d9a\u0dba\u0dc4\u0dbb\u0dc4\u0dcf \u0d9a\u0dda\u0dad\u0dd3\u0d9a\u0dbb\u0dab \u0dc3\u0dc4 \u0d89\u0dbd\u0d9a\u0dca\u0d9a \u0db0\u0dcf\u0dc0\u0db1\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1

\n", "

Run the source through encoder

\n": "

\u0d91\u0db1\u0dca\u0d9a\u0ddd\u0da9\u0dbb\u0dba\u0dc4\u0dbb\u0dc4\u0dcf \u0db4\u0dca\u0dbb\u0db7\u0dc0\u0dba \u0db0\u0dcf\u0dc0\u0db1\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1

\n", "

Run through each transformer layer

\n": "

\u0d91\u0d9a\u0dca\u0d91\u0d9a\u0dca \u0da7\u0dca\u0dbb\u0dcf\u0db1\u0dca\u0dc3\u0dca\u0dc6\u0ddd\u0db8\u0dbb\u0dca \u0dc3\u0dca\u0dae\u0dbb\u0dba \u0dc4\u0dbb\u0dc4\u0dcf \u0db0\u0dcf\u0dc0\u0db1\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1

\n", "

Run through self attention, i.e. keys and values are from self

\n": "

\u0dc3\u0dca\u0dc0\u0dba\u0d82\u0d85\u0dc0\u0db0\u0dcf\u0db1\u0dba \u0dc4\u0dbb\u0dc4\u0dcf \u0db0\u0dcf\u0dc0\u0db1\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1, i.e. \u0dba\u0dad\u0dd4\u0dbb\u0dd4 \u0dc3\u0dc4 \u0dc0\u0da7\u0dd2\u0db1\u0dcf\u0d9a\u0db8\u0dca \u0dc3\u0dca\u0dc0\u0dba\u0d82 \u0dc3\u0dd2\u0da7

\n", "

Save the input to the feed forward layer if specified

\n": "

\u0db1\u0dd2\u0dc1\u0dca\u0da0\u0dd2\u0dad\u0dc0\u0daf\u0d9a\u0dca\u0dc0\u0dcf \u0d87\u0dad\u0dca\u0db1\u0db8\u0dca \u0d86\u0daf\u0dcf\u0db1\u0dba \u0d86\u0dc4\u0dcf\u0dbb \u0d89\u0daf\u0dd2\u0dbb\u0dd2 \u0dc3\u0dca\u0dae\u0dbb\u0dba\u0da7 \u0dc3\u0dd4\u0dbb\u0d9a\u0dd2\u0db1\u0dca\u0db1

\n", "

This was important from their code. Initialize parameters with Glorot / fan_avg.

\n": "

\u0db8\u0dd9\u0dba\u0d94\u0dc0\u0dd4\u0db1\u0dca\u0d9c\u0dda \u0d9a\u0dda\u0dad\u0dba\u0dd9\u0db1\u0dca \u0dc0\u0dd0\u0daf\u0d9c\u0dad\u0dca \u0dc0\u0dd2\u0dba. \u0d9c\u0dca\u0dbd\u0ddd\u0dbb\u0ddd\u0da7\u0dca/fan_avg \u0dc3\u0db8\u0d9f \u0db4\u0dbb\u0dcf\u0db8\u0dd2\u0dad\u0dd3\u0db1\u0dca \u0d86\u0dbb\u0db8\u0dca\u0db7 \u0d9a\u0dbb\u0db1\u0dca\u0db1.

\n", "

Whether to save input to the feed forward layer

\n": "

\u0d86\u0dc4\u0dcf\u0dbb\u0d89\u0daf\u0dd2\u0dbb\u0dd2 \u0dc3\u0dca\u0dae\u0dbb\u0dba\u0da7 \u0d86\u0daf\u0dcf\u0db1\u0dba \u0d89\u0dad\u0dd2\u0dbb\u0dd2 \u0d9a\u0dbb \u0d9c\u0dad \u0dba\u0dd4\u0dad\u0dd4\u0daf \u0dba\u0db1\u0dca\u0db1

\n", "\n": "\n", "These are PyTorch implementations of Transformer based encoder and decoder models, as well as other related modules.": "\u0db8\u0dda\u0dc0\u0dcf \u0da7\u0dca\u0dbb\u0dcf\u0db1\u0dca\u0dc3\u0dca\u0dc6\u0ddd\u0db8\u0dbb\u0dca \u0db8\u0dad \u0db4\u0daf\u0db1\u0db8\u0dca \u0dc0\u0dd6 \u0d91\u0db1\u0dca\u0d9a\u0ddd\u0da9\u0dbb\u0dca \u0dc3\u0dc4 \u0dc0\u0dd2\u0d9a\u0dda\u0dad\u0d9a \u0d86\u0d9a\u0dd8\u0dad\u0dd2 \u0db8\u0dd9\u0db1\u0dca\u0db8 \u0dc0\u0dd9\u0db1\u0dad\u0dca \u0d86\u0dc1\u0dca\u0dbb\u0dd2\u0dad \u0db8\u0ddc\u0da9\u0dd2\u0dba\u0dd4\u0dbd\u0dc0\u0dbd \u0db4\u0dba\u0dd2\u0da7\u0ddd\u0da0\u0dca \u0d9a\u0dca\u0dbb\u0dd2\u0dba\u0dcf\u0dad\u0dca\u0db8\u0d9a \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0dca \u0dc0\u0dda.", "Transformer Encoder and Decoder Models": "\u0da7\u0dca\u0dbb\u0dcf\u0db1\u0dca\u0dc3\u0dca\u0dc6\u0ddd\u0db8\u0dbb\u0dca \u0d91\u0db1\u0dca\u0d9a\u0ddd\u0da9\u0dbb\u0dca \u0dc3\u0dc4 \u0dc0\u0dd2\u0d9a\u0dda\u0dad\u0d9a \u0d86\u0d9a\u0dd8\u0dad\u0dd2" }