Transformatörler: Tüm İhtiyacınız Olan Dikkat

Cahit Barkin Ozer
19 min readJun 26, 2023

Transformatörlerle tanışmamızı sağlayan “Attention is all you need” makalesinin Türkçe çevirisi ve özeti niteliğinde hazırlanmış olan bu yazı ile konun temellerine tam anlamıyla hakim olun.

Makalenin orjinaline bu adresten ulaşabilirsiniz:

LLM mimarilerini görselleştirerek anlatan bir website:

Transformer mimarisi, uzun veri dizilerindeki kalıpları yakalamak ve devasa veri kümeleriyle başa çıkmak için mükemmeldir. Öyle ki, artık NLP’nin sınırlarını aşarak görüntü işleme gibi alanlara da uzanmaktadır.

Hugging Face’in Transformers kitaplığı, açık kaynak bir kütüphanedir ve hem TensorFlow’u hem de PyTorch’u destekler. Hugging Face Hub’dan önceden eğitilmiş bir modeli indirme, onu görevinize göre yapılandırma, ince ayar yapma, veri kümelerini ekleme ve performansını değerlendirme işlemleri kolayca gerçekleştirilebilir.

Transformatör’lerin bu çalışma alanını bir gecede sallamasına sebep olan şey dikkat, transfer öğrenme ve sinir ağlarını büyütme gibi özelliklerin sentezlenmesiydi.

Makale fazla uzun ve bilimsel bu nedenle hepsini okuyamayacağım diyenler için özet

Makale, dizi transdüksiyon görevleri için Transformer adı verilen yeni bir sinir ağı mimarisi önermektedir. Transformer, tekrarlamalı (RNN) ve evrişimli mimariden (CNN) tamamen vazgeçerek, yalnızca dikkat mekanizmalarına dayanmaktadır. Transformatörler eğitmek için daha paralelleştirilebilir ve verimli oldukları için makine çevirisi görevlerinde en son teknolojiye sahip sonuçlar elde etmeyi sağlar.

Transformatör, her ikisi de bir öz-dikkat katmanı yığınından oluşan bir kodlayıcı ve bir kod çözücüden oluşur. Öz-dikkat, bir dizideki her pozisyonun, dizideki diğer herhangi bir konuma dikkat etmesine (yani odaklanmasına) izin veren bir mekanizmadır. Bu, Transformer’ın girdi ve çıktı dizileri arasındaki uzun vadeli ilişkileri öğrenmesini sağlar.

Transformatör, WMT 2014 İngilizceden Almancaya ve İngilizceden Fransızcaya çeviri görevleri konusunda eğitildi. Sırasıyla 28,4 ve 41,8 BLEU puanları ile her iki görevde de son seviye sonuçlar elde etti.

Transformatör o zamandan beri makine çevirisi, metin özetleme ve soru yanıtlama dahil olmak üzere çeşitli dizi transdüksiyon görevleri için popüler bir mimari haline geldi. Uzun menzilli ilişkiler gerektiren görevler için çok uygun, güçlü ve verimli bir mimaridir.

Bazı ek ayrıntılar

Transformatör, dizideki gelecekteki konumlara dikkatin verilmesini önlemek için maskelenmiş bir kendine dikkat mekanizması kullanır. Bu, modelin yalnızca girdinin sırasını ezberleyerek “hile yapmasını” önlemek için önemlidir. Transformatör, her katman ve girdi arasında artık bir bağlantıyı kullanır. Bu, eğitim sürecini stabilize etmeye ve modelin performansını iyileştirmeye yardımcı olur. Transformatör, eğitim adımlarının sayısıyla üstel olarak azalan bir öğrenme oranı çizelgesiyle ADAM optimizer kullanılarak eğitilir.

Transformer modelinin çalışma prensibini onun temel bileşenleri üzerinden inceleyelim

Girdi Gömmeleri

Girdi dizisi tipik olarak tek tek sözcüklere veya alt sözcük birimlerine dönüştürülür. Her token, gömme adı verilen yüksek boyutlu bir vektör temsiliyle eşlenir. Gömmeleri, dizideki tokenlerin hem anlamını hem de konumunu kodlar.

Konumsal Kodlama

Transformatörün doğasında herhangi bir kelime sırası kavramı bulunmadığından, modele konumsal bilgi sağlamak için konumsal kodlama kullanılır. Girdi gömmelerine konumsal kodlamalar eklenir ve modelin dizideki konumlarına göre tokenler arasında ayrım yapmasına olanak tanınır.

Öz-Dikkat Mekanizması

Öz-dikkat mekanizması, girdi sırasındaki farklı kelimeler arasındaki ilişkileri yakalar. Ağırlıkların sorgu, anahtar ve değer vektörleri arasındaki benzerliğe göre belirlendiği gömmelerin ağırlıklı toplamını hesaplar.

Her kelime üç vektörle ilişkilendirilir: sorgu, anahtar ve değer. Dikkat ağırlığı, belirli bir kelimenin dizideki diğer kelimelere göre önemini yansıtır. Öz-dikkat, dizideki tüm kelimeler için paralel olarak hesaplanarak verimli hesaplamaya olanak sağlar. Öz-dikkat mekanizması, modelin aynı anda girdinin farklı bölümlerine odaklanmasına izin veren birden çok dikkat “başı” olarak tanımlanabilir.

Çok Başlı Dikkat

Transformer modeli, “başlar” olarak bilinen birden fazla paralel öz-dikkat katmanı kullanır. Her dikkat başı, girdi dizisi içindeki farklı ilişkileri ve bilgileri yakalamaya odaklanır. Birden çok dikkat başlığının çıktıları birleştirilir ve nihai temsili elde etmek için doğrusal olarak dönüştürülür.

Artık Bağlantılar ve Katman Normalleştirme

Katmanlar boyunca bilgi akışına yardımcı olmak için, her bir alt modülün etrafına artık bağlantılar eklenir. Artık bağlantı, modelin önceki katmanlardan gelen bilgileri tutmasına izin vererek, eğitim sırasında önemli bilgilerin kaybını önler. Katman normalleştirme, her bir alt modülün çıktısına uygulanarak, özellikler boyutu boyunca değerleri normalleştirir.

