エンコーダートランスフォマー層
FeedForwardSubLayer クラスが定義できたので、EncoderLayer クラスを定義するために必要な部品がそろいました。エンコーダー層は一般に、マルチヘッドアテンション機構と、サブレイヤーの入出力に対してレイヤー正規化とドロップアウトを伴うフィードフォワードサブレイヤーで構成されることを思い出してください。
すでに定義したクラスは同じ名前で利用できます。加えて、torch および torch.nn は nn としてインポート済みです。
この演習はコースの一部です
PyTorchで学ぶTransformerモデル
演習の手順
__init__メソッドを完成させて、MultiHeadAttention、FeedForwardSubLayer、および 2 つのレイヤー正規化をインスタンス化してください。forward()メソッドを完成させ、マルチヘッドアテンション機構とフィードフォワードサブレイヤーを実装してください。アテンション機構には、提供されたsrc_markと、クエリ・キー・バリュー行列として入力埋め込みxを使用します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
class EncoderLayer(nn.Module):
def __init__(self, d_model, num_heads, d_ff, dropout):
super().__init__()
# Instantiate the layers
self.self_attn = ____(d_model, num_heads)
self.ff_sublayer = ____(d_model, d_ff)
self.norm1 = ____
self.norm2 = ____
self.dropout = nn.Dropout(dropout)
def forward(self, x, src_mask):
# Complete the forward method
attn_output = self.____
x = self.norm1(x + self.dropout(attn_output))
ff_output = self.____
x = self.norm2(x + self.dropout(ff_output))
return x