Derin sinir ağlarını hızlandırmak için tensör ayrıştırması nasıl kullanılır? (Kod ile)

Bu makale, Lei Feng'in altyazı grubu tarafından derlenen teknik bir blogdur, orijinal başlık, Tensör ayrıştırmalarıyla derin sinir ağlarını hızlandırmaktır ve yazar Jacob'tır.

Tercüme | Lin Lihong Bitti | Fan Jiang

arka fon

Bu makalede, mevcut derin öğrenme modellerini daha kompakt hale getirmek ve katmanlamak için kullanılan birkaç düşük seviyeli tensör ayrıştırma yöntemini tanıtacağım. Ayrıca, konvolüsyon katmanı üzerinde CP ayrıştırması ve Tucker ayrıştırması gerçekleştirmek için Tensorly'yi kullanan PyTorch kodunu da paylaşacağım.

Gönderilerin çoğunun bağımsız olarak okunabileceğini ummama rağmen, burada tensör ayrıştırmasının bir incelemesi bulunabilir. Tensorly'nin yazarı ayrıca Tensor'un temel içeriği üzerine harika bir defter yazdı. Bu, bu içeriği çok iyi öğrenmeye başlamama yardımcı oluyor, okumanızı öneririm.

Budama ile birleştiğinde, tensör ayrıştırma, mevcut derin sinir ağlarını hızlandırmak için pratik bir araçtır.Umarım bu makale, bu içeriklerin anlaşılmasını kolaylaştırır.

Bu yöntemlerin bir katmanı birkaç küçük katmana ayırması gerekir. Ayrıştırmadan sonra daha fazla katman olacaksa da, toplam kayan nokta işlemlerinin sayısı ve ağırlıkları daha küçük olacaktır. Bildirilen bazı sonuçlar, tüm ağda x8 kat hız artışı (imagenet gibi büyük görevler için değil) veya imagenet'teki belirli bir katmanda x4 kat artış. Benim sonucum, bu ayrıştırma yöntemleriyle, ne kadar doğruluktan fedakarlık etmek istediğime bağlı olarak, x2'den x4'e kadar bir hızlanma elde edebileceğimdir.

Bu makalede, modeldeki parametre sayısını azaltmak için budama adı verilen bazı teknikleri tanıttım. Bir veri setinde ileri (ve bazen ters) budama yapın ve ardından nöronları ağda etkinleştirilen bazı kriterlere göre sıralayın.

Aradaki fark, tensör ayrıştırma yönteminin yalnızca katmanın ağırlığını kullanmasıdır Ağ katmanının parametreleştirildiği varsayıldığında, ağırlığı bir matris veya düşük sıralı bir tensör ile temsil edilebilir. Bu, parametreli ağlar altında en iyi şekilde çalıştıkları anlamına gelir. VGG gibi sinir ağları tamamen parametreleştirilecek şekilde tasarlanmıştır. Parametreli bir modelin başka bir örneği, daha basit görevler elde etmek için daha az kategori ile ağda ince ayar yapmaktır.

Budamaya benzer şekilde, ayrıştırmadan sonra, doğruluğu geri kazanmak için modelin ince ayarının yapılması gerekir.

Ayrıntılara girmeden önce dikkat edilmesi gereken son nokta, bu yöntemlerin pratik olmasına ve iyi sonuçlar vermesine rağmen bazı dezavantajları olmasıdır:

  • Doğrusal olmayan herhangi bir içeriği göz ardı ederek doğrusal bir ağırlıkta (bir evrişim veya tamamen bağlı bir katman gibi) gerçekleştirilebilirler.

  • Açgözlüdürler ve farklı katmanlar arasındaki etkileşimi görmezden gelerek katmanları akıllıca ayırdıklarını düşünürler.

Hala bu sorunları çözmeye yönelik girişimler var ve hala aktif bir araştırma alanı.

Kesilmiş SVD, tamamen bağlı katmanları ayrıştırmak için kullanılır

Bunu derin sinir ağlarını hızlandırmak için kullanabileceğimi ilk bulduğum şey Fast-RNN kağıdındaydı, Ross Girshick bunu tespit için tamamen bağlı katmanı hızlandırmak için kullandı. Kod burada bulunabilir: pyfaster-rcnn uygulaması.