İleri Beslemeli Sinir Ağı

Öz-dikkatten sonra, her bir pozisyona ayrı ayrı basit bir ileri beslemeli sinir ağı uygulanır. İleri beslemeli ağ, aralarında doğrusal olmayan bir aktivasyon fonksiyonu (tipik olarak ReLU) bulunan iki doğrusal dönüşümden oluşur. Bu ağ, modelin karmaşık ilişkileri yakalamasına ve gösterimler üzerinde doğrusal olmayan dönüşümler gerçekleştirmesine olanak tanır.

Kodlayıcı ve Kod Çözücü

Makine çevirisi gibi görevlerde, Transformer modeli bir kodlayıcı ve bir kod çözücüden oluşur. Kodlayıcı, giriş dizisini işler ve bir bağlamsallaştırılmış temsiller dizisi üretir. Kod çözücü, kodlayıcının gösterimlerini girdi olarak alır ve adım adım bir çıktı dizisi oluşturur.

Maskeleme

Kod çözücüde, modelin eğitim sırasında gelecekteki konumlara katılmasını önlemek için ek bir maskeleme mekanizması kullanılır. Modelin yalnızca sol taraf bağlamına katılmasını sağlamak için geçerli tokenin erişmemesi gereken bilgileri maskeler.

Çıktı Katmanı

Transformer modelinin son katmanı, softmax aktivasyonunu takip eden lineer bir dönüşümdür. Bağlamsallaştırılmış temsilleri, hedef kelime dağarcığı üzerinden olasılıklara dönüştürerek, üretim veya sınıflandırma sağlar.

Ayrıca şu videoyu izleyerek anlatılanları görsel olarak pekiştirebilirsiniz:

Pratik: PyTorch ile Transformer Algoritması Yazalım

PyTorch, kullanım kolaylığı, etkili tensor işlemleri ve derin öğrenme araştırmalarına sağladığı kapsamlı destek nedeniyle bu uygulamada tercih edildi. Transformer gibi karmaşık modelleri uygulamak için esnek bir çerçeve sunar.

Transformer sınıfı, genel olarak Transformer modelinin yapısını tanımlar. Bu yapının içinde, gömme katmanları, pozisyonel kodlama, kodlayıcı katmanları, çözücü katmanları ve çıktı tahmini için bir son lineer katman bulunur.

EncoderLayer ve DecoderLayer sınıfları, kodlayıcı ve çözücü içindeki bireysel katmanları tanımlar. Her katman, öz-dikkat mekanizması ve ileri beslemeli sinir ağı gibi bileşenlerden oluşur.

Transformer sınıfındaki forward metodu, modelin ileri geçişini uygular. Bu metot, kaynak ve hedef dizilerinin gömülmesini ve pozisyonel kodlamasını yapar. Ardından, kodlayıcı ve çözücü katmanlarını sırasıyla uygular ve çıktı olasılıklarını tahmin eder.

create_positional_encoding, create_padding_mask ve create_look_ahead_mask metotları, pozisyonel kodlama matrisini ve maskeleri oluşturmak için yardımcı fonksiyonlardır.

Her katmanın sonrasında katman normalizasyonu uygulanarak eğitim istikrarı ve performansı artırılır.

F.log_softmax fonksiyonu, çıktı logitlerine log-softmax aktivasyonunu uygulayarak çıktı vokabülü üzerinde geçerli bir olasılık dağılımı sağlar.

import torch
import torch.nn as nn
import torch.nn.functional as F

class Transformer(nn.Module):
def __init__(self, input_vocab_size, output_vocab_size, max_len, d_model, num_heads, num_layers):
super(Transformer, self).__init__()

# Giriş tokenlarını sürekli temsilcilere eşleyen gömme katmanı
self.embedding = nn.Embedding(input_vocab_size, d_model)

# Pozisyonel kodlama, giriş tokenlarının pozisyonel bilgisini yakalamak için
self.positional_encoding = self.create_positional_encoding(max_len, d_model)

# Kodlayıcı katmanları
self.encoder = nn.ModuleList([
EncoderLayer(d_model, num_heads) for _ in range(num_layers)
])

# Çözücü katmanları
self.decoder = nn.ModuleList([
DecoderLayer(d_model, num_heads) for _ in range(num_layers)
])

# Son lineer katman, çıktı tahmini için
self.fc = nn.Linear(d_model, output_vocab_size)

def forward(self, src, trg):
# Kaynak dizisi için gömme ve pozisyonel kodlama
src_embeddings = self.embedding(src) * torch.sqrt(src.size(-1))
src_embeddings += self.positional_encoding[:src.size(1), :]

# Hedef dizisi için gömme ve pozisyonel kodlama
trg_embeddings = self.embedding(trg) * torch.sqrt(trg.size(-1))
trg_embeddings += self.positional_encoding[:trg.size(1), :]

# Kodlayıcı ve çözücü dikkatleri için maske oluşturma
encoder_mask = self.create_padding_mask(src)
decoder_mask = self.create_look_ahead_mask(trg)
decoder_padding_mask = self.create_padding_mask(src)

# Kaynak dizisini kodlayıcı katmanlardan geçirme
for layer in self.encoder:
src_embeddings = layer(src_embeddings, encoder_mask)

# Hedef dizisini çözücü katmanlardan geçirme
for layer in self.decoder:
trg_embeddings = layer(trg_embeddings, src_embeddings, decoder_mask, decoder_padding_mask)

# Son çıktı tahmini
output = self.fc(trg_embeddings)

# Log-softmax aktivasyonunu uygulama ve çıktı olasılıklarını döndürme
return F.log_softmax(output, dim=-1)

def create_positional_encoding(self, max_len, d_model):
# Pozisyonel kodlama matrisini oluşturma
positional_encoding = torch.zeros(max_len, d_model)
position = torch.arange(0, max_len).unsqueeze(1)
div_term = torch.exp(torch.arange(0, d_model, 2) * -(math.log(10000.0) / d_model))
positional_encoding[:, 0::2] = torch.sin(position * div_term)
positional_encoding[:, 1::2] = torch.cos(position * div_term)
return positional_encoding

