Zephyrnet Logosu

Transformatörleri Anlamak, Veri Bilimi Yolu

Tarih:

Transformatörleri Anlamak, Veri Bilimi Yolu

Pek çok soru sorarak, transformatörleri, veri bilimi yöntemini anlama hakkındaki bu erişilebilir ve konuşmalı makaleyi okuyun.


Transformatörler, günümüzde herhangi bir NLP görevi için varsayılan standart haline geldi. Sadece bu da değil, aynı zamanda Computer Vision'da ve müzik üretmek için de kullanılıyorlar. Eminim hepiniz GPT3 Transformatörü ve uygulamaları hakkında bir şeyler duymuşsunuzdur. Ancak tüm bunlar bir yana, her zamanki gibi anlaşılması hala zor.

Google araştırması aracılığıyla bana birden fazla okuma götürdü kâğıt bir transformatörün nasıl çalıştığını gerçekten anlamak için ilk önce transformatörleri ve birçok blog yazısını tanıttı.

Bu yüzden, öğrenirken biraz eğlenmenin bir savunucusu olduğum için, tüm fikri olabildiğince basit kelimelere ve çok basit bazı Matematik ve bazı kelime oyunlarına indirmeyi düşündüm. Hem jargonu hem de teknikliği minimumda tutmaya çalışacağım, ancak bu öyle bir konu ki ancak bu kadarını yapabilirdim. Amacım, okuyucunun bu yazının sonuna kadar Transformer'in en korkunç ayrıntılarını bile anlamasını sağlamak.

Ayrıca, bu hem yazarken geçen süre hem de yazının uzunluğu açısından resmen en uzun yazım. Bu nedenle, size bir kahve almanızı tavsiye edeceğim. ☕️

Öyleyse, işte başlıyoruz - Bu gönderi son derece konuşkan olacak ve "Transformatörün Kodunu Çözme ”.

S: Öyleyse, Transformer'ı neden anlamalıyım?

Geçmişte, LSTM ve GRU mimarisi (burada geçmişimde açıklandığı gibi)  Facebook post NLP'de), Dil modelleme problemleri için Son Durum Yaklaşımı (çok basit bir şekilde ifade edin, sonraki kelimeyi tahmin edin) ve Çeviri sistemleri için kullanılan dikkat mekanizması ile birlikte. Ancak, bu mimarilerle ilgili temel sorun, doğaları gereği yinelenmeleri ve sıra uzunluğu arttıkça çalışma süresinin artmasıdır. Yani, bu mimariler bir cümle alır ve her kelimeyi bir ardışık yol ve dolayısıyla cümle uzunluğundaki artışla birlikte tüm çalışma zamanı artar.

İlk olarak makalede açıklanan bir model mimarisi olan Transformer, ihtiyacınız olan tek şey dikkat, bu yinelemeyi bırakalım ve bunun yerine, girdi ve çıktı arasında küresel bağımlılıklar çekmek için tamamen bir dikkat mekanizmasına güveniyor. Ve bu onu HIZLI yapar.

Bu, tam transformatörün kağıttan alınmış resmi. Ve kesinlikle korkutucu. Bu nedenle, bu yazıda her bir parçanın üzerinden geçerek onu aydınlatmayı hedefleyeceğim. Öyleyse önceden okuyun.

Büyük Resim

 
S: Kulağa ilginç geliyor. Peki bir transformatör tam olarak ne yapar?

Esasen, bir transformatör hemen hemen her NLP görevini gerçekleştirebilir. Gerektiği gibi dil modelleme, Çeviri veya Sınıflandırma için kullanılabilir ve problemin sıralı doğasını ortadan kaldırarak hızlı yapar. Bu nedenle, bir makine çevirisi uygulamasındaki transformatör bir dili diğerine çevirecektir veya bir sınıflandırma problemi için uygun bir çıktı katmanı kullanarak sınıf olasılığını sağlayacaktır.

Her şey ağ için nihai çıktı katmanına bağlı olacaktır, ancak Transformer'in temel yapısı herhangi bir görev için tamamen aynı kalacaktır. Bu özel gönderi için, makine çevirisi örneğiyle devam edeceğim.

Yani çok yüksek bir yerden, transformatör bir çeviri görevi bu şekilde arar. Giriş olarak bir İngilizce cümle alır ve bir Almanca cümle döndürür.

şekil

Çeviri için Trafo (Yazara göre resim)

Yapı Taşları

 
S: Bu çok basitti. 😎 Onu genişletebilir misin?

Tamam, sonunda unutma, sen istedin. Biraz daha derine inelim ve bir transformatörün nelerden oluştuğunu anlamaya çalışalım.

