인코더-디코더 트랜스포머

PyTorch로 배우는 Transformer 모델

James Chapman

Curriculum Manager, DataCamp

인코더가 디코더를 만나다

오리지널 트랜스포머 구조

PyTorch로 배우는 Transformer 모델

인코더가 디코더를 만나다

인코더와 디코더 결합

PyTorch로 배우는 Transformer 모델

크로스 어텐션 메커니즘

 

  1. 디코더 전반에서 처리된 정보
  2. 인코더 블록의 최종 은닉 상태

 

크로스 어텐션 예시

크로스 어텐션이 있는 디코더

PyTorch로 배우는 Transformer 모델

DecoderLayer 수정하기

 

  1. 디코더 전반에서 처리된 정보
  2. 인코더 블록의 최종 은닉 상태

 

  • x: 디코더 정보 흐름, 크로스 어텐션의 쿼리가 됨
  • y: 인코더 출력, 크로스 어텐션의 이 됨
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.cross_attn = MultiHeadAttention(
                          d_model, num_heads)
        ...


def forward(self, x, y, tgt_mask, cross_mask): self_attn_output = self.self_attn(x, x, x, tgt_mask) x = self.norm1(x + self.dropout(self_attn_output)) cross_attn_output = self.cross_attn(x, y, y, cross_mask) x = self.norm2(x + self.dropout(cross_attn_output)) ...
PyTorch로 배우는 Transformer 모델

DecoderTransformer 수정하기

 

디코더 전용
class TransformerDecoder(nn.Module):
...
def forward(self, x, tgt_mask):
    x = self.embedding(x)
    x = self.positional_encoding(x)
    for layer in self.layers:
        x = layer(x, tgt_mask)
    x = self.fc(x)
    return F.log_softmax(x, dim=-1)

 

인코더-디코더
class TransformerDecoder(nn.Module):
...

def forward(self, x, y, tgt_mask, cross_mask): x = self.embedding(x) x = self.positional_encoding(x) for layer in self.layers: x = layer(x, y, tgt_mask, cross_mask) x = self.fc(x) return F.log_softmax(x, dim=-1)
PyTorch로 배우는 Transformer 모델

인코더가 디코더를 만나다

인코더와 디코더 결합

PyTorch로 배우는 Transformer 모델

트랜스포머 헤드

 

번역 출력 예시

  • jugar (_놀다_): 0.03
  • viajar (여행하다): 0.96
  • dormir (잠자다): 0.01

다른 작업에는 다른 활성화 함수가 필요할 수 있습니다

트랜스포머 헤드가 있는 디코더

PyTorch로 배우는 Transformer 모델

모두 결합하기!

전체 인코더-디코더 트랜스포머

PyTorch로 배우는 Transformer 모델

모두 결합하기!

class InputEmbeddings(nn.Module):
  ...  
class PositionalEncoding(nn.Module):
  ...  
class MultiHeadAttention(nn.Module):
  ...
class FeedForwardSubLayer(nn.Module):
  ...  
class EncoderLayer(nn.Module):
  ...
class DecoderLayer(nn.Module):
  ...
class TransformerEncoder(nn.Module):
  ...
class TransformerDecoder(nn.Module):
  ...
class ClassificationHead(nn.Module):
  ...
class Transformer(nn.Module):
    def __init__(self, vocab_size, d_model, num_heads, 
                 num_layers, d_ff, max_seq_len, dropout):
        super().__init__()


self.encoder = TransformerEncoder(vocab_size, d_model, num_heads, num_layers, d_ff, dropout, max_seq_len) self.decoder = TransformerDecoder(vocab_size, d_model, num_heads, num_layers, d_ff, dropout, max_seq_len)
def forward(self, x, src_mask, tgt_mask, cross_mask): encoder_output = self.encoder(x, src_mask) decoder_output = self.decoder(x, encoder_output, tgt_mask, cross_mask) return decoder_output
PyTorch로 배우는 Transformer 모델

연습해 봅시다!

PyTorch로 배우는 Transformer 모델

Preparing Video For Download...