def create_padding_mask(self, seq):
# Diziler için dolgu maskesi oluşturma
return (seq == 0).unsqueeze(1).unsqueeze(2)

def create_look_ahead_mask(self, seq):
# Çözücü dikkati için ileri bakış maskesi oluşturma
seq_len = seq.size(1)
look_ahead_mask = torch.triu(torch.ones(seq_len, seq_len), diagonal=1).bool()
return look_ahead_mask

class EncoderLayer(nn.Module):
def __init__(self, d_model, num_heads):
super(EncoderLayer, self).__init__()

# Çoklu başlı öz-dikkat katmanı
self.multihead_attention = MultiheadAttention(d_model, num_heads)

# İleri beslemeli sinir ağı katmanı
self.feed_forward = FeedForward(d_model)

def forward(self, x, mask):
# Girişi öz-dikkat katmanından geçirme ve katman normalizasyonu uygulama
attention_output = self.multihead_attention(x, x, x, mask)
attention_output = F.layer_norm(attention_output + x, normalized_shape=x.size[1:])

# Çıktıyı ileri beslemeli sinir ağından geçirme ve katman normalizasyonu uygulama
forward_output = self.feed_forward(attention_output)
return F.layer_norm(forward_output + attention_output, normalized_shape=x.size[1:])

class DecoderLayer(nn.Module):
def __init__(self, d_model, num_heads):
super(DecoderLayer, self).__init__()

# Hedef dizisi için maskeli öz-dikkat katmanı
self.masked_attention = MultiheadAttention(d_model, num_heads)

# Kodlayıcı çıktısına dikkat etmek için çoklu başlı öz-dikkat katmanı
self.multihead_attention = MultiheadAttention(d_model, num_heads)

# İleri beslemeli sinir ağı katmanı
self.feed_forward = FeedForward(d_model)

def forward(self, x, enc_output, look_ahead_mask, padding_mask):
# Girişi maskeli öz-dikkat katmanından geçirme ve katman normalizasyonu uygulama
masked_attention_output = self.masked_attention(x, x, x, look_ahead_mask)
masked_attention_output = F.layer_norm(masked_attention_output + x, normalized_shape=x.size[1:])

# Maskeli dikkat çıktısını ve kodlayıcı çıktısını çoklu başlı öz-dikkat katmanından geçirme
multihead_attention_output = self.multihead_attention(
masked_attention_output, enc_output, enc_output, padding_mask
)
multihead_attention_output = F.layer_norm(multihead_attention_output + masked_attention_output, normalized_shape=x.size[1:])

# Çıktıyı ileri beslemeli sinir ağından geçirme ve katman normalizasyonu uygulama
forward_output = self.feed_forward(multihead_attention_output)
return F.layer_norm(forward_output + multihead_attention_output, normalized_shape=x.size[1:])

Tüm İhtiyacınız Olan Dikkat Makalesi

Özet

Baskın dizi transdüksiyon modelleri, karmaşık tekrarlayan veya evrişimli sinir ağlarına dayanarak bir kodlayıcı ve bir kod çözücü içerir. En iyi performans gösteren modeller, kodlayıcı ve kod çözücü arasında bir dikkat mekanizmasıyla bağlantı kurar. Bu makalede, sadece dikkat mekanizmalarına dayanan, rekürrens ve evrişimden tamamen vazgeçen yeni ve basit bir ağ mimarisi olan Transformer’ı öneriyoruz. İki makine çevirisi görevi üzerinde yapılan deneyler, bu modellerin daha iyi kaliteye sahip olduğunu, daha paralel hale getirilebildiklerini ve eğitim için daha az zaman gerektirdiklerini göstermektedir. Transformer, hem büyük hem de sınırlı eğitim verileriyle İngilizce’ye ayrıştırma işlemini başarılı bir şekilde uygulayarak diğer görevlerde iyi bir şekilde genelleme yapılabileceğini göstermektedir.

1 Giriş

Tekrarlayan sinir ağları ve uzun kısa süreli hafıza gibi teknikler, dizi modelleme ve transdüksiyon problemlerinde son teknoloji yaklaşımları şekillendirmiştir. Bu yaklaşımlar genellikle dil modellemesi ve makine çevirisi gibi görevlerde kullanılır.

Tekrarlayan modeller, hesaplamayı girdi ve çıktı dizilerinin sembol konumları boyunca adımlara böler. Konumları hesaplama sürecindeki adımlarla hizalayarak, önceki gizli durum (hidden state) ht-1 ve konum t’nin bir fonksiyonu olarak bir dizi gizli durum (hidden state) ht üretirler. Ancak, bu sıralı yapı, bellek kısıtlamaları nedeniyle örnekler arasında gruplama yapmayı sınırlar ve daha uzun dizilerde eğitim örnekleri içindeki paralelleştirmeyi zorlaştırır. Son zamanlarda yapılan çalışmalar, çarpanları ayırma stratejileri ve koşullu hesaplama yöntemleri ile hesaplama verimliliğinde önemli gelişmeler sağlamış ve aynı zamanda model performansını iyileştirmiştir. Ancak, sıralı hesaplamanın temel kısıtlamaları hala devam etmektedir.

Dikkat mekanizmaları, dizi modelleme ve transdüksiyon modellerinde, girdi veya çıktı dizilerindeki mesafelere bakılmaksızın bağımlılıkların modellenmesine izin vererek önemli bir rol oynamıştır. Bu mekanizmalar genellikle tekrarlayan bir ağ ile ilişkilendirilerek kullanılır.

Bu çalışmada, tekrardan kaçınmak ve girdi ile çıktı arasındaki genel ilişkileri göstermek için tamamen bir dikkat mekanizmasına dayanan yeni bir model mimarisi olan Transformer’ı öneriyoruz. Transformer, önemli ölçüde daha fazla paralelleştirmeye olanak sağlar ve sadece on iki saatlik bir eğitim süreci sonrasında çeviri kalitesinde yeni bir son teknolojiye ulaşabilir, örneğin sekiz adet P100 GPU kullanılarak.

