Vrstva dekodéru
Stejně jako enkodérové transformery se i dekodérové transformery skládají z více vrstev využívajících multi-head attention a feed-forward podvrstvy. Zkus tyto komponenty propojit a sestavit třídu DecoderLayer.
Třídy MultiHeadAttention a FeedForwardSubLayer jsou k dispozici, stejně jako dříve vytvořená maska tgt_mask.
Toto cvičení je součástí kurzu
Transformer Models with PyTorch
Pokyny k cvičení
Dokonči metodu forward() tak, aby vstupní embeddingy prošly vrstvami definovanými v metodě __init__:
- Proveď výpočet attention pomocí zadané masky
tgt_maska vstupních embeddingůxpro matice query, key a value. - Aplikuj
dropouta první normalizaci vrstvy,norm1. - Proveď průchod přes feed-forward podvrstvu,
ff_sublayer. - Aplikuj
dropouta druhou normalizaci vrstvy,norm2.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
class DecoderLayer(nn.Module):
def __init__(self, d_model, num_heads, d_ff, dropout):
super().__init__()
self.self_attn = MultiHeadAttention(d_model, num_heads)
self.ff_sublayer = FeedForwardSubLayer(d_model, d_ff)
self.norm1 = nn.LayerNorm(d_model)
self.norm2 = nn.LayerNorm(d_model)
self.dropout = nn.Dropout(dropout)
def forward(self, x, tgt_mask):
# Perform the attention calculation
attn_output = self.____
# Apply dropout and the first layer normalization
x = self.____(x + self.____(attn_output))
# Pass through the feed-forward sublayer
ff_output = self.____(x)
# Apply dropout and the second layer normalization
x = self.____(x + self.____(ff_output))
return x