SVD'ye genel bakış

Tekil değer ayrıştırması, herhangi bir A matrisini n satır ve m sütunlu ayrıştırmamızı sağlar:

S, köşegen üzerinde negatif olmayan değerlere (tekil değerler) sahip bir köşegen matristir ve genellikle tekil değerler azalan sırada düzenlenecek şekilde inşa edilir. U ve V ortogonal matrislerdir:

En büyük tekil değeri alır ve geri kalanını sıfırlarsak, A'nın yaklaşık değerini elde ederiz:

Frobenius normu olarak A'ya en yakın rank t matrisinin özelliğine sahiptir, yani t yeterince büyükse,

A'nın iyi bir yaklaşımıdır.

Tamamen bağlı katman üzerinde SVD

Tamamen bağlantılı bir katman genellikle matris çarpımı yapar, bir matris A girin ve sonra bir sapma b ekleyin:

A'nın SVD'sini alıp sadece ilk tekil değeri tutabiliriz.

Bu tamamen bağlantılı bir katman değildir, ancak onu iki küçük katman olarak nasıl uygulayacağımız konusunda bize yol gösterir:

İlki mxt şeklinde olacak, önyargı olmayacak ve ağırlığı

.

İkincisi, txn şeklinde olacak, b'ye eşit bir sapmaya sahip olacak ve ağırlığı,

.

Toplam ağırlık sayısı nxm'den t (n + m) 'ye düşer.

Evrişim tabakasında tensör ayrışması

İki boyutlu evrişimli katman, dört boyutlu çok boyutlu bir matristir (bundan sonra tensör):

cols x satır x input_channels x output_channels.

SVD örneğini takiben, tensörü bir şekilde birkaç küçük tensöre ayırmak istiyoruz. Evrişimli katman, birkaç küçük yaklaşık evrişimli katmana dönüştürülür.

Bunun için iki popüler (en azından Tensor algoritması dünyasında) tensör ayrışımı kullanacağız: CP ayrışımı ve Tucker ayrıştırması (aynı zamanda yüksek dereceli SVD veya diğer isimler olarak da bilinir).

1412.6553 Evrişimli sinir ağlarını hızlandırmak için ince ayarlanmış CP ayrıştırması kullanın

1412.6553 İnce Ayarlı CP Ayrıştırması Kullanılarak Evrişimli Sinir Ağlarını Hızlandırma Bu makale, CP ayrışmasının evrişimli katmanı hızlandırmak için kullanılıp kullanılamayacağını göstermektedir, göreceğimiz gibi, bu evrişimli katmanı bir mobil ağa benzer bir şeye dahil eder.

Doğruluğu önemli ölçüde düşürmeden ağın hızını artırmak için kullanırlar. Kendi deneyimde bunu, doğruluk kaybı olmadan VGG16 tabanlı bir ağda x2 hızlandırma elde etmek için kullanabilirim.

Bu yöntemle ilgili deneyimim, öğrenme oranının çok dikkatli seçilmesi ve işe yaraması için ince ayar yapılması gerektiğidir. Öğrenme oranı genellikle çok küçük olmalıdır (yaklaşık

).

Bir rank R matrisi, R rank ve 1 matrisinin toplamı olarak kabul edilebilir; her rank 1 matrisi, bir satır vektörüyle çarpılan bir sütun vektörüdür:

SVD, bize SVD'deki U ve V sütunlarını kullanarak matris toplamını yazmak için bir yöntem sağlar:

Matrisin tam derecesinden daha küçük bir R seçersek, bu durumda bu toplam, kesik SVD durumunda olduğu gibi bir yaklaşık değerdir.

CP ayrışımı tensörü genelleştirmemize izin verir.

CP ayrıştırması kullanılarak, dört boyutlu bir tensör formülü olan evrişim çekirdeğimiz, seçilen bir R'ye yaklaştırılabilir:

Etkili ayrıştırma için R'nin küçük, ancak yaklaşık olarak yüksek doğruluğu koruyacak kadar büyük olmasını umuyoruz.

CP ayrışması ile evrişim ileri geçiş

Katmanı geçmek için girişi kullanıyoruz

Evrişim gerçekleştirin:

Bu bize bu soruna bir çözüm sunar:

1. Önce akıllıca davranın (1x1xS) ve