2 Geçmiş Deneyimler

Sıralı hesaplamanın azaltılması amacıyla, Genişletilmiş Sinirsel GPU, ByteNet ve ConvS2S gibi modeller, evrişimli sinir ağlarını temel alır ve tüm girdi ve çıktı konumları için gizli temsilleri paralel olarak hesaplar. Bu modellerde, iki rastgele girdi veya çıktı konumu arasındaki ilişkiyi kurmak için gereken işlem sayısı, ConvS2S için doğrusal olarak ve ByteNet için logaritmik olarak konumlar arasındaki mesafeye bağlı olarak artar. Bu durum, uzak konumlar arasındaki bağımlılıkları öğrenmeyi zorlaştırır.

Kendine dikkat, bir dizinin farklı konumlarını ilişkilendirerek bir temsil hesaplamak için kullanılan bir dikkat mekanizmasıdır. Bu mekanizma, okuduğunu anlama, özetleme, metinsel gereklilikler ve görevden bağımsız cümle temsilleri gibi çeşitli görevlerde başarıyla kullanılmıştır. Uçtan uca bellek ağları ise, sıralı hizalanmış yineleme yerine yinelenen bir dikkat mekanizmasına dayanır ve basit dilde soru yanıtlama ve dil modelleme görevlerinde iyi performans gösterdiği gösterilmiştir.

Ancak, mevcut bilgilere göre, Transformer, girdi ve çıktı temsillerini hesaplamak için tamamen kendine dikkati kullanan ilk transdüksiyon modelidir. RNN’lerin veya evrişimlerin dizisel hizalanmasına dayanmadan çalışır. İlerleyen bölümlerde Transformer’ı detaylı bir şekilde açıklayacak, kendine dikkatin önemini vurgulayacak ve benzer modellere göre avantajlarını tartışacağız.

3 Model Mimarisi

Çoğu rekabetçi nöral sekans iletim modeli, bir kodlayıcı-kod çözücü yapısına sahiptir. Burada kodlayıcı, sembol gösterimlerinin (x1, …, xn) giriş sırasını sürekli gösterimlerin bir sırası olan z = (z1, …, zn) ile eşler. Z verildiğinde, kod çözücü, her adımda bir sonraki sembolü oluştururken önceden oluşturulmuş sembolleri tüketerek otomatik geri beslemeli bir şekilde bir sembol dizisi (y1, …, ym) üretir. Transformer, bu genel mimariyi takip ederken hem kodlayıcı hem de kod çözücü için yığılmış öz-dikkat ve noktasal tam bağlantılı katmanları kullanır. Bu katmanlar, aşağıdaki şeklin sol ve sağ yarısında gösterilir.

Transformer — model mimarisi

3.1 Kodlayıcı ve Kod Çözücü Yığınları

Kodlayıcı

Kodlayıcı, altı adet özdeş katmanın yığından oluşur ve her bir katmanda iki alt katman bulunur. İlk alt katman, çok başlı bir öz-dikkat mekanizmasıdır ve ikinci alt katman, basit bir ileri beslemeli ağ olup konum bilgisine dayalı olarak tamamen bağlantılıdır. Her iki alt katmanın çevresinde artık bağlantılar ve ardından katman normalizasyonu kullanılır. Yani, her bir alt katmanın çıktısı, LayerNorm(x + Sublayer(x)) şeklindedir; burada Sublayer(x), alt katmanın kendisi tarafından uygulanan bir fonksiyondur. Bu artık bağlantıları kolaylaştırmak için, modeldeki tüm alt katmanlar ve gömülü katmanlar, 512 boyutunda çıktılar üretir (dmodel = 512 olarak ifade edilir).

Kod çözücü

Kod çözücü, birbirine benzeyen altı katmandan oluşan bir transformers yapısal bileşendir. Her bir kod çözücü katmanı, iki alt katmanın yanı sıra kodlayıcı yığınının çıktısını işlemek için üçüncü bir alt katman ekler, bu alt katman çok başlı dikkati kullanır. Alt katmanlar arasında artık bağlantılar ve katman normalleştirme kullanırız. Ayrıca, çözücü yığınındaki öz-dikkat alt katmanını da değiştirerek ardışık pozisyonların birleşmesini engelleriz. Bu maskeleme, çıktı gömmelerinin belirli bir konumdan itibaren sadece daha küçük konumlardaki bilinen çıktılara dayanmasını sağlar, böylece tahminler yalnızca o konumdan önceki çıktılara bağlı olur.

3.2 Dikkat

Bir dikkat mekanizması, bir sorgu vektörüyle bir dizi anahtar-değer çiftini ilişkilendiren bir fonksiyondur. Bu fonksiyonda, sorgu, anahtarlar, değerler ve çıktıların hepsi vektörlerden oluşur. Çıktı, değerlerin ağırlıklı toplamı şeklinde hesaplanır. Bu toplamda her bir değere atanmış olan ağırlık, sorgu ve ilgili anahtar arasındaki uyumluluk fonksiyonu tarafından belirlenir. Yani, dikkat mekanizması, sorgu ve anahtarların uyumuna dayanarak, değerleri dikkate alarak bir çıktı üretir.

(solda) Ölçekli Nokta Çarpım Dikkati. (sağda) Çok Başlı Dikkati, paralel çalışan birkaç dikkat katmanından oluşur.

3.2.1 Ölçekli Nokta Çarpım Dikkati

Özel dikkat mekanizmamızı “Ölçekli Nokta-Ürün Dikkati” olarak adlandırıyoruz . Giriş, sorguların ve anahtarların boyutunu ifade eden “dk” ve değerlerin boyutunu ifade eden “dv”den oluşur. Sorgunun tüm anahtarlarla nokta çarpımlarını hesaplıyoruz, ardından bu değerleri √dk’ya bölüyoruz ve bir softmax fonksiyonu uygulayarak değerler üzerinde ağırlıklar elde ederiz. Uygulamada, aynı anda bir dizi sorgu için dikkat fonksiyonunu hesaplamak için Q matrisindeki sorguları bir araya getiririz. Anahtarlar ve değerler de K ve V matrislerinde bir arada bulunur. Çıkış matrisini şu şekilde hesaplarız:

