एन्कोडर ट्रांसफॉर्मर

PyTorch के साथ Transformer Models

James Chapman

Curriculum Manager, DataCamp

ओरिजिनल ट्रांसफॉर्मर

एकेडमिक पेपर "Attention Is All You Need" में दिखाया गया ट्रांसफॉर्मर आर्किटेक्चर.

PyTorch के साथ Transformer Models

ओरिजिनल ट्रांसफॉर्मर

मूल ट्रांसफॉर्मर आर्किटेक्चर

PyTorch के साथ Transformer Models

केवल-एन्कोडर ट्रांसफॉर्मर

केवल-एन्कोडर ट्रांसफॉर्मर आर्किटेक्चर

Transformer body: N एन्कोडर लेयर्स वाला एन्कोडर स्टैक

Encoder layer

  • मल्टी-हेड self-attention
  • फीड-फॉरवर्ड (सब)लेयर्स
  • लेयर नॉर्मलाइजेशन, ड्रॉपआउट्स

Transformer head

PyTorch के साथ Transformer Models

केवल-एन्कोडर ट्रांसफॉर्मर

केवल-एन्कोडर ट्रांसफॉर्मर आर्किटेक्चर

Transformer body: N एन्कोडर लेयर्स वाला एन्कोडर स्टैक

Encoder layer

  • मल्टी-हेड self-attention
  • फीड-फॉरवर्ड (सब)लेयर्स
  • लेयर नॉर्मलाइजेशन, ड्रॉपआउट्स

Transformer head: एन्कोडेड इनपुट्स को प्रोसेस कर आउटपुट प्रेडिक्शन बनाता है

Supervised task: क्लासिफिकेशन, रिग्रेशन

PyTorch के साथ Transformer Models

एन्कोडर लेयर्स में फीड-फॉरवर्ड सबलेयर

अटेंशन के बाद फीड-फॉरवर्ड सबलेयर

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 फुली कनेक्टेड + ReLU एक्टिवेशन

  • d_ff: लीनियर लेयर्स के बीच का डायमेंशन

  • forward(): अटेंशन आउटपुट्स को प्रोसेस कर जटिल, नॉन-लीनियर पैटर्न पकड़ता है

PyTorch के साथ Transformer Models

एन्कोडर लेयर

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

एन्कोडर लेयर

  • मल्टी-हेडेड self-attention
  • फीड-फॉरवर्ड सबलेयर
  • लेयर नॉर्मलाइजेशन और ड्रॉपआउट्स

forward():

  • mask padding टोकन्स की प्रोसेसिंग रोकता है
PyTorch के साथ Transformer Models

अटेंशन प्रक्रिया में मास्किंग

सीक्वेंस पैडिंग

self-attention में पैडिंग मास्क

PyTorch के साथ Transformer Models

एन्कोडर ट्रांसफॉर्मर बॉडी

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
PyTorch के साथ Transformer Models

एन्कोडर ट्रांसफॉर्मर हेड

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

  • टास्क्स: टेक्स्ट क्लासिफिकेशन, sentiment analysis, NER, extractive QA, आदि
  • fc: फुली कनेक्टेड लीनियर लेयर
    • एन्कोडर hidden states को num_classes क्लास probabilities में बदलता है

Regression head

  • टास्क्स: टेक्स्ट readability, भाषा जटिलता का अनुमान, आदि
    • एकल संख्यात्मक मान प्रेडिक्ट करने पर output_dim 1 होता है
PyTorch के साथ Transformer Models

अभ्यास करते हैं!

PyTorch के साथ Transformer Models

Preparing Video For Download...