Dolayısıyla, bir transformatör temelde bir kodlayıcı ve kod çözücü katmanlarından oluşur. Bir kodlayıcı katmanının rolü, dikkat mekanizmasını kullanarak İngilizce cümleyi sayısal bir forma kodlamaktır, kod çözücü ise belirli İngilizce cümle için Almanca çevirisini vermek üzere kodlayıcı katmanlarından gelen kodlanmış bilgileri kullanmayı amaçlamaktadır.

Aşağıdaki şekilde, transformatör, 6 kodlayıcı katmanı kullanılarak kodlanan bir İngilizce cümle girdi olarak verilmiştir. Nihai kodlayıcı katmanından gelen çıktı, daha sonra İngilizceyi Almancaya çevirmek için her bir kod çözücü katmanına gider.

şekil

Transformatörde Veri Akışı (Yazara göre resim)

1. Kodlayıcı Mimarisi

 
S: Sorun değil ama bir kodlayıcı yığını İngilizce bir cümleyi tam olarak nasıl kodlar?

Sabır, ona ulaşıyorum. Dediğim gibi, kodlayıcı yığını üst üste altı kodlayıcı katmanı içerir (Makalede verildiği gibi, ancak transformatörlerin gelecekteki sürümleri daha da fazla katman kullanır). Ve yığındaki her kodlayıcının temelde iki ana katmanı vardır:

  • çok başlı bir öz-ilgi Katmanı ve
  • konum açısından tam bağlantılı ileri beslemeli bir ağ
şekil

Çok temel kodlayıcı Katmanı (Yazara göre resim)

Ağız dolusu. Sağ? Önümüzdeki bölümlerde ikisini de açıklayacağım için beni henüz kaybetmeyin. Şu anda, kodlayıcı katmanının dikkat ve konum açısından ileri beslemeli bir ağ içerdiğini unutmayın.

S: Peki bu katman girdilerinin nasıl olmasını bekliyor?

Bu katman, girdilerinin şekle uygun olmasını bekler. SxD (aşağıdaki şekilde gösterildiği gibi) burada S kaynak cümle (İngilizce Cümle) uzunluğu ve D ağ ile ağırlıkları eğitilebilen gömme boyutudur. Bu yazıda kullanacağız D varsayılan olarak 512 olarak. S, bir toplu işteki maksimum cümle uzunluğu olacaktır. Bu yüzden normalde partilerle değişir.

şekil

Kodlayıcı - Giriş ve Çıkış şekilleri aynıdır (Yazara göre resim)

Peki ya bu katmanın çıktıları? Kodlayıcı katmanlarının üst üste yığıldığını unutmayın. Bu nedenle, çıkışın bir sonraki kodlayıcıya kolayca akabilmesi için girdi ile aynı boyutta bir çıktı elde edebilmek istiyoruz. Yani çıktı aynı zamanda şekildedir, SxD.

S: Boyutlar hakkında yeterince konuştuktan sonra neyin girip neyin çıktığını anlıyorum ama Kodlayıcı katmanında gerçekte ne oluyor?

Tamam, dikkat katmanından ve ileri besleme katmanından birer birer geçelim:

A) Öz ilgi katmanı

şekil

Öz Dikkat Nasıl Çalışır (Yazara göre resim)

Yukarıdaki şekil ürkütücü görünmeli ancak anlaşılması kolaydır. O yüzden burada benimle kal.

Derin Öğrenme, aslında pek çok matris hesaplamasından başka bir şey değildir ve esasen bu katmanda yaptığımız şey, akıllıca bir çok matris hesaplamasıdır. Öz dikkat katmanı 3 ağırlık matrisiyle başlar - Sorgu (W_q), Anahtar (W_k) ve Değer (W_v). Bu matrislerin her birinin boyutu (Dxd) kağıtta d 64 olarak alınır. Bu matrislerin ağırlıkları, modeli eğittiğimizde eğitilecektir.

İlk hesaplamada (şekilde Hesap 1), girdiyi ilgili Sorgu, Anahtar ve Değer matrisiyle çarparak Q, K ve V matrislerini oluşturuyoruz.

Şimdiye kadar önemsiz ve mantıklı olmamalı, ancak ilginçleştiği ikinci hesaplamada. Softmax fonksiyonunun çıktısını anlamaya çalışalım. Bir boyut matrisi elde etmek için Q ve Kᵀ matrisini çarparak başlıyoruz (SxS) ve skaler √d'ye bölün. Ardından satırların toplamını bir yapmak için bir softmax alıyoruz.

Sezgisel olarak, sonucu düşünebiliriz SxS Her kelimenin başka bir kelimedeki katkısı olarak matris. Örneğin şöyle görünebilir:

