Çok başlı öz-dikkat

PyTorch ile Transformer Modelleri

James Chapman

Curriculum Manager, DataCamp

Transformers’ta çok başlı dikkat

“Attention Is All You Need” makalesindeki transformer mimarisi.

PyTorch ile Transformer Modelleri

Öz-dikkat mekanizması

Öz-dikkat mekanizmasının anatomisi

PyTorch ile Transformer Modelleri

Öz-dikkat mekanizması

Öz-dikkat mekanizmasının anatomisi

  • Q: Her belirtecin diğerlerinde ne “aradığını” belirtir
  • K: Her belirtecin içeriğini temsil eder
  • V: Birleştirilecek/ağırlıklandırılacak gerçek içerik
PyTorch ile Transformer Modelleri

Öz-dikkat mekanizması

Öz-dikkat mekanizmasının anatomisi

  • Q: Her belirtecin diğerlerinde ne “aradığını” belirtir
  • K: Her belirtecin içeriğini temsil eder
  • V: Birleştirilecek/ağırlıklandırılacak gerçek içerik

 

  • Dikkat Skorları: Q-K benzerliği → noktasal çarpım
PyTorch ile Transformer Modelleri

Öz-dikkat mekanizması

Öz-dikkat mekanizmasının anatomisi

  • Q: Her belirtecin diğerlerinde ne “aradığını” belirtir
  • K: Her belirtecin içeriğini temsil eder
  • V: Birleştirilecek/ağırlıklandırılacak gerçek içerik

 

  • Dikkat Skorları: Q-K benzerliği → noktasal çarpım
  • Dikkat Ağırlıkları: softmax ölçekleme
PyTorch ile Transformer Modelleri

Öz-dikkat mekanizması

Öz-dikkat mekanizmasının anatomisi

  • Dikkat Skorları: Q-K benzerliği → noktasal çarpım
  • Dikkat Ağırlıkları: softmax ölçekleme

 

Orange is my favorite fruit
Sorgu: Orange
Dikkat ağırlıkları: .21 .03 .05 .31 .40
PyTorch ile Transformer Modelleri

Öz-dikkat mekanizması

Öz-dikkat mekanizmasının anatomisi

  • Dikkat Skorları: Q-K benzerliği → noktasal çarpım
  • Dikkat Ağırlıkları: softmax ölçekleme

 

Orange is my favorite fruit
Sorgu: Orange
Dikkat ağırlıkları: .21 .03 .05 .31 .40
PyTorch ile Transformer Modelleri

Öz-dikkat mekanizması

Öz-dikkat mekanizmasının anatomisi

  • Dikkat Skorları: Q-K benzerliği → noktasal çarpım
  • Dikkat Ağırlıkları: softmax ölçekleme

 

Orange is my favorite fruit
Sorgu: Orange
Dikkat ağırlıkları: .21 .03 .05 .31 .40
PyTorch ile Transformer Modelleri

Çok başlı dikkat

Çok başlı öz-dikkat

PyTorch ile Transformer Modelleri

Çok başlı dikkat

Çok başlı öz-dikkat

PyTorch ile Transformer Modelleri

Çok başlı dikkat

Çok başlı öz-dikkat

PyTorch ile Transformer Modelleri
import torch.nn as nn
import torch.nn.functional as F

class MultiHeadAttention(nn.Module):

def __init__(self, d_model, num_heads): super().__init__()
assert d_model % num_heads == 0, "d_model must be divisible by num_heads."
self.num_heads = num_heads self.d_model = d_model self.head_dim = d_model // num_heads
self.query_linear = nn.Linear(d_model, d_model, bias=False) self.key_linear = nn.Linear(d_model, d_model, bias=False) self.value_linear = nn.Linear(d_model, d_model, bias=False)
self.output_linear = nn.Linear(d_model, d_model)
  • num_heads: dikkat kafası sayısı; her biri head_dim boyutlu gömme ile çalışır
  • bias=False: karmaşıklığı azaltır, performansı etkilemez (yalnızca girdiler için)
PyTorch ile Transformer Modelleri
    def split_heads(self, x, batch_size):

seq_length = x.size(1) x = x.reshape(batch_size, seq_length, self.num_heads, self.head_dim) return x.permute(0, 2, 1, 3)
def compute_attention(self, query, key, value, mask=None):
scores = torch.matmul(query, key.transpose(-2, -1)) / (self.head_dim ** 0.5)
if mask is not None: scores = scores.masked_fill(mask == 0, float('-inf'))
attention_weights = F.softmax(scores, dim=-1) return torch.matmul(attention_weights, value)
def combine_heads(self, x, batch_size):
x = x.permute(0, 2, 1, 3).contiguous() return x.view(batch_size, -1, self.d_model)
  • compute_attention(): F.softmax() ile dikkat ağırlıklarını hesaplar
  • torch.matmul(attention_weights, value): değerlerin ağırlıklı toplamı
PyTorch ile Transformer Modelleri
    def forward(self, query, key, value, mask=None):
        batch_size = query.size(0)

        query = self.split_heads(self.query_linear(query), batch_size)
        key = self.split_heads(self.key_linear(key), batch_size)
        value = self.split_heads(self.value_linear(value), batch_size)

        attention_weights = self.compute_attention(query, key, value, mask)


output = self.combine_heads(attention_weights, batch_size)
return self.output_linear(output)
  • self.output_linear(): kafa çıktılarının birleştirilmesi ve izdüşümü
PyTorch ile Transformer Modelleri

Hadi pratik yapalım!

PyTorch ile Transformer Modelleri

Preparing Video For Download...