시작하기무료로 시작하기

인코더 트랜스포머 레이어

FeedForwardSubLayer 클래스가 정의되어 있으니, 이제 EncoderLayer 클래스를 정의하는 데 필요한 모든 구성 요소가 준비되었습니다. 인코더 레이어는 일반적으로 멀티헤드 어텐션 메커니즘과, 서브레이어의 입력과 출력에 레이어 정규화와 드롭아웃이 적용된 피드포워드 서브레이어로 이루어져 있다는 점을 떠올려 보세요.

이미 정의해 둔 클래스들은 동일한 이름으로 사용할 수 있으며, torchtorch.nnnn으로 제공됩니다.

이 연습은 강의의 일부입니다

PyTorch로 배우는 Transformer 모델

강의 보기

연습 안내

  • __init__ 메서드를 완성해 MultiHeadAttention, FeedForwardSubLayer, 그리고 두 개의 레이어 정규화를 인스턴스화하세요.
  • 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
코드 편집 및 실행