şekil

Softmax (QxKt / sqrt (d)) (Yazara göre resim)

Gördüğünüz gibi çapraz girişler büyük. Bunun nedeni, kelime katkısının yüksek olmasıdır. Bu makul. Ancak burada "çabuk" kelimesinin "çabuk" ve "tilki" ye dönüştüğünü ve "kahverengi" kelimesinin de "kahverengi" ve "tilki" ye dönüştüğünü görüyoruz. Bu, sezgisel olarak, "hızlı" ve "kahverengi" kelimelerinin her birinin "tilki" anlamına geldiğini söylememize yardımcı olur.

Katkıları olan bu SxS matrisine sahip olduğumuzda, bu matrisi cümlenin Değer matrisi (Sxd) ile çarpıyoruz ve bize Sxd (4 × 64) şeklinde bir matris veriyor. Dolayısıyla, işlemin gerçekte yaptığı şey, "hızlı" gibi bir sözcüğün gömme vektörünü diyelim .75 x (hızlı gömme) ve .2x (tilki gömme) ile değiştirmesidir ve bu nedenle artık "hızlı" kelimesinin sonuç çıktısı dikkat kendi içinde gömülüdür.

Bu katmanın çıktısının boyuta (Sxd) sahip olduğuna dikkat edin ve kodlayıcıyı tamamlamadan önce, bu kodlayıcının çıktısına başka bir kodlayıcının girişi olarak ihtiyacımız olduğundan onu tekrar D = 512'ye değiştirmemiz gerekir.

S: Ama bu katmana Çok başlı öz-dikkat Katmanı adını verdiniz. Çok başlı nedir?

Tamam, benim hatam ama savunmamda, ben buna daha yeni başlıyordum.

Buna çoklu başlık deniyor çünkü bu tür pek çok öz-dikkat katmanını paralel olarak kullanıyoruz. Yani, üst üste yığılmış birçok öz-ilgi katmanımız var. Bildiride dikkat katmanlarının sayısı h 8 olarak tutulmuştur. Dolayısıyla X girdisi, her biri az şekil matrisi (Sxd) = 4 × 64 veren birçok öz-ilgi katmanından paralel olarak geçer. Bu 8 (h) matrisini birleştiriyoruz ve tekrar DxD boyutunda bir son çıktı doğrusal katmanı (Wo) uyguluyoruz.

Ne beden alıyoruz? Birleştirme işlemi için bir SxD boyutu elde ederiz (4x (64 × 8) = 4 × 512). Ve bu çıktıyı Wo ile çarparak, istediğimiz gibi SxD (4 × 512) şeklinde nihai Z çıktısını elde ederiz.

Ayrıca h, d ve D arasındaki ilişkiye de dikkat edin, yani hxd = D

şekil

Tam çok başlı öz-dikkat Katmanı (Yazara göre resim)

Böylece, sonunda amaçlandığı gibi 4 × 512 şeklindeki Z çıktısını elde ederiz. Ancak başka bir kodlayıcıya girmeden önce onu İleri Beslemeli Ağdan geçiriyoruz.

B) Konum açısından ileri beslemeli ağ

 
Çok başlı dikkat katmanını anladığımızda, İleri beslemeli ağın anlaşılması oldukça kolaydır. Bu, sadece Z çıkışındaki çeşitli doğrusal ve bırakma katmanlarının bir kombinasyonudur. Sonuç olarak, yine burada çok fazla Matris çarpımıdır.

şekil

Her kelime ileri beslemeli ağa gider. (Yazara göre resim)

İleri beslemeli ağ, kendisini Z çıkışındaki her konuma paralel olarak (Her konum bir kelime olarak düşünülebilir) ve dolayısıyla Konumsal ileri beslemeli ağ adını uygular. İleri besleme ağı da ağırlığı paylaşır, böylece kaynak cümlenin uzunluğu önemli değildir (Ayrıca, ağırlıkları paylaşmasaydı, bu tür birçok ağı maksimum kaynak cümle uzunluğuna göre başlatmamız gerekirdi ve uygulanabilir değil)

şekil

Aslında her konuma (veya kelimeye) uygulanan doğrusal bir katmandır (Yazara göre resim)

Bununla, Transformer'in enkoder kısmına ilişkin iyi bir anlayışa yaklaştık.

S: Hey, kağıttaki resmi gözden geçiriyordum ve kodlayıcı yığınında "konumsal kodlama" ve "Ekleme ve Norm" adlı bir şey de var. Bunlar nedir?

şekil

Tekrar buraya döndüm, böylece kaydırmana gerek yok Kaynak