3.2.2 Çok Başlı Dikkat

En yaygın kullanılan iki dikkat mekanizması, toplam dikkat ve nokta çarpım (çarpım) dikkatidir. Nokta çarpım dikkati, algoritmamızla aynıdır, sadece ölçeklendirme faktörü 1/√dk’dır. Ek dikkat mekanizması ise uyumluluk fonksiyonunu tek bir gizli katmana sahip bir ileri beslemeli ağ kullanarak hesaplar. İki mekanizma da teorik olarak benzer karmaşıklık özelliklerine sahip olsa da, nokta çarpım dikkati pratikte daha hızlı ve daha verimlidir çünkü yüksek düzeyde optimize edilmiş matris çarpma kodunu kullanır. Küçük dk değerleri için her iki mekanizma da benzer şekilde çalışırken, toplam dikkat, büyük dk değerleri için iç çarpıma göre daha iyi performans gösterir çünkü ölçekleme yapmadan çalışabilir. Büyük dk değerlerinde nokta çarpımlarının büyüklüğü arttığı ve softmax fonksiyonunu son derece küçük gradyanlı bölgelere ittiği konusunda şüphelerimiz var. Bu etkiyi ortadan kaldırmak için nokta çarpımlarını 1/√dk ile ölçeklendiriyoruz.

Anahtarlar, değerler ve sorguların her birini ayrı ayrı dk, dk ve dv boyutlarına yansıtarak, dikkat fonksiyonunu tek bir işlemde gerçekleştirmek yerine farklı boyutlarda öğrenilen doğrusal projeksiyonlarla h kez paralel olarak yansıtmayı tercih ettik. Bu projeksiyonlar kullanılarak sorguların, anahtarların ve değerlerin farklı boyutlardaki sürümleriyle dikkat fonksiyonunu gerçekleştirerek dv boyutlu çıktı değerlerini elde ediyoruz. Bu çıktı değerleri birleştirilir ve bir kez daha yansıtılır, böylece nihai değerlere ulaşılır. Çok başlı dikkat, modelin farklı konumlardan gelen bilgilere ortaklaşa erişmesini sağlar, tek bir dikkat başlığıyla bu mümkün olmaz çünkü ortalama almak bu işlemi engeller.

Bu çalışmada, 8 paralel dikkat katmanı veya başı kullanıyoruz (h = 8). Her bir baş için dk = dv = dmodel/h = 64 boyutunu kullanıyoruz. Bu küçültülmüş boyutlar nedeniyle her başın hesaplama maliyeti, tam boyutlu tek başlı dikkatin maliyetine benzer.

3.2.3 Modelimizde Dikkat Uygulamaları

Transformer, çok başlı dikkati üç farklı şekilde kullanır:

  1. “Kodlayıcı-kod çözücü dikkat” katmanlarında, sorgular bir önceki kod çözücü katmanından, hafıza anahtarları ve değerleri ise kodlayıcı çıkışından gelir. Bu şekilde, kod çözücüdeki her konum, giriş dizisindeki tüm konumlarla etkileşime geçebilir. Bu, tipik kodlayıcı-kod çözücü dikkat mekanizmasını taklit eder.
  2. Kodlayıcıdaki “öz-dikkat” katmanları, tüm anahtarların, değerlerin ve sorguların aynı kaynaktan gelmesiyle gerçekleştirilir. Bu durumda kaynak, kodlayıcının bir önceki katmanının çıktısıdır. Kodlayıcıdaki her konum, kodlayıcının bir önceki katmanındaki tüm konumlarla etkileşime geçebilir.
  3. Benzer şekilde, kod çözücüdaki “öz-dikkat” katmanları, her bir konumdaki kod çözücüdeki tüm konumlarla etkileşime geçebilir. Bununla birlikte, otomatik gerileme özelliğini korumak için sola doğru bilgi akışını engellememiz gerekmektedir. Bu, ölçeklenmiş nokta çarpım dikkatinin içinde, softmax girişindeki geçersiz bağlantılara karşılık gelen tüm değerleri maskeleyerek (−∞ olarak ayarlayarak) gerçekleştirilir.

3.3 Konum bazında İleri Beslemeli Ağlar

Dikkat alt katmanlarına ek olarak, her kodlayıcı ve kod çözücü katmanı, her bir konuma ayrı ayrı uygulanan tam bağlantılı bir ileri beslemeli ağ içerir. Bu ileri beslemeli ağ, iki doğrusal dönüşüm katmanından oluşur ve bu katmanlar arasında ReLU aktivasyonu bulunur. Bu şekilde, her bir konumdaki bilgilerin daha karmaşık özelliklerini yakalamak için non-lineer dönüşümler gerçekleştirilir.

Doğrusal dönüşümler, farklı konumlarda aynı olmasına rağmen katmandan katmana farklı parametreler kullanır. Bu, başka bir tanımıyla, çekirdek boyutu 1 olan iki evrişim işlemidir. Girdi ve çıktı boyutu dmodel = 512 olarak belirlenmiştir ve iç katman boyutu df = 2048'dir.

3.4 Gömmeler ve Softmax

Diğer dizi transdüksiyon modellerine benzer şekilde, girdi tokenlerini ve çıktı tokenlerini dmodel boyutlu vektörlere dönüştürmek için öğrenilmiş yerleştirmeleri kullanıyoruz. Ayrıca, kod çözücü çıktısını tahmin edilen bir sonraki token olasılıklarına dönüştürmek için öğrenilmiş doğrusal dönüşümü ve softmax fonksiyonunu kullanıyoruz. Modelimizde, iki gömme katmanı arasında aynı ağırlık matrisini paylaşıyoruz ve bu ağırlıkları √dmodel ile çarparak gömme katmanlarında kullanıyoruz.

3.5 Konumsal Kodlama

