Encoder transformers

Transformer Models ด้วย PyTorch

James Chapman

Curriculum Manager, DataCamp

Transformer ดั้งเดิม

สถาปัตยกรรม transformer ตามที่ปรากฏในบทความวิชาการ Attention Is All You Need

Transformer Models ด้วย PyTorch

Transformer ดั้งเดิม

สถาปัตยกรรม transformer ดั้งเดิม

Transformer Models ด้วย PyTorch

Encoder-only transformers

สถาปัตยกรรม encoder-only transformer

Transformer body: ชุด encoder ที่มี N encoder layer

Encoder layer

  • Multi-head self-attention
  • Feed-forward (sub)layers
  • Layer normalizations, dropouts

Transformer head

Transformer Models ด้วย PyTorch

Encoder-only transformers

สถาปัตยกรรม encoder-only transformer

Transformer body: ชุด encoder ที่มี N encoder layer

Encoder layer

  • Multi-head self-attention
  • Feed-forward (sub)layers
  • Layer normalizations, dropouts

Transformer head: ประมวลผล input ที่ผ่าน encoder เพื่อสร้างผลลัพธ์การทำนาย

Supervised task: classification, regression

Transformer Models ด้วย PyTorch

Feed-forward sublayer ใน encoder layer

Feed-forward sublayer หลัง attention

class FeedForwardSubLayer(nn.Module):
    def __init__(self, d_model, d_ff):
        super().__init__()
        self.fc1 = nn.Linear(d_model, d_ff)
        self.fc2 = nn.Linear(d_ff, d_model)
        self.relu = nn.ReLU()


def forward(self, x): return self.fc2(self.relu(self.fc1(x)))

2 x fully connected + ReLU activation

  • d_ff: มิติระหว่าง linear layer

  • forward(): ประมวลผล attention output เพื่อจับรูปแบบที่ซับซ้อนและไม่เป็นเชิงเส้น

Transformer Models ด้วย PyTorch

Encoder layer

class EncoderLayer(nn.Module):
    def __init__(self, d_model, num_heads, d_ff, dropout):
        super().__init__()
        self.self_attn = MultiHeadAttention(d_model, num_heads)
        self.ff_sublayer = FeedForwardSubLayer(d_model, d_ff)

self.norm1 = nn.LayerNorm(d_model) self.norm2 = nn.LayerNorm(d_model) self.dropout = nn.Dropout(dropout)
def forward(self, x, src_mask): attn_output = self.self_attn(x, x, x, src_mask) x = self.norm1(x + self.dropout(attn_output)) ff_output = self.ff_sublayer(x) x = self.norm2(x + self.dropout(ff_output)) return x

Encoder layer

  • Multi-headed self-attention
  • Feed-forward sublayer
  • Layer normalizations และ dropouts

forward():

  • mask ป้องกันการประมวลผล padding token
Transformer Models ด้วย PyTorch

การ masking กระบวนการ attention

การเติม padding ใน sequence

Padding mask ใน self-attention

Transformer Models ด้วย PyTorch

Transformer body ฝั่ง encoder

class TransformerEncoder(nn.Module):
    def __init__(self, vocab_size, d_model, num_layers, num_heads, d_ff, dropout, max_seq_length):
        super().__init__()

self.embedding = InputEmbeddings(vocab_size, d_model)
self.positional_encoding = PositionalEncoding(d_model, max_seq_length)
self.layers = nn.ModuleList( [EncoderLayer(d_model, num_heads, d_ff, dropout) for _ in range(num_layers)] )
def forward(self, x, src_mask): x = self.embedding(x) x = self.positional_encoding(x) for layer in self.layers: x = layer(x, src_mask) return x
Transformer Models ด้วย PyTorch

Transformer head ฝั่ง encoder

class ClassifierHead(nn.Module):
    def __init__(self, d_model, num_classes):
        super().__init__()
        self.fc = nn.Linear(d_model, num_classes)

    def forward(self, x):
        logits = self.fc(x)
        return F.log_softmax(logits, dim=-1)
class RegressionHead(nn.Module):
    def __init__(self, d_model, output_dim):
        super().__init__()
        self.fc = nn.Linear(d_model, output_dim)

    def forward(self, x):
        return self.fc(x)

Classification head

  • งาน: text classification, sentiment analysis, NER, extractive QA ฯลฯ
  • fc: fully connected linear layer
    • แปลง hidden state ของ encoder เป็นความน่าจะเป็นของ num_classes คลาส

Regression head

  • งาน: ประมาณค่า text readability, ความซับซ้อนทางภาษา ฯลฯ
    • output_dim เป็น 1 เมื่อทำนายค่าตัวเลขเดียว
Transformer Models ด้วย PyTorch

มาฝึกกันเถอะ!

Transformer Models ด้วย PyTorch

Preparing Video For Download...