Tamam, bu iki kavram bu özel mimari için oldukça önemlidir. Ve bunu sormana sevindim. Bu nedenle, kod çözücü yığınına geçmeden önce bu adımları tartışacağız.

C. Konumsal Kodlamalar

 
Modelimiz tekrarlama ve evrişim içermediğinden, modelin dizinin sırasını kullanması için dizideki simgelerin göreceli veya mutlak konumu hakkında bazı bilgiler enjekte etmeliyiz. Bu amaçla, hem kodlayıcı hem de kod çözücü yığınlarının altındaki giriş yerleştirmelerine (daha sonra göreceğimiz gibi) “konumsal kodlamalar” ekliyoruz. Konumsal kodlamaların, yerleştirmelerin sahip olduğu aynı boyuta (D) sahip olması gerekir, böylece ikisi toplanabilir.

şekil

X'e statik bir konumsal model ekleyin (Yazara göre resim)

Makalede, yazarlar farklı pozisyonlar için konumsal düğünler oluşturmak için sinüs ve kosinüs fonksiyonlarını kullandılar.

Bu belirli matematiksel şey aslında ilk kodlayıcı adımına giren gömme vektörüne eklenen 2 boyutlu bir matris oluşturur.

Basitçe söylemek gerekirse, ağın kelimenin konumunu alabilmesi için cümleye eklediğimiz sabit bir matristir.

şekil  şekil

İlk 300 ve 3000 konum için konumsal kodlama matrisi (Yazara göre resim)

Yukarıda, birinci kodlayıcıya verilecek girişe ekleyeceğimiz konum kodlama matrisinin ısı haritası verilmiştir. İlk 300 pozisyon ve ilk 3000 pozisyon için ısı haritasını gösteriyorum. Her kelimenin konumunu anlamak için Transformer'ımıza sağladığımız farklı bir model olduğunu görebiliriz. Ve günah ve cos'tan oluşan bir işlev kullandığımız için, ikinci resimde de gördüğümüz gibi çok yüksek konumlar için konumsal düğünler de yerleştirebiliyoruz.

İlginç gerçek: Yazarlar ayrıca Transformer'in bu kodlamaları öğrenmesine de izin verdi ve bu şekilde performansta herhangi bir fark görmedi. Bu yüzden, cümle uzunluğuna bağlı olmadığı için yukarıdaki fikirle gittiler ve bu nedenle test cümlesi tren örneklerinden daha büyük olsa bile, iyi oluruz.