Modelimizde tekrarlama ve evrişim olmadığından, modelin dizideki tokenlerin sırasını anlaması için gömülü olan tokenlere, göreli veya mutlak konumları hakkında bilgi eklememiz gerekmektedir. Bu amaçla, kodlayıcı ve kod çözücü katmanlarının altında “konumsal kodlamalar” olarak adlandırılan eklemeler yaparız. Konumsal kodlamalar, gömmelerle aynı dmodel boyutuna sahiptir, böylece ikisi toplanabilir. Konumsal kodlamalar için birçok seçenek vardır ve hem öğrenilebilir hem de sabitlenebilir şekilde kullanılabilir.

Farklı katman türleri için maksimum yol uzunlukları, katman başına karmaşıklık ve minimum sıralı işlem sayısı. n dizi uzunluğu, d temsil boyutu, k konvolüsyonların çekirdek boyutu ve r kısıtlı öz-dikkatteki komşuluğun boyutu.

Bu çalışmada, farklı frekanslardaki sinüs ve kosinüs fonksiyonlarını kullanıyoruz:

Burada pos, tokenin konumunu temsil eder ve i boyutunda bir vektördür. Konumsal kodlamanın her boyutu, sinüzoidal bir fonksiyona karşılık gelir. Bu sinüzoidlerin dalga boyları, 2π’den başlayarak 10000 · 2π’ye kadar geometrik bir ilerlemeyle seçilir. Bu fonksiyonu seçmemizin nedeni, herhangi bir sabit ofset k için, P Epos+k’nın P Epos’un lineer bir fonksiyonu olarak temsil edilebileceğini varsaymamızdır. Bu, modelin göreli konumlarla dikkat etmeyi kolayca öğrenmesine olanak tanır. Öğrenilmiş konumsal yerleştirmeleri denememize rağmen [9], sinüzoidal versiyonla neredeyse aynı sonuçları verdiğini bulduk (Tablo 3, E satırı). Sinüzoidal versiyonunu seçmemizin nedeni, modelin eğitim sırasında karşılaştığı uzunluklardan daha uzun dizi uzunluklarını tahmin etmesine izin vermesidir.

4 Neden Öz-Dikkat

Bu bölümde, öz-dikkat katmanlarının çeşitli yönlerini, bir değişken uzunluktaki sembol temsilleri dizisini (x1, …, xn) eşit uzunluktaki başka bir diziye (z1, ..) dönüştürmek için yaygın olarak kullanılan tekrarlayan ve evrişimli katmanlarla karşılaştırıyoruz. Burada xi, zi ∈ R^d ve örneğin bir dizi transdüksiyon kodlayıcısında veya kod çözücüsünde gizli bir katman gibi düşünebiliriz. Öz-dikkat kullanımımızı motive etmek için üç gereklilik göz önünde bulunduruyoruz. İlk olarak, katman başına toplam hesaplama karmaşıklığına bakıyoruz. İkinci olarak, paralelleştirilebilir hesaplama miktarını, gerekli ardışık işlemlerin minimum sayısıyla ölçüyoruz. Üçüncü olarak, uzun menzilli bağımlılıklar arasındaki yol uzunluğunu inceliyoruz. Uzun menzilli bağımlılıkları öğrenmek, birçok dizi transdüksiyon görevinde önemli bir zorluktur. Bu tür bağımlılıkları öğrenme yeteneğini etkileyen anahtar faktörlerden biri, ileri ve geri sinyallerin ağda geçmesi gereken yolun uzunluğudur. Girdi ve çıktı dizilerindeki herhangi bir konum kombinasyonu arasındaki yol ne kadar kısa olursa, uzun menzilli bağımlılıkları öğrenmek o kadar kolay olur. Bu nedenle, farklı katman türlerinden oluşan ağlarda herhangi iki giriş ve çıkış konumu arasındaki maksimum yol uzunluğunu da karşılaştırıyoruz. Tablo 1'de belirtildiği gibi, bir öz-dikkat katmanı tüm konumları sabit sayıda sıralı işlemle birbirine bağlarken, tekrarlayan bir katman O(n) sıralı işlem gerektirir. Hesaplama karmaşıklığı açısından, öz-dikkat katmanları, dizi uzunluğu n ve temsil boyutu d olduğunda, tekrarlayan katmanlardan daha hızlıdır. Bu, makine çevirilerinde son teknoloji modeller tarafından kullanılan cümle temsillerinde sıklıkla görülen bir durumdur, örneğin kelime parçaları ve bayt çifti gösterimleri gibi. Hesaplama performansını iyileştirmek için çok uzun diziler içeren görevlerde, kişisel dikkat, sadece r büyüklüğündeki bir komşulukta ilgili çıktı konumuna odaklanarak sınırlanabilir. Bu, maksimum yol uzunluğunu O(n/r) değerine yükseltir. Gelecekteki çalışmalarda bu yaklaşımı daha fazla araştırmayı planlıyoruz. n < k olan tek bir evrişimli katman, tüm giriş ve çıkış konumlarını birbirine bağlamaz. Bu, bitişik çekirdekler durumunda O(n/k) bir evrişimli katman yığını veya genişlemiş evrişimler durumunda O(logk(n)) gerektiren en uzun yol uzunluğunu artırır. Evrişimli katmanlar genellikle tekrarlayan katmanlardan k kat daha pahalıdır. Bununla birlikte, ayrılabilir evrişimler, karmaşıklığı O(k · n · d + n · d²) seviyesine düşürür. Ayrılabilir bir evrişimde bile k = n olduğunda, karmaşıklık, bizim modelimizde kullandığımız öz-dikkat katmanı ve noktasal ileri besleme katmanının kombinasyonuna eşittir. Kişisel dikkat, daha yorumlanabilir modeller sağlayabilir. Modellerimizden dikkat dağılımlarını inceleyerek örnekler sunuyor ve tartışıyoruz. Bireysel dikkat başkanları, farklı görevleri net bir şekilde öğrenmenin yanı sıra, birçok durumda cümlelerin sözdizimsel ve anlamsal yapısıyla ilişkili davranışlar sergiler gibi görünmektedir.

5 Eğitim

