フィードフォワード・サブレイヤー
フィードフォワード・サブレイヤーは、アテンションの出力を非線形な抽象表現へ写像し、複雑な関係をよりよく捉えられるようにします。
この演習では、エンコーダ専用のトランスフォーマ向けに FeedForwardSubLayer を作成します。これは2つの線形層の間に ReLU 活性化関数を挟んだ構成になります。さらに、入力埋め込みの次元と、線形層間の中間次元を表す2つのパラメータ d_model と d_ff を受け取ります。
d_model と d_ff はすでに用意されています。
この演習はコースの一部です
PyTorchで学ぶTransformerモデル
演習の手順
- フィードフォワード・サブレイヤークラスで、
d_modelと層間の次元d_ffを用いて、1つ目と2つ目の線形層および ReLU 活性化を定義します。 forward()メソッドで、入力を各層と活性化関数に順に通します。- 用意された
d_modelとd_ff(それぞれ512と2048)でFeedForwardSubLayerをインスタンス化し、入力埋め込みxに適用します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
class FeedForwardSubLayer(nn.Module):
def __init__(self, d_model, d_ff):
super().__init__()
# Define the layers and activation
self.fc1 = ____
self.fc2 = ____
self.relu = ____
def forward(self, x):
# Pass the input through the layers and activation
return self.____(self.____(self.____(x)))
# Instantiate the FeedForwardSubLayer and apply it to x
feed_forward = ____
output = ____
print(f"Input shape: {x.shape}")
print(f"Output shape: {output.shape}")