D. Ekle ve Normalleştir

 
Kodlayıcıyı açıklarken basitlik uğruna bahsetmediğim bir diğer şey de kodlayıcı (kod çözücü mimarisi) mimarisinin atlama seviyesi artık bağlantılara sahip olmasıdır (resnet50'ye benzer bir şey). Bu nedenle, makaledeki kodlayıcı mimarisi tam olarak aşağıdaki gibi görünüyor. Basitçe söylemek gerekirse, Derin Sinir Ağında bilginin çok daha uzun bir süre boyunca geçişine yardımcı olur. Bu, müdürünüzün yanı sıra müdürünüzün müdürüne erişiminizin olduğu bir organizasyonda geçen bilgilere (sezgisel olarak) benzer olarak düşünülebilir.

şekil

Atlama düzeyi bağlantıları, ağdaki bilgi akışına yardımcı olur (Yazara göre resim)

2. Dekoder Mimarisi

 
S: Tamam, şimdiye kadar bir kodlayıcının bir girdi cümlesini aldığını ve bilgilerini SxD (4 × 512) boyutunda bir matriste kodladığını öğrendik. Hepsi harika ama kod çözücünün onu Almanca olarak çözmesine nasıl yardımcı olur?

Güzel şeyler sabredene gelir. Bu yüzden, kod çözücünün bunu nasıl yaptığını anlamadan önce, kod çözücü yığınını anlayalım.

Kod çözücü yığını, bir yığın içinde 6 kod çözücü katmanı içerir (yine kağıtta verildiği gibi) ve yığındaki her kod çözücü şu üç ana katmandan oluşur:

  • Maskeli çok başlı öz-dikkat Katmanı
  • çok başlı öz-ilgi Katmanı ve
  • konum açısından tam bağlantılı ileri beslemeli bir ağ

Aynı konumsal kodlamaya ve ayrıca atlama seviyesi bağlantısına sahiptir. Çok kafalı dikkatin ve ileri beslemeli ağ katmanlarının nasıl çalıştığını zaten biliyoruz, bu nedenle kodlayıcıyla karşılaştırıldığında kod çözücüde neyin farklı olduğuna doğrudan gireceğiz.

şekil

Dekoder Mimarisi (Yazara göre resim)

S: Bekle, ama ihtiyacımız olan çıktının kod çözücüye girdi olarak aktığını görüyor muyum? Ne? Neden? 😖

Soru sormakta oldukça başarılı olduğunu fark ettim. Ve bu harika bir soru, çoğu zaman kendim bile olsa bir şey ve bu yazının sonuna geldiğinizde daha netleşeceğini umduğum bir şey.

Ancak bir sezgi vermek gerekirse, bu durumda bir transformatörü koşullu bir dil modeli olarak düşünebiliriz. Bir giriş kelimesi verilen bir sonraki kelimeyi ve öngörüsünün üzerine koşullandırılacağı veya dayandırılacağı bir İngilizce cümle verilecek bir model.

Bu tür modeller, böyle bir modeli nasıl eğitirsiniz? Başlangıç ​​jetonunu (<s>) ve model, İngilizce cümleye bağlı ilk kelimeyi tahmin eder. Tahminin doğru veya yanlış olmasına bağlı olarak ağırlıkları değiştirirsiniz. Sonra başlangıç ​​jetonunu ve ilk kelimeyi (<s> der) ve model ikinci kelimeyi tahmin eder. Tekrar ağırlık değiştiriyorsun. Ve bunun gibi.

Transformatör kod çözücü, bunun gibi öğrenir, ancak güzel olan, bunu sıralı bir şekilde yapmamasıdır. Bu hesaplamayı yapmak için maskeleme kullanır ve böylece tüm çıktı cümlesini alır (bir ekleyerek sağa kaydırılmasına rağmen) <s> (öne doğru) eğitim sırasında. Ayrıca, tahmin sırasında çıktıyı ağa vermeyeceğimizi lütfen unutmayın.

S: Peki bu maskeleme tam olarak nasıl çalışıyor?

A) Maskeli Çok Kafalı Öz Dikkat Katmanı

 
Her zamanki gibi çalışıyor, giyiyorsun demek istiyorum 😷. Şaka bir yana, gördüğünüz gibi bu sefer bir Maskeli Kod çözücümüzde Çok Başlı Dikkat Katmanı. Bu, kaydırılmış çıktımızı (bu kod çözücünün girdisi) ağın sonraki sözcükleri asla göremeyecek şekilde maskeleyeceğimiz anlamına gelir, çünkü aksi takdirde eğitim sırasında bu sözcüğü kolayca kopyalayabilir.

Peki, maskelenmiş dikkat katmanında maske tam olarak nasıl çalışıyor? Hatırlarsanız, dikkat katmanında, softmax'ı almadan önce sorguyu (Q) ve tuşları (K) çarptık ve bunları sqrt (d) ile böldük.

Bununla birlikte, maskelenmiş bir dikkat katmanında, elde edilen matrisi softmax'ın önüne (şekil (TxT) olacak) bir maskeleme matrisine ekleriz.

Dolayısıyla, maskelenmiş bir katmanda işlev şu şekilde değişir:

şekil

(Yazara göre resim)

S: Hala anlamadım, bunu yaparsak ne olur?

Aslında bu anlaşılabilir. Adım adım kırayım. Dolayısıyla, sonuç matrisimiz (QxK / sqrt (d)) şeklin (TxT) aşağıdaki gibi görünebilir: (Softmax henüz uygulanmadığı için sayılar büyük olabilir)

şekil

Schnelle şu anda hem Braune hem de Fuchs'a (Yazara göre resim)

Yukarıdaki matrisin softmax'ını alıp V değer matrisi ile çarparsak, Schnelle kelimesi şimdi hem Braune hem de Fuchs'tan oluşacaktır.Ancak bunu istemiyoruz, bu yüzden ona maske matrisini ekliyoruz:

şekil

Matrise uygulanan maske işlemi. (Yazara göre resim)

Ve şimdi softmax adımını yaptıktan sonra ne olacak?

şekil

Schnelle, Schnelle'den sonra hiçbir söze asla katılmaz. (Yazara göre resim)

E ^ {- inf} = 0 olduğundan, Schnelle'den sonraki tüm pozisyonlar 0'a dönüştürüldü. Şimdi, bu matrisi V değer matrisi ile çarparsak, Schnelle'nin kod çözücüden geçen Z vektöründeki konumuna karşılık gelen vektör İstediğimiz gibi sonraki Braune ve Fuchs kelimelerinin herhangi bir bilgisini içerir.

Ve işte bu, transformatörün tüm kaydırılmış çıktı cümlesini bir kerede alması ve sıralı bir şekilde öğrenmemesi. Oldukça temiz söylemeliyim.

S: Şaka mı yapıyorsun? Bu gerçekten harika.

