Reformer
Reformer, çok uzun dizileri işleyebilmek için yerellik duyarlı karma dikkatini ve tersinir katmanları kullanan, bellek açısından verimli bir Transformer mimarisidir.
Reformer, UC Berkeley ve Google Research'ten Nikita Kitaev, Łukasz Kaiser ve Anselm Levskaya'nın ICLR 2020'de sunduğu Reformer: Verimli Transformer makalesinde tanıttığı, bellek açısından verimli bir Transformer modelidir. Dizi uzunluğunu sınırlayan iki maliyeti ele alır. Yerellik duyarlı karma (LSH) dikkat mekanizması, tam n × n dikkat matrisinin yerini alır ve uzunluğu L olan bir dizi için yaklaşık L log L maliyet getirir. Tersinir artık katmanlar ise geri yayılım için gereken aktivasyonları her katman için ayrı ayrı değil, tüm ağ için bir kez saklar. Google, Reformer'ın 16 GB belleğe sahip tek bir hızlandırıcıda 1 milyon kelimeye kadar bağlam pencerelerini işleyebildiğini bildirdi. Model, Suç ve Ceza romanının tamamını tek bir eğitim örneği olarak işledi.
LSH Dikkati#
Softmax sonrasında her sorgunun dikkati, kendisine en çok benzeyen birkaç anahtar tarafından belirlenir; bu nedenle Reformer yalnızca bu anahtarları arar. Sorgular ve anahtarlar için ortak bir izdüşüm kullanır ve her vektörü açısal yerellik duyarlı karma ile karmalar: rastgele bir R matrisiyle çarpar ve en büyük değerin konumunu [xR, −xR] içindeki kova olarak alır. Böylece benzer yönleri gösteren vektörler genellikle aynı kovaya düşer. Ardından belirteçler kovaya göre sıralanır, sıralı dizi eşit parçalara bölünür ve her belirteç yalnızca kendi parçasına ve önceki parçaya dikkat eder. Tek bir turun birbirinden ayırdığı benzer çiftleri yakalamak için birkaç karma turu paralel yürütülür.
LSH, yaklaşık en yakın komşu vektör araması için klasik bir yöntemdir: bir sorgunun k en yakın komşusunun çoğunu tam aramanın çok daha düşük maliyetli bir kısmıyla bulur. Kovalara ayırma adımı tek başına çalıştırılabilecek kadar kısadır:
import torch
torch.manual_seed(0)
dim, n_buckets, rounds = 64, 16, 1000
query = torch.randn(dim)
vectors = {"query": query, "near": query + 0.3 * torch.randn(dim), "far": torch.randn(dim)}
# Angular LSH as in Reformer: random projection R, then bucket = argmax over [xR, -xR]
R = torch.randn(rounds, dim, n_buckets // 2)
buckets = {}
for name, x in vectors.items():
proj = torch.einsum("d,rdb->rb", x, R)
buckets[name] = torch.cat([proj, -proj], dim=-1).argmax(dim=-1)
for name in ("near", "far"):
cosine = torch.cosine_similarity(query, vectors[name], dim=0)
shared = (buckets[name] == buckets["query"]).float().mean()
print(f"{name}: cosine similarity {cosine:.2f}, same bucket as the query in {shared:.0%} of rounds")Sorguya kosinüs benzerliği 0,96 olan yakın vektör, 1.000 turun %72'sinde aynı kovayı paylaşırken benzerliği 0,04 olan ilgisiz vektör bunu %9'unda yapar. Bu nedenle dikkati bir kovayla sınırlamak, önemli çiftlerin çoğunu korur.
Tersinir Katmanlar ve Parçalara Bölme#
Standart bir sinir ağı, geri geçiş için her katmanın aktivasyonlarını saklar; bu nedenle bellek kullanımı hem derinlikle hem de dizi uzunluğuyla artar. Reformer, tersinir artık ağları (RevNet'ler) uyarlar: aktivasyonları iki yarıya böler ve her yarıyı diğerinin bir fonksiyonuyla günceller.
Geri geçiş sırasında her katman, girdilerini çıktılarından yeniden elde eder: x2 = y2 − FeedForward(y1), ardından x1 = y1 − Attention(x2). Böylece yalnızca son aktivasyonlar saklanır ve her katman bir kez yeniden hesaplanır. Gradyan kontrol noktası kullanımı da aktivasyonları birkaç kontrol noktasında saklayıp aradaki katmanları yeniden hesaplayarak benzer bir ödünleşim sağlar. Reformer ayrıca ileri beslemeli katmanlarını konum parçaları hâlinde çalıştırır, çünkü bu katmanların gizli katmanı modelden birkaç kat daha geniştir. Aktivasyon belleği, Ultralytics YOLO26'yı eğitirken toplu iş boyutunu sınırlar: batch=-1 ile AutoBatch, farklı toplu iş boyutlarında GPU belleğini ölçer, doğrusal bir doğru uydurur ve boş belleğin %60'ını dolduracağı tahmin edilen toplu iş boyutunu seçer.
Sonuçlar ve Uygulamalar#
Reformer, enwik8'de karakter düzeyinde metin ve ImageNet-64'te piksel piksel görüntü üretimi görevlerinde standart Transformer'larla eşleşen sonuçlar elde ederken çok daha az bellek kullandı ve uzun dizilerde daha hızlı çalıştı. Hugging Face Transformers, modeli ReformerModel olarak uygular ve enwik8 ile Suç ve Ceza üzerinde eğitilmiş kontrol noktaları yayımlar.
Reformer ve İlgili Modeller#
- Longformer: Dikkat düzenini önceden sabitler: her belirtecin çevresinde kayan bir pencere ve birkaç genel belirteç kullanır.
- Seyrek dikkat: Yalnızca bazı belirteç çiftlerini puanlayan yöntemler ailesidir. LSH dikkati, bu ailenin içerik tabanlı bir üyesidir.
- Doğrusal dikkat: Softmax'ın yerine bir çekirdek özellik dönüşümü koyar; böylece dikkat doğrusal zamanda hesaplanabilir.
- Flash attention: Puan matrisini saklamadan GPU üzerindeki yongaiçi bellek döşemelerinde tam dikkati hesaplar; böylece puan sayısı karesel kalırken bellek doğrusal olarak büyür.










