Transformer
Transformer, tüm diziyi paralel işleyen ve öz dikkat üzerine kurulu bir sinir ağıdır. Nasıl çalıştığını, çeşitlerini ve görü alanındaki kullanımını öğren.
Transformer, kelimeler veya görüntü parçaları gibi bir dizi içindeki her belirtecin öz dikkat aracılığıyla diğer tüm belirteçlerden bilgi almasını sağlayarak diziyi işleyen bir sinir ağı mimarisidir. Google araştırmacıları bu mimariyi 2017'de Attention Is All You Need makalesinde makine çevirisi için tanıttı. Önceki yinelemeli sinir ağları (RNN) bir cümleyi kelime kelime okuduğundan, eğitim konumlar arasında paralelleştirilemiyordu. Transformer tüm konumları aynı anda işler; temel modeli sekiz GPU üzerinde 12 saat eğitimden sonra İngilizceden Almancaya çeviride en iyi sonuçları elde etti. Transformer'lar artık büyük dil modellerinin (LLM), görüntü transformer'larının, konuşma tanımanın ve pek çok nesne algılama ve görüntü oluşturma modelinin temelini oluşturuyor.
Transformer'lar Nasıl Çalışır?#
Girdi belirteçleri önce sabit genişlikteki vektörler olan gömülere dönüştürülür (özgün modelde 512). Transformer daha sonra her biri iki alt katmandan oluşan özdeş katmanlardan oluşan bir yığın uygular:
- Çok başlı öz dikkat: Her belirteç bir sorgu, bir anahtar ve bir değer vektörü üretir. Bir belirtecin çıktısı, sorgusunun her bir anahtarla ne kadar iyi eşleştiğine göre ağırlıklandırılmış tüm değer vektörlerinin ağırlıklı ortalamasıdır; bu, dikkat mekanizmasında açıklanır. Özgün modelde 8 olan birden fazla başlık paralel çalışır; böylece farklı başlıklar farklı ilişkileri izleyebilir.
- İleri beslemeli ağ: Dikkatin topladığı bilgiyi dönüştüren ve her belirtece ayrı ayrı uygulanan iki katmanlı bir ağ.
Her alt katmanın çevresinde bir artık bağlantı bulunur ve katman normalizasyonu etkinleştirmeleri kararlı tutar. Özgün model, kaynak cümleyi okuyan kodlayıcıda bu katmanlardan 6 tanesini, çeviriyi her seferinde bir belirteç yazarak oluşturan kod çözücüde ise 6 tanesini yığdı. Her kod çözücü katmanı, gelecekteki belirteçleri gizleyen maskeli bir öz dikkat adımı ve kodlayıcının çıktısını okuyan bir çapraz dikkat adımı ekler:
Dikkat, belirteçleri yalnızca içeriklerine göre karşılaştırır; bu nedenle transformer katmanında yerleşik bir sıra algısı yoktur: girdi belirteçlerini karıştırmak yalnızca çıktıları karıştırır. Bu yüzden konum bilgisi, özgün makaledeki sabit sinüs ve kosinüs desenleriyle, BERT ve ViT'teki öğrenilmiş konum vektörleriyle veya günümüzdeki çoğu LLM'de kullanılan döner konum gömmeleriyle (RoPE) belirteç gömmelerine eklenir. Bu PyTorch kodu, tek bir kodlayıcı katmanıyla bu etkiyi gösterir:
import torch
from torch import nn
# Bir transformer kodlayıcı katmanı ve 5 belirteç gömmesinden oluşan bir dizi
torch.manual_seed(0)
layer = nn.TransformerEncoderLayer(d_model=32, nhead=4, batch_first=True).eval()
tokens = torch.randn(1, 5, 32)
reverse = torch.arange(4, -1, -1)
# Öz dikkat tek başına sırayı dikkate almaz: girdiyi tersine çevirmek yalnızca çıktıyı da tersine çevirir
print(torch.allclose(layer(tokens[:, reverse])[:, reverse], layer(tokens), atol=1e-5))
# Her konuma öğrenilmiş bir vektör eklemek, her çıktıyı belirtecinin bulunduğu konuma bağlı hâle getirir
positions = nn.Embedding(5, 32).weight
reordered = layer(tokens[:, reverse] + positions)[:, reverse]
print(torch.allclose(reordered, layer(tokens + positions), atol=1e-5))Önce True, ardından False yazdırır: konum vektörleri eklenene kadar belirteçleri ters çevirmek yalnızca çıktıları tersine çevirir; vektörler eklendikten sonra belirteçlerin sırası her belirtecin çıktısını değiştirir.
Kodlayıcı, Kod Çözücü ve Kodlayıcı-Kod Çözücü Modelleri#
Özgün yığını kullanmanın üç yolu farklı işlere hizmet eder:
- Yalnızca kodlayıcı: Her belirteç, anlamaya yönelik görevler için uygun olacak biçimde girdinin tamamına iki yönde de dikkat eder. Metin için BERT, görüntüler için ViT yalnızca kodlayıcı kullanır.
- Yalnızca kod çözücü: Her belirteç yalnızca kendisinden önceki belirteçlere dikkat eder; böylece model metni her seferinde bir belirteç üretir. GPT modelleri ve günümüzdeki çoğu LLM bu tasarımı kullanır.
- Kodlayıcı-kod çözücü: Bir kodlayıcı bir diziyi okur, kod çözücü ise çeviri modellerinde, T5'te ve Whisper konuşma tanıyıcısında olduğu gibi, ilk diziye dikkat ederek başka bir dizi yazar.
Bilgisayarlı Görüde Transformer'lar#
Vision Transformer (ViT), görüntüyü 16×16 piksellik parçalardan oluşan bir dizi olarak ele alır ve değiştirilmemiş bir transformer kodlayıcısı uygular; Swin Transformer ise yüksek çözünürlüklü görüntülere ölçeklenebilmek için dikkati yerel pencerelerle sınırlar. DETR, algılamayı küme tahmini olarak yeniden ele aldı: transformer kod çözücü, sabit sayıda öğrenilmiş nesne sorgusunu kutulara dönüştürür ve her sorgu bir nesneye karşılık gelir; böylece maksimum olmayan bastırma (NMS) ve elle tasarlanmış çıpalar ortadan kalkar. Ultralytics paketi, Baidu'nun bu tasarımın gerçek zamanlı bir sürümü olan RT-DETR modelini çalıştırır. RT-DETR'ın hibrit kodlayıcısı, 640×640 görüntü için 400 belirteç içeren yalnızca stride-32 özellik haritasına bir transformer kodlayıcı katmanı uygular; 6 katmanlı kod çözücüsü ise NMS olmadan 300 nesne sorgusunu son algılamalara dönüştürür. Transformer'lar görüntü de üretir: difüzyon transformer'ları son dönemdeki metinden görüntüye ve video modellerinde U-Net'in yerini aldı; görüntü-dil modelleri ise görüntü belirteçlerini yalnızca kod çözücü kullanan bir LLM'ye aktarır.
Transformer'lar ve İlgili Mimariler#
- Evrişimli sinir ağları (CNN): Evrişim, her konumda aynı filtreyi kullanarak küçük bir komşuluğu görür; bu yerleşik varsayım küçük veri kümelerinde fayda sağlar. Dikkat, tek bir katmanda herhangi iki konumu birbirine bağlayabilir ancak uzamsal yapıyı veriden öğrenmek zorundadır; bu nedenle transformer'ların CNN'leri geride bırakması için genellikle daha fazla eğitim verisi veya ön eğitim gerekir.
- RNN'ler ve LSTM'ler: Sabit boyutlu bir durumu adımdan adıma taşırlar; böylece belirteç başına bellek sabit kalır, ancak eğitim sıralı gerçekleşir. Transformer geçmişteki tüm belirteçleri kullanılabilir tutar ve paralel eğitim yapar.
- Durum uzayı modelleri: Mamba gibi mimariler dizileri, maliyeti uzunlukla doğrusal artan yinelemeli bir durumla işler; hibrit modeller ise bu mimarileri dikkat katmanlarıyla iç içe kullanır.
Öz dikkat her belirteci diğer tüm belirteçlerle karşılaştırdığı için maliyeti dizi uzunluğunun karesiyle artar. 4.096 belirteçlik bir dizide her katmanın her başlığında yaklaşık 16,8 milyon sorgu-anahtar çifti bulunur; uzunluğu iki katına çıkarıp 8.192 belirtece yükseltmek bu sayıyı yaklaşık 67 milyona, yani dört katına çıkarır. FlashAttention bu hesaplamanın bellek trafiğini azaltır; KV önbelleği ise önceki belirteçlerin anahtarlarını ve değerlerini saklayarak kod çözücünün bunları üretim sırasında yalnızca bir kez hesaplamasını sağlar.