Hâlâ benimle olmana çok sevindim ve bunu takdir ediyorsun. Şimdi şifre çözücüye geri dönüyoruz. Kod çözücüdeki bir sonraki katman:

B) Çok Başlı Dikkat Katmanı

 
Kod çözücü mimarisinde görebileceğiniz gibi, bir Z vektörü (kodlayıcının çıkışı) kodlayıcıdan Kod Çözücüdeki çok başlıklı dikkat katmanına akar. Son kodlayıcıdan gelen bu Z çıktısının özel bir adı vardır ve genellikle bellek olarak adlandırılır. Dikkat katmanı hem kodlayıcı çıktısını hem de aşağıdan akan verileri (kaydırılmış çıktılar) girdi olarak alır ve dikkati kullanır. Sorgu vektörü Q, kod çözücüde akan verilerden oluşturulurken Anahtar (K) ve değer (V) vektörleri kodlayıcı çıktısından gelir.

S: Burada maske yok mu?

Hayır, burada maske yok. Aşağıdan gelen çıktı zaten maskelenmiştir ve bu, kod çözücüdeki her pozisyonun Değer vektöründeki tüm pozisyonlara katılmasına izin verir. Bu nedenle, üretilecek her kelime konumu için kod çözücünün tüm İngilizce cümleye erişimi vardır.

İşte tek bir dikkat katmanı (daha önce olduğu gibi çoklu kafanın parçası olacak):

şekil

(Yazara göre resim)

S: Ama bu sefer Q, K ve V'nin şekilleri farklı olmayacak mı?

Tüm ağırlık hesaplamalarını yaptığım şekle bakabilirsiniz. Ayrıca ortaya çıkan Z vektörünün şekillerini ve ağırlık matrislerimizin şimdiye kadar hiçbir boyutunda hedef veya kaynak cümle uzunluğunu nasıl hiç kullanmadığını görmenizi rica ediyorum. Normalde, tüm matris hesaplamalarımızda şekil birbirini götürür. Örneğin, yukarıdaki 2. hesaplamada S boyutunun nasıl birbirini götürdüğüne bakın. Bu nedenle, yazarlar eğitim sırasında partileri seçerken sıkı partiler hakkında konuşurlar. Yani bir grupta tüm kaynak cümlelerin benzer uzunlukları vardır. Ve farklı partilerin farklı kaynak uzunlukları olabilir.

Şimdi atlama seviyesi bağlantıları ve ileri besleme katmanı hakkında konuşacağım. Aslında… ile aynıdırlar.

S: Tamam, anladım. Atlama seviyesi bağlantılarına ve FF katmanına sahibiz ve tüm bu kod çözme işleminden sonra TxD şeklinde bir matris elde ediyoruz. Peki Almanca çeviri nerede?

3. Çıkış Başlığı

 
Aslında şimdi oradayız dostum. Transformatörle işimiz bittiğinde, sonraki şey kod çözücü çıktısının üstüne göreve özgü bir çıkış kafası eklemektir. Bu, olasılığı elde etmek için üstüne bazı doğrusal katmanlar ve softmax ekleyerek yapılabilir. Almanca kelime haznesindeki tüm kelimelerin karşısında. Bunun gibi bir şey yapabiliriz:

şekil

(Yazara göre resim)

Gördüğünüz gibi olasılıklar yaratabiliyoruz. Şimdiye kadar, bu Transformer mimarisinden nasıl ileri geçiş yapacağımızı biliyoruz. Bakalım böyle bir Sinir Ağı Mimarisi eğitimini nasıl yapıyoruz.

Eğitim:

 
Şimdiye kadar, yapının kuş bakışı görüntüsünü alırsak şöyle bir şeye sahip oluruz:

şekil

(Yazara göre resim)

İngilizce bir cümle ve kaydırılmış bir cümle verebilir ve ileri bir pas atabilir ve Almanca kelime dağarcığındaki olasılıkları alabiliriz. Ve böylece, hedefin istediğimiz Almanca kelime olabileceği çapraz entropi gibi bir kayıp işlevi kullanmalı ve Adam Optimizer kullanarak sinir ağını eğitmeliyiz. Tıpkı herhangi bir sınıflandırma örneği gibi. Demek Almancanız var.

Yine de yazıda, yazarlar küçük çeşitlilikte optimize ediciler ve kayıp kullanıyorlar. Transformer mimarisinin doğal bir parçası değil, yalnızca modelden daha fazla performans elde etmek için yapıldığı için Adam ile KL Divergence Loss ve Learning rate çizelgesine ilişkin aşağıdaki 2 bölümü atlamayı seçebilirsiniz.

S: Çok uzun zamandır buradayım ve şikayet mi ettim? 😒

Tamam. Tamam. Seni anlıyorum Hadi yapalım o zaman.

A) Etiket Yumuşatma ile KL Diverjansı:

 
KL Diverjans, P dağılımına Q dağılımı ile yaklaşıldığında meydana gelen bilgi kaybıdır. KL Diverjans kaybını kullandığımızda, modelden ürettiğimiz olasılıkları (Q) kullanarak hedef dağılımı (P) tahmin etmeye çalışırız. Ve eğitimde bu bilgi kaybını en aza indirmeye çalışıyoruz.

şekil

(Yazara göre resim)

Dikkat ederseniz, bu formda (tartışacağımız etiket yumuşatma olmadan) bunun çapraz entropi ile tamamen aynı olduğunu fark ederseniz. Aşağıdaki gibi iki dağılım verilmiştir.

şekil  şekil

Bir kelime için hedef dağılımı ve olasılık dağılımı (jeton) (Yazara göre resim)

KL Divergence formülü sadece basit -logq(oder) ve bu çapraz entropi kaybıdır.

Makalede, yazarlar α = 0.1 ile etiket yumuşatma kullanmış olsa da KL Diverjans kaybı çapraz entropi değildir. Bunun anlamı, hedef dağılımda çıktı değerinin (1-α) ile ikame edilmesi ve kalan 0.1'in tüm kelimelere dağıtılmasıdır. Yazarlar bunun modelin çok emin olmaması için olduğunu söylüyorlar.

şekil  şekil

(Yazara göre resim)

S: Peki modellerimizi neden kendinden emin yapmıyoruz? Saçma görünüyor.

Evet, öyle ama sezgisel olarak, hedefi kaybetme fonksiyonumuza 1 verdiğimizde, gerçek etiketin Doğru olduğuna ve diğerlerinin olmadığına dair hiçbir şüphemiz yokmuş gibi düşünebilirsiniz. Ancak kelime hazinesi, doğası gereği standartlaştırılmamış bir hedeftir. Örneğin, iyiyi büyük yerine kullanamayacağınızı kim söyleyebilir? Bu yüzden etiketlerimize biraz karışıklık ekliyoruz, böylece modelimiz çok katı değil.

B) Adam ile belirli bir Öğrenme Oranı programı

 
Yazarlar, ısınma adımlarına kadar öğrenme oranını artırmak ve ardından aşağıdaki işlevi kullanarak azaltmak için bir öğrenme hızı planlayıcısı kullanır. Ve optimiz = 0.9, β² = 0.98 olan Adam optimize ediciyi kullandılar. Burada çok ilginç bir şey yok, sadece bazı öğrenme seçenekleri.

şekil

Kaynak: kâğıt

S: Ama bekleyin, tahmin zamanında çıktının değişmeyeceğini hatırladım, değil mi? O halde nasıl tahminler yaparız?

Bu noktada sahip olduğumuz şeyin üretken bir model olduğunu fark ederseniz ve tahmin yaparken çıktı hedef vektörünü bilmeyeceğimiz için tahminleri üretken bir şekilde yapmak zorunda kalacağız. Yani tahminler hala sıralı.

Tahmin Zamanı

şekil

Transformer kullanarak açgözlü bir arama ile tahmin etme (Yazara göre resim)

Bu model parça bazında tahminler yapar. Orijinal belgede, tahmin yapmak için Işın Aramasını kullanırlar. Ancak açgözlü bir arayış, onu açıklamak için de işe yarar. Yukarıdaki örnekte, açgözlü bir aramanın tam olarak nasıl çalışacağını gösterdim. Açgözlü arama şununla başlar:

  • Tüm İngilizce cümlenin kodlayıcı girişi ve sadece başlangıç ​​belirteci olarak aktarılması <st> modele kaydırılmış çıktı olarak (kod çözücüye giriş) ve ileri geçişi yaparak.
  • Model bir sonraki kelimeyi tahmin edecek - der
  • Ardından, tüm İngilizce cümleyi kodlayıcı girişi olarak geçiririz ve son tahmin edilen kelimeyi kaydırılmış çıkışa ekleriz (kod çözücüye giriş = <st> der) ve ileri pası yapın.
  • Model bir sonraki kelimeyi tahmin edecek - schnelle
  • Tüm İngilizce cümlenin kodlayıcı girişi olarak geçirilmesi ve <st> der schnelle modele kaydırılmış çıktı olarak (kod çözücüye giriş) ve ileri geçişi yaparak.
  • ve bu şekilde, model bitiş jetonunu tahmin edene kadar </s> veya maksimum sayıda simge (tanımlayabileceğimiz bir şey) üretiriz, böylece çeviri her durumda sonsuz bir süre boyunca çalışmaz.

Işın Arama:

 
S: Şimdi açgözlüyüm. Bana ışın aramadan da bahset.

Tamam, ışın arama fikri doğası gereği yukarıdaki fikre çok benziyor. Işın aramada, sadece üretilen en yüksek olasılıklı kelimeye değil, ilk iki kelimeye bakarız.

Örneğin, kodlayıcı girişi olarak tüm İngilizce cümleyi ve kaydırılmış çıktı olarak sadece başlangıç ​​belirtecini verdiğimizde, en iyi iki kelimeyi şu şekilde elde ederiz: i(p = 0.6) ve der(p = 0.3). Şimdi her iki çıktı dizisi için çıktı modelini oluşturacağız,<s> i ve <s> der ve üretilen bir sonraki en üstteki kelimenin olasılığına bakın. Örneğin, eğer <s> i sonraki kelime için (p = 0.05) olasılık verdi ve <s> der> bir sonraki tahmin edilen kelime için (p = 0.5) verdi, diziyi atıyoruz <s> ive git <s> der bunun yerine, cümle olasılığının toplamı maksimize edildiğinden (<s> der next_word_to_der p = 0.3 + 0.5 ile karşılaştırıldığında <s> i next_word_to_i p = 0.6 + 0.05). Daha sonra en yüksek olasılıkla cümleyi elde etmek için bu işlemi tekrar ederiz.

İlk 2 kelimeyi kullandığımız için, bu Işın Arama için ışın boyutu 2'dir. Kağıtta, boyut 4 için ışın araması kullandılar.

PS: Kısaca İngilizce cümlenin her adımda geçtiğini, ancak pratikte kodlayıcının çıktısının kaydedildiğini ve her adımda yalnızca kaydırılan çıktının kod çözücüden geçtiğini gösterdim.

S: Bana söylemeyi unuttuğunuz başka bir şey var mı? Anına sahip olmana izin vereceğim.

Evet. İstediğinden beri. İşte burada:

BPE, Ağırlık Paylaşımı ve Kontrol Noktası Belirleme

 
Makalede, yazarlar ortak bir İngilizce Almanca kelime haznesi oluşturmak için Byte çifti kodlamasını kullandılar. Daha sonra, hem İngilizce hem de Almanca yerleştirme ve gömülü ağırlık matrisi şekli işe yarayacağı için softmax öncesi doğrusal dönüşüm boyunca paylaşılan ağırlıkları kullandılar (Vocab Length XD).

Ayrıca, performansa ulaşmak için bir topluluk etkisi yaratmak için yazarlar son k kontrol noktasının ortalamasını alır.. Bu, modelin son birkaç çağındaki ağırlıkların ortalamasını alarak yeni bir model oluşturduğumuz oldukça bilinen bir tekniktir.

S: Bana biraz kod gösterebilir misin?

Bu gönderi zaten çok uzun sürdü, bu yüzden bunu bir sonraki yazıda yapacağım. Bizi izlemeye devam edin.

Şimdi, nihayet şu soruyu sorma sırası bende: Bir transformatörün nasıl çalıştığını anladınız mı? Evet veya Hayır, yorumlarda cevap verebilirsiniz. 🙂

 
Referanslar

Bu yazıda, Transformer mimarisinin nasıl çalıştığını detay odaklı, sezgisel bir bakış açısıyla ele aldım.

NLP hakkında daha fazla bilgi edinmek istiyorsanız, şu konularda mükemmel bir kurs vermek istiyorum: Doğal Dil İşleme Gelişmiş Makine Öğrenimi Uzmanlığından. Kontrol edin.

Gelecekte bu tür yazılardan daha fazla yazacağım. Onlar hakkında ne düşündüğünüzü bana bildirin. Ağır teknik konular üzerine mi yoksa daha fazla başlangıç ​​düzeyinde makale mi yazmalıyım? Yorum bölümü arkadaşınızdır. Kullan onu. Ayrıca beni takip et Orta veya benim için abone ol blog.

Ve son olarak küçük bir sorumluluk reddi - Bu yayında ilgili kaynaklara bazı bağlı kuruluş bağlantıları olabilir, çünkü bilgi paylaşımı asla kötü bir fikir değildir.

Bu hikaye ilk yayınlandı okuyun.

 
Bio: Rahul Agarwal WalmartLabs'da Kıdemli İstatistik Analistidir. Onu Twitter'da takip edin @mlwhiz.

orijinal. İzinle yeniden yayınlandı.

İlgili:

Kaynak: https://www.kdnuggets.com/2020/10/understanding-transformers-data-science-way.html

spot_img

En Son İstihbarat

spot_img