始める無料で始める

エンコーダートランスフォマー層

FeedForwardSubLayer クラスが定義できたので、EncoderLayer クラスを定義するために必要な部品がそろいました。エンコーダー層は一般に、マルチヘッドアテンション機構と、サブレイヤーの入出力に対してレイヤー正規化とドロップアウトを伴うフィードフォワードサブレイヤーで構成されることを思い出してください。

すでに定義したクラスは同じ名前で利用できます。加えて、torch および torch.nnnn としてインポート済みです。

この演習はコースの一部です

PyTorchで学ぶTransformerモデル

コースを見る

演習の手順

  • __init__ メソッドを完成させて、MultiHeadAttentionFeedForwardSubLayer、および 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
コードを編集して実行