evrişim. Bu, giriş kanallarının sayısını S'den R'ye düşürür. Bir sonraki adım, evrişimi daha hızlı hale getirmek için daha az sayıda kanalda tamamlamak olacaktır.

2. Kullanın

Uzamsal boyutta ayrı evrişim gerçekleştirin. Gibi mobil ağ İçinde olduğu gibi, evrişim derinlemesine ayrılabilir ve her kanalda ayrı ayrı yapılır. Mobilenet'lerin aksine, evrişim uzaysal boyutlarda da ayrılabilir .

3. Kanal sayısını R'den T'ye değiştirmek için başka bir noktasal evrişim yapın. Orijinal evrişimli katmanda bir sapma varsa, bu noktada ekleyin.

Mobil web'deki gibi noktasal ve derin evrişimin kombinasyonuna dikkat edin. Mobilenets kullanırken, mevcut katmanları bu forma ayrıştırabileceğimiz bu yapıyı elde etmek için sıfırdan bir ağ eğitmelisiniz.

Mobil ağ gibi, en hızlı hızı elde etmek için, derin ayrılabilir evrişimi etkin bir şekilde uygulayan bir platforma ihtiyaç vardır.

PyTorch ve Tensorly evrişimli katman ile CP ayrışması

1511.06530 Hızlı ve düşük güçlü mobil uygulamalar için derin evrişimli sinir ağlarının sıkıştırılması

1511.06530 Hızlı ve Düşük Güçlü Mobil Uygulamalar için Derin Evrişimli Sinir Ağlarının Sıkıştırılması Bu çok havalı makale, daha iyi sonuçlar elde etmek için evrişimli katmanı hızlandırmak için Tucker ayrıştırmasının nasıl kullanılacağını açıklar. Bu hızlandırmayı, CP ayrıştırmasından daha iyi doğruluğa sahip olan VGG'ye dayalı parametreli bir ağda da kullandım. Yazar, bildiride daha yüksek bir öğrenme oranı kullanmamıza izin verdiğini belirtti (kullanıyorum

) İnce ayarlamalar yapın.

Yüksek mertebeden tekil değer ayrışımı (HOSVD) veya diğer isimler olarak da bilinen Tucker ayrıştırması, tensör tekil değer ayrıştırmasının bir genellemesidir.

SVD'nin tanıtılmasının nedeninin

Bileşenleri genellikle ortogonaldir, ancak bu bizim amaçlarımız açısından önemli değildir.

Çekirdek matris olarak adlandırılır ve farklı eksenlerin nasıl etkileşime girdiğini tanımlar.

Yukarıda açıklanan CP ayrışmasında, uzamsal boyut boyunca

Sonuçların ayrışması, uzamsal olarak ayrılabilir bir evrişime neden olur. Her durumda, filtre çok küçüktür, genellikle 3x3 veya 5x5'dir, bu nedenle ayrılabilir evrişim, bize çok fazla hesaptan tasarruf sağlamaz ve pozitif bir yaklaşımdır.

Trucker ayrıştırmanın yararlı özelliği, tüm eksenler (modlar) boyunca ayrıştırılmasına gerek olmamasıdır. Giriş ve çıkış kanalları boyunca ayrıştırabiliriz (mod 2 ayrıştırma):

Evrişim ileri geçiş ve Tucker ayrıştırması

CP ayrıştırması gibi, evrişim formülünü yazın ve çekirdek ayrıştırmasını ekleyin:

Bu bize Tucker ayrıştırması ile evrişim için aşağıdaki formülü verir:

1. İle

Noktadan noktaya evrişim gerçekleştirin, kanal S'den

miktar.

2. Kullanın

Düzenli (ayrılmaz) evrişim gerçekleştirin. Bu evrişim, orijinal katmanın S giriş kanalını ve T çıkış kanalını değiştirir.

Giriş kanalı ve

Çıkış kanalı. Bu seviyeler S ve T'den düşükse, azalmanın nedeni budur.

3. Kullanım

Orijinal evrişimin T çıkış kanallarına dönmek için noktadan noktaya evrişim gerçekleştirin. Bu son evrişim olduğu için bu noktada sapma varsa sapmayı ekleyin.

Rütbeleri nasıl yıkmayı seçeriz