Bu bölümde modellerimiz için eğitim rejimi açıklanmaktadır.

5.1 Eğitim Verileri ve Harmanlama

Standart WMT 2014 İngilizce-Almanca veri seti üzerinde yaklaşık 4,5 milyon cümle çiftiyle eğitim yaptık. Cümleler, bayt çifti kodlaması [3] kullanılarak yaklaşık 37,000 tokena sahip paylaşılan bir kaynak hedef sözlüğüyle kodlandı. İngilizce-Fransızca için ise, WMT 2014 İngilizce-Fransızca veri setinde yaklaşık 36 milyon cümle kullanıldı ve cümleler 32,000 kelimeye bölündü. Cümle çiftleri, yaklaşık dizi uzunluklarına göre gruplandırıldı. Her eğitim grubu, yaklaşık 25,000 kaynak belirteci ve 25,000 hedef belirteci içeren bir dizi cümle çifti içeriyordu.

5.2 Donanım ve Planlama

Modellerimizi 8 adet NVIDIA P100 GPU’lu bir makinede eğittik. Temel modellerimiz için, belgede açıklanan hiperparametreleri kullanarak her eğitim adımı yaklaşık 0,4 saniye sürdü. Temel modelleri toplamda 100,000 adım veya 12 saat süreyle eğittik. Büyük modellerimiz için (tablo 3'ün alt satırında belirtildiği gibi), adım süresi 1,0 saniyeydi. Büyük modelleri ise 300,000 adım (3,5 gün) süresince eğittik.

5.3 İyileştirici

β1 = 0.9, β2 = 0.98 ve = 10−9 ile ADAM optimizer kullandık . Aşağıdaki formüle göre, eğitim boyunca öğrenme oranını değiştirdik:

Bu, eğitim adımları için öğrenme hızının ilk olarak doğrusal olarak arttırıldığı ve daha sonra adım sayısının ters kareköküyle orantılı olarak azaltıldığı bir yöntemdir. Biz 4000 adet ısınma adımı kullanarak bu yaklaşımı benimsedik.

5.4 Düzenleme

Eğitim sırasında üç tür düzenlileştirme kullanıyoruz:

Artık Terk-etme
Alt katman girişine eklenmeden ve normalleştirilmeden önce her alt katmanın çıktısına terk-etme uyguluyoruz. Ek olarak, hem kodlayıcı hem de kod çözücü yığınlarındaki gömmelerin ve konumsal kodlamaların toplamlarına terk-etme uygularız. Temel model için bir oran kullanıyoruz
Pdrop = 0.1.

Transformer, İngilizceden Almancaya ve İngilizceden Fransızcaya newtest2014 testlerinde eğitim maliyetinin çok altında önceki son teknoloji modellere göre daha iyi BLEU puanları elde ediyor.

Etiket Yumuşatma

Eğitim sırasında, etiket yumuşatma için ls = 0,1 değerini kullandık. Etiket yumuşatma, modelin daha emin olmasını engelleyerek, doğruluğu ve BLEU puanını artırma amacıyla kullanılır. Bu, başlangıçta belirli bir sınıfa aşırı odaklanmayı önler ve genellemeyi teşvik eder.

6 Sonuç

6.1 Makine Çevirisi

WMT 2014 İngilizce-Almanca çeviri görevinde, büyük Transformer modeli (Tablo 2'deki Transformer (büyük)), önceki rapor edilen en iyi modelleri (topluluk dahil) geride bırakarak yeni bir başarı elde etti. Bu model, 28.4 BLEU puanıyla önceki en iyi modelleri geride bırakarak önemli bir ilerleme kaydetti. Modelin yapılandırması Tablo 3'ün alt satırında listelenmektedir. Eğitim süresi 8 P100 GPU üzerinde 3,5 gün sürdü. Temel modelimiz bile, daha önce yayınlanmış tüm modelleri ve toplulukları geride bırakarak, rakip modellerin eğitim maliyetinin çok altında bir başarı elde etti. WMT 2014 İngilizce-Fransızca çeviri görevinde, büyük modelimiz 41.0 BLEU puanıyla daha önce yayınlanmış tüm tekil modellerden daha iyi bir performans sergiledi ve önceki son teknoloji modeline göre eğitim maliyetinin 1/4'ünden daha azdı. İngilizce-Fransızca çevirisi için eğitilen büyük Transformer modeli, 0.1 droppout oranı kullanarak Pdüşümü = 0.3 yerine bırakma oranı kullandı. Temel modeller için, son 5 kontrol noktasının ortalamasını alarak elde edilen tek bir modeli kullandık. Büyük modeller için ise son 20 kontrol noktasının ortalamasını kullandık. İşın aramasında ışın boyutu 4 ve uzunluk cezası α = 0.6 kullanıldı. Bu hiperparametreler, geliştirme seti üzerinde yapılan deneylerin sonucunda seçildi. Çıkarım sırasında maksimum çıkış uzunluğunu giriş uzunluğu + 50 olarak ayarladık, ancak mümkün olduğunda erken sonlandırdık. Sonuçlarımızı özetleyerek, çeviri kalitemizi ve eğitim maliyetlerimizi diğer model mimarileriyle karşılaştırıyoruz. Model eğitimi için kullanılan kayan nokta işlem sayısını, eğitim süresini, kullanılan GPU sayısını ve her GPU’nun sürekli tek duyarlı kayan nokta kapasitesini tahmin ediyoruz.

6.2 Model Varyasyonları

Transformer’ın farklı bileşenlerinin önemini değerlendirmek için temel modelimizi çeşitli şekillerde değiştirdik ve İngilizceden Almancaya çeviri performansındaki değişimi ölçmek için geliştirme seti olan newstest2013'ü kullandık. Işın arama yöntemini kullanarak sonuçları elde ettik, ancak kontrol noktası ortalaması almadık. Bu sonuçları Tablo 3'te sunuyoruz. Tablo 3'ün satırlarında (A), hesaplama miktarını sabit tutarak, dikkat başlarının sayısını ve dikkat anahtar ve değer boyutlarını değiştirdik. Tek başlı dikkat kullanımı, en iyi ayara kıyasla 0.9 BLEU puanı daha düşük performans gösterdi, ancak çok fazla baş kullanımı da kaliteyi düşürdü.

Transformer mimarisindeki varyasyonlar. Liste dışı değerler, temel modelinkiler ile aynıdır. Tüm ölçümler İngilizceden Almancaya çeviri geliştirme seti olan newstest2013'tedir. Listelenen karışıklıklar, bayt çifti kodlamamıza göre kelime başınadır ve kelime başına karışıklıklarla karşılaştırılmamalıdır.
Transformer, İngiliz seçim bölgesi ayrıştırmasına iyi genelleme yapar.

6.3 İngilizce Seçim Bölgesi Ayrıştırma

Transformer’ın diğer görevlere ne kadar genelleştirilebileceğini değerlendirmek için İngilizce cümle seçimine dayalı ayrıştırma üzerinde deneyler yaptık. Bu görev, çıktının güçlü yapısal kısıtlamalara tabi olduğu ve girdiden önemli ölçüde daha uzun olduğu belirli zorluklar sunar. Ayrıca, RNN tabanlı diziden dizine modeller, küçük veri setlerinde bile son teknoloji sonuçlarına ulaşmada başarılı olamamıştır. Wall Street Journal (WSJ) bölümündeki Penn Treebank üzerinde, 4 katmanlı bir transformatörü dmodel = 1024 boyutunda eğittik ve yaklaşık 40.000 eğitim cümlesini kullandık. Ayrıca, daha büyük bir veri seti olan yaklaşık 17 milyon cümle üzerinde yarı denetimli bir ortamda eğitim yapmak için yüksek güvenlikli ve BerkleyParser kullanarak çalıştık. WSJ ayarı için 16K kelime dağarcığı ve yarı denetimli ayar için 32K kelime dağarcığı kullandık. Bölüm 22 geliştirme setinde, yalnızca az sayıda deney yaparak dikkat ve artık durumunu, öğrenme hızlarını ve ışın boyutunu seçmek için denemeler yaptık. Diğer tüm parametreler, İngilizceden Almancaya temel çeviri modelinden değişmeden kaldı. Çıkarım sırasında, maksimum çıkış uzunluğunu giriş uzunluğu + 300 olarak belirledik. Hem WSJ hem de yarı denetimli ayarlar için ışın boyutu olarak 21 ve α = 0,3 değerlerini kullandık. Tablo 4'teki sonuçlarımız, göreve özel ayarlamalar olmamasına rağmen, modelimizin şaşırtıcı derecede iyi performans gösterdiğini ve daha önce bildirilen tüm modellerden, Tekrarlayan Sinir Ağı Dilbilgisi haricinde daha iyi sonuçlar verdiğini gösteriyor. RNN tabanlı diziden dizine modellerin aksine, Transformer WSJ eğitim setiyle sınırlı kalmış olmasına rağmen, BerkeleyParser’dan daha iyi performans gösteriyor.

7. Karar

Bu çalışmada, tekrarlayan katmanları çok başlı öz-dikkat ile değiştirerek, kodlayıcı-kod çözücü mimarilerinde en yaygın olarak kullanılan yapıyı tamamen dikkate dayalı ilk dizi iletim modeli olan Transformer’ı tanıttık. Transformer, çeviri görevlerinde tekrarlayan veya evrişimli katmanlara dayalı mimarilere kıyasla daha hızlı bir şekilde eğitilebilir. Hem WMT 2014 İngilizceden Almancaya hem de WMT 2014 İngilizceden Fransızcaya çeviri görevlerinde olağanüstü sonuçlar elde ettik. İlk görevde, en iyi modelimiz, daha önce rapor edilen tüm diğer modellerden daha iyi performans göstermektedir. Dikkate dayalı modellerin geleceği konusunda heyecanlıyız ve bunları farklı görevlere uygulamayı planlıyoruz. Ayrıca, Transformer’ı metin dışındaki girdi ve çıktı modalitelerini içeren sorunlara genişletme ve büyük girdi ve çıktıları, örneğin görüntü, ses ve videoyu etkili bir şekilde işleyebilmek için yerel ve sınırlı dikkat mekanizmalarını araştırmayı hedefliyoruz. Ayrıca, daha az sıralı üretimi sağlama konusunda da araştırmalar yapmayı planlıyoruz.

Modellerimizin eğitim ve değerlendirmesinde kullanılan kod şu adrestedir:

https://github.com/ tensorflow/tensor2tensor.

Dikkat Görselleştirmeleri

İşte 6. katmanın 5. dikkat başkanındaki kodlayıcı öz-dikkatinde uzun mesafeli bağımlılıkları takip eden bir örnektir. Dikkat başlarının çoğu, ‘yapmak’ fiilinin uzaktaki bir bağımlılığına odaklanarak ‘yapmak… daha da zorlaştırmak’ ifadesini tamamlamaktadır. Burada sadece ‘yapım’ kelimesine odaklanılmıştır. Farklı renkler, farklı dikkat başlarını temsil eder ve en renklerle vurgulanır.
Yine 6. katmanın 5. dikkat başkanında, görünüşe göre anfora çözümlemesine dahil olan iki dikkat başı bulunuyor. Üstte, 5. baş için tam dikkat gösterilirken, altta 5. ve 6. başlar için sadece ‘onun’ kelimesine odaklanmış dikkat görülmektedir. Bu kelime için dikkatlerin çok net olduğuna dikkat ediniz.
Dikkat başlarının çoğu, cümlenin yapısıyla ilgili görünen farklı davranışlar sergiliyor. Yukarıda, 6. katmanın 5. kodlayıcı öz-dikkatinden iki farklı baş için iki örnek veriyoruz. Başlar açıkça farklı görevleri yerine getirmeyi öğrenmiş durumda.

Kaynak

Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz Kaiser, & Illia Polosukhin. (2017). Attention Is All You Need.

--

--

Cahit Barkin Ozer

Daha fazla şey öğrenmek ve daha iyi olmak isteyen bir yazılım mühendisi.