Bunun bir yolu, farklı değerleri denemek ve doğruluğunu kontrol etmektir. Denedikten sonra ilham

,iyi sonuçlar.

İdeal olarak, kademe seçimi otomatik olmalıdır.

Yazar, notları tahmin etmek için bir yöntem olarak Varyasyonel Bayesian Matrix Factorization (VBMF) (Nakajima vd., 2013) kullanmayı önermektedir.

VBMF çok karmaşıktır ve bu makalenin kapsamı dışındadır, ancak çok yüksek seviyeli bir özette yaptıkları şey matrisi birleştirmektir.

Yaklaşık düşük sıralı matris

Ve Gauss gürültüsü. A ve B'yi bulduktan sonra H, seviyenin üst sınırıdır.

Bunu Tucker ayrıştırmasında kullanmak için, bir matris oluşturmak için orijinal ağırlık tensörünün s ve t bileşenlerini genişletebiliriz. Daha sonra tahmin etmek için VBMF kullanabiliriz

ile

Matrisin sıralaması olarak.

Python'da uygulanan bu VBMF'yi kullanıyorum ve çalışabileceğine inanıyorum.

Genellikle VBMF tarafından döndürülen rütbeler, önceki dikkatli ve sıkıcı manuel ayarlamalarımla elde edilen sonuçlara çok yakındır.

Bu aynı zamanda, tamamen bağlı bir katman için kesilmiş SVD hızlandırma seviyesini tahmin etmek için de kullanılabilir.

PyTorch ve Tensorly evrişimli katman ile Tucker ayrışımı

sonuç olarak

Bu makalede, derin sinir ağlarını hızlandırmak için birkaç tensör ayrıştırma yöntemini tartıştık.

  • Kesilmiş SVD, tamamen bağlı katmanları hızlandırmak için kullanılabilir.

  • CP ayrışması, konvolüsyon katmanını bir mobil ağa benzer bir şeye ayrıştırır, ancak daha agresiftir, çünkü uzaysal boyutta da ayrılabilir.

  • Tucker ayrışımı, iki boyutlu evrişimli katman işleminin giriş ve çıkış kanallarının sayısını azaltır ve 2B evrişimden önce ve sonra kanal sayısını değiştirmek için noktasal evrişimi kullanır.

İlginç bulduğum şey, ağ tasarımındaki, noktadan noktaya ve derin evrişimdeki ortak kalıpların doğal olarak bu ayrıştırmalarda ortaya çıkmasıdır!

Orijinal blog sitesi https://jacobgil.github.io/deeplearning/tensor-decompositions-deep-learning

Daha fazla makale için Leifeng.com'u takip edin, Leiphonefansub WeChat hesabını (leiphonefansub) arkadaş olarak ekleyin

Yapay Zeka Gönüllüsü Olmak İçin "Katılmak istiyorum" açıklaması

Lei Feng Ağı Lei Feng Ağı

Sürücüsüz otobüs test araçları için en iyi seçim
önceki
Sevgili, önce çoraplarını giy ve sonra trend çemberine gir!
Sonraki
Yeni bir arabayı satın aldıktan sonra boyası nasıl korunur?
Bir kişi sizin için önemliyse, onu geçmemelisiniz
Robotun temel yapı türü
500.000'den fazla şiiri analiz ettik ve size kodla şiir yazmayı öğrettik (kod ekli)
Japon kızlardan daha sevimli, muhtemelen karışık ırklı bir Japon kızı!
Küresel liderler bir araya geliyor! ISHE 2018 Shenzhen Akıllı Ev Sergisi Büyük Açılışı
Sony Pictures SDCC yakınlaştırma hilesi: Örümcek Adam evreni hayal gücünün ötesinde ve kötü adam isyan etmeye devam ediyor
Bu ülkeler emlak vergilerini nasıl topluyor?
ZigBee WSN tabanlı sıcaklık ve nem izleme sistemi
Li Ka-shing emekli oldu ve Zhang Zhongmou da emekli oldu İki iş lideri geride nasıl bir rakam bıraktı?
Tsui Hark, son on yılın en iyi filmini sunuyor
GK ekibinin ilk tercihi cep telefonu Nubia Red Devils'in kamuflaj versiyonu 2018'de tanıtıldı
To Top