0-1 matris vektör çarpımının otomatik optimizasyonu


22

Soru:

Matris yoğun ve yalnızca sıfırlarla dolu olduğunda bir matris-vektör çarpımını etkin şekilde uygulayan kod üretmek için prosedür veya teori var mı? İdeal olarak, optimize edilmiş kod, çoğaltılmış işi azaltmak için önceden hesaplanmış bilgilerin sistematik bir şekilde kullanılmasını sağlar.

Başka bir deyişle, bir matrisine sahibim ve daha sonra vektörünü aldığımda hesaplanmasını mümkün olduğu kadar verimli hale getirecek olan dayalı bir ön hesaplama yapmak istiyorum .MMMvv

vM , "derleme zamanında" bilinen, dikdörtgen, yoğun, ikili bir ikili matristir; , yalnızca "çalışma zamanında" bilinen, bilinmeyen bir gerçek vektördür.v

Örnek 1: (sürgülü pencere)

Amacımı göstermek için kolay küçük bir örnek kullanmama izin verin. Matrisi göz önünde bulundurun, Diyelim ki bu matrisi vektörüne almak için vektörüne uyguladık . Ardından sonucun girişleri:

M=[11111111111111111111].
vw=Mv
w1=v1+v2+v3+v4+v5w2=v2+v3+v4+v5+v6w3=v3+v4+v5+v6+v7w4=v4+v5+v6+v7+v8

Standart bir matris-vektör çarpımı yapmak, tam olarak bu şekilde hesaplar. Ancak bu çalışmaların çoğu gereksizdir. "Koşu toplamı" sonraki sayıyı almak için toplama / çıkarma yaparak aynı matris hesaplamasını daha düşük maliyetle yapabiliriz:

w1=v1+v2+v3+v4+v5w2=w1+v6v1w3=w2+v7v2w4=w3+v8v3

Örnek 2: (hiyerarşik yapı)

Önceki örnekte, çalışan toplamı izleyebildik. Bununla birlikte, genellikle bir ara sonuç ağacı oluşturmak ve saklamak gerekir. Örneğin, düşünün Bir ara sonuç ağacı kullanılarak verimli bir şekilde hesaplanabilir :w=Mv

M=[111111111111111111111111]
w=Mv
  1. Compute ve ve almak için onları eklemek .w 7 w 3w5w7w3
  2. Compute ve ve almak için onları eklemek .g 6 g 2w4w6w2
  3. Ekle ve olsun içing 3 g 1w2w3w1

Yukarıdaki örneklerde yer alan yapıyı görmek kolaydır, ancak ilgilendiğim gerçek matrisler için yapı o kadar basit değildir.

Örnek 3: (düşük seviye)

Bir karışıklığı gidermek için, matrisler genellikle seyrek değildir. Spesifik olarak, bu problemi çözen bir yöntemin, büyük blokların büyüklerle doldurulduğu matrisleri uygulamak için etkili yöntemler bulabilmesi gerekir. Örneğin, düşün

M=[111111111111111111111111].

Bu matris iki sıra-1 matrisin farkı olarak ayrıştırılabilir,

M=[111111111111111111111111111111][111111]

bu nedenle vektöründeki eylemi , w 1w:=Mv

w1=v1+v2+v3+v4+v5+v6w2=w1w3=w2v5v6w4=w3w5=w4.

Motivasyon:

Bazı görüntü işleme için sayısal bir yöntem üzerinde çalışıyorum ve her zaman sabit olan farklı yapılara sahip birkaç büyük yoğun matris var. Daha sonra bu matrislerin , kullanıcının girişine bağlı olacak birçok bilinmeyen vektöre uygulanmaları gerekecektir. Şu anda matris bazında etkin kod bulmak için kalem ve kağıt kullanıyorum, ancak işlemin otomatikleştirilip gerçekleştirilemeyeceğini merak ediyorum.V i01vi

Düzenleme: (postscript)

Buradaki cevapların hepsi (9/5 / 15'ten itibaren) ilginç, ancak hiçbiri soruyu umduğum kadar tatmin edici bir şekilde cevaplamıyor. Muhtemelen bunun zor bir araştırma sorusu olduğu ve hiç kimsenin iyi bir cevap bilmediği ortaya çıktı.

Zaman bittiğinden beri, doğru soruyu yanıtladığından EvilJS'in cevabına ödül veriyorum . Ancak cevabın daha net ve ayrıntılı açıklamalar içermesini diliyorum.

tranisstor'ın cevabı bu soru ile Çevrimiçi Boolean Matris-Vektör Çarpma (OMv) problemi arasında bir bağlantı kurar, ancak bağlantı tam olarak bu sorunun ne sorduğu değildir. Özellikle, aşağıdaki varsayım tam olarak uymuyor (cesur vurgulu madeni),

Şimdi varsayalım ki herkes için ve tüm matrisler , n x n E nn0n×nM biz bir algoritma biliyoruz , hepsi vektörler için hesaplar süresi içinde gerçekten subquadratic sürede, yani bazı . v M v O ( n, 2 - ε ) ε > 0An,MvMvO(n2ε)ε>0

Tüm matrisler için ikinci dereceden algoritmalar bulunup bulunmadığı, mümkün olduğu kadar hızlı olan belirli bir matris için bir algoritma bulma meselesine diktir. 0-1 matrislerin çoğu rastgele gürültüye benziyor ve (tahmin edersem) muhtemelen ikinci dereceden algoritmalara sahip değiller. Bununla birlikte, çok kötü matrislerin olması, örneğin "kayan bir pencere" matrisi gibi iyi bir matris üzerinde hızlı bir algoritma bulmamı engellemez.

vzn'nin cevapları, ilk yanıtı , ikinci yanıtı ilginçtir (ve bence çok fazla aşağı oyu hak etmiyor), ancak oradaki yorumlarda tartışılan nedenlerden dolayı soruya uygulanmıyorlar.


1
Eğer matrisiniz bu formdaysa , TDMA bu grup matrisidir, Thomas algoritması. Henüz 0-1 değil, bu özellikten yararlanılmalıdır.
Evil

@EvilJS matrisi sadece belirli bir örnek için bantlanmış olur. Genel olarak bantlanmayacaktır. Bantlanmamış başka bir örnek daha ekledim.
Nick Alger,

İkili, gerçek vektörler olan ve örnek başına ön işleme aşamasında optimal yürütme yolunu önceden hesaplamak isteyen çok sayıda sabit matris N x M var mı? Bu tür işlemlerin çıktısı, matris başına kodlanmış işlemlerin yapıldığı koddur ve bunu yapmak ister misiniz? Örnek olarak, matris başına demek istiyorum. Sadece kontrol.
Kötülük

@EvilJS Bu soru daha sonra bilinmeyen birçok gerçek vektöre uygulanacak olan bilinen bir ikili matris var olduğu durumla . Dayanarak sadece biz geçerli olacak bir kod precompute isteyen aldığımız zaman sonra böylece verimli mümkün olduğunca , biz hesaplayabilir hızlı mümkün olduğunca. Bu soruyu motive eden özel uygulamada, her zaman sabit olan bir avuç ikili var (gerçekte 12), vektörleri tahmin edilemez ve program kullanıcısının girişine bağlıdır. MviMMviMvivi
Nick Alger

1
İki element alanı üzerinde, belirli bir lineer dönüşümü simüle eden minimum XOR-geçit devresinin hesaplanması problemi NP zordur. Bkz. Cstheory.stackexchange.com/a/32272/225
Ryan Williams

Yanıtlar:


5

Mümkünse, matrisin bantlı tridiagonal yapısından yararlanmaya çalışın.
Matris farklı değerlerin sadece sabit bir sayı (ki mutlaka ikili ediliyor) içeren Aksi takdirde, siz (Edo Liberty, 1402 Steven W. Zucker yılında Yale üniversitesi teknik raporda # yoluyla) Postacı algoritması denemelisiniz: sonlu sözlüğe üzerinde optimize
Ortak Alt Ekspresyon Eliminasyonu, bir süredir Çoklu Sabit Çarpma gibi bilinir, fakat geçit seviyesine inmek bir seçenektir - burada kullanılan kalıplar, ayrı ayrı çözelti olarak kullanılabilir veya başka yöntemlerle birleştirilebilir, bu "Ortak Alt-ifadenin Yok Edilmesini İyileştirme" makalesi. Ning Wu, Xiaoqiang Zhang, Yunfei Ye ve Lidong Lan'ın "Dünya Mühendislik ve Bilgisayar Bilimleri Kongresi Bildirileri 2013 Vol II WCECS 2013, 23-25 ​​Ekim 2013 San Francisco, ABD " Kapı Seviyesi CSE

Ayrıca sabit ama sembolik matris üretmek, değişkenlerle vektör yapmak ve bunları matris yazma işlemini elle otomatik hale getiren derleyicilerden Statik Tek Değerlendirme'ye (SSA) bağlamak için ham fakat çalışma yöntemi de vardır.

yeni algoritma prototipi
Çalışan toplamı ne yaptınız: 10 işlem verir ve Thomas'ı kullanmak için ilk fikrim eşdeğerdir. Şimdilik hala yeni algoritmalar yazıp test ediyorum, ayrıca çalışma zamanları da kötü , ancak ilk test sonucu şaşırtıcı bir cevap verdi:

w1=v1+v2+v3+v4+v5w2=w1+v6v1w3=w2+v7v2w4=w3+v8v3


tmp1=v2+v3+v4+v5w1=v1+tmp1w2=tmp1+v6w3=w2+v7v2w4=w3+v8v3

9 işlem veren , bunları + veya - olarak tanımlayan 1, ve = 0'dır.

w1=v1+v2+v3+v4+v5+v6w2=w1w3=w2v5v6w4=w3w5=w4.

Bu 7 işlem verir , algoritma sonucu verdi: 6 işlem veren Şimdilik Hamming mesafesini kullandığımı söyleyebilirim, & | bitsel işlemler, kullanımları sayar ve Cocke – Younger-Kasami (CYK) - "mucitler John Cocke, Daniel Younger ve Tadao Kasami'den sonra adlandırılmış bağlamsız gramerler için ayrıştırma algoritması" gibi olur. programlama." - Wikipedia'dan Değişken blokları oluşturmak için kullandığım aynı teknik.

tmp1=v1+v2+v3+v4tmp2=v5+v6w1=tmp1+tmp2w2=w1w3=w2tmp2w4=w3w5=w4.


(yeniden rev5) plz "herdem yeşil yöntem" konusunda ref verir. ayrıca, SSA nedir? CYK dinamik algoritması?
vzn

Bu cevabın ödülünü verdim ve neden asıl sorumun bir düzenlemesinde olduğunu açıkladım.
Nick Alger,

8

Bu, "Çevrimiçi Boole Matrisi-Vektör Çarpma (OMv) problemi" olarak bilinen açık bir araştırma sorusuyla ilgilidir. Bu problem şu şekildedir (bakınız [1]): İkili matrisi ve ikili sütun vektörleri gelmeden önce hesaplamamız gerekir .n×nMnv1,,vnMvivi+1

Sorunun probleminin biraz daha genel olduğuna dikkat edin: matrislerine ve gerçek değerli vektörlere izin verir . matrislerinde ve Boolean vektörlerinde problemin, özel bir durum sunduğundan "kolay" olduğunu gözlemleyin .m×nn×n

Açıkçası, Çevrimiçi Boolean Matris-Vektör Çarpma problemi (sadece standart matris-vektör-çarpımını kullanan) için saf algoritma zaman alır . Bunun daha hızlı bir şekilde yapılamayacağına dair bir varsayım var (bakınız örneğin [1] . Aşağıdaki gibi (Daha ayrıntılı olarak, bu varsayım şöyledir: Zaman çalışan algoritması falan yoktur yani Çevrimiçi Boole Matris-Vektör Çarpma Sorunu çözer hiçbir gerçek anlamda subcubic algoritma, söz konusudur için ).O(n3)O(n3)O(n3ε)ε>0

Williams algoritmasının bu problemi zamanında çözdüğü bilinmektedir . Daha fazla ayrıntı için [2] 'ye bakınız.O(n3/log2n)

Eğer yukarıdaki varsayımı kanıtlayabilir veya çürütebilirse, koşullu alt sınırlar alanında bir atılım olacaktır.

[1] Çevrimiçi Matris Vektör Çarpma Konjeksiyonu ile Dinamik Problemlerin Sertliğini Birleştirmek ve Güçlendirmek. Henzinger, Krinninger, Nanongkai ve Saranurak tarafından
[ http://eprints.cs.univie.ac.at/4351/1/OMv_conjecture.pdf ]

[2] İkinci dereceden bir zamanda matris-vektör çarpımı: (bazı ön işlemler gerekli). Williams tarafından
[ http://dl.acm.org/citation.cfm?id=1283383.1283490 ]

Güncelleştirme

Yorumlardaki sorulardan biri şuydu: Derleme zamanında biliyoruz . Algoritmamızı uyacak şekilde ayarlayamaz mıyız , böylece OMv problemi (varsayım) geçerli olmaz? OMv varsayımı başarısız olmadıkça, bunun böyle olmadığını göreceğiz.MM

Kanıtlama fikri basittir: Belli bir boyuta kadar olan tüm matrisler için hızlı algoritmalar verebileceğimizi varsayın (örneğin tüm olası durumları ayırt etmek gibi). Bu belirli bir büyüklükten sonra, böl ve yönet'i kullanırız.

İşte detaylar:
Bazıları düzeltin (genelliği kaybetmeden) 2 ve 2'den daha büyük bir güçtür. Şimdi tüm ve tüm matrislerinin biz bir algoritma biliyoruz tüm vektörler için bu, değerlerini hesaplar zaman, yani gerçekten subquadratic zamanda bazı . (Bunun, her matris için boyutuna kadar bireysel bir algoritmaya izin verdiğine dikkat edin .)n0Nnn0n×nMAn,MvMvO(n2ε)ε>0n0×n0

Şimdi OMv'yi gerçekten subkubik bir zamanda çözeceğiz: boyutunda
bir ikili matris verildiğinde , burada ve için , bir bölme ve fethetme stratejisi kullanırız. Biz bölmek dört submatrices içine boyutlarda . Eğer , o zaman algoritmasını kullanırız , aksi takdirde tekrarlar. ( sabit bir sayı olduğundan, sabit algoritmayı sabit zamanda seçebiliriz.)Mn×nn=2kkn>n0MM1,M2,M3,M42k1×2k12k1n0A2k1,Min0

En fazla özyineleme adımına ihtiyacımız olacağını unutmayın . Ayrıca, vektörleri hesaplama yapacağız . Bu nedenle, tüm matris-vektör çarpımlarını işlemek için toplam işlem zamanına ihtiyacımız olacak .n v 1 , , v n n O ( n 3 - ε log n )O(logn)nv1,,vnnO(n3εlogn)

Logaritmanın herhangi bir polinomdan daha yavaş büyüdüğü bilinmektedir (özellikle herhangi bir kökten daha yavaş). Tespit bazı ile , bizim toplam hesaplama gerçekten subcubic sürede çalıştığını görüyoruz (zaman içinde, özellikle ). Dolayısıyla, OMv varsayımı yanlış olacaktır. ~ ε <εO(n,3- ~ ε )ε~>0ε~<εO(n3ε~)

(Eğer boyutu vardır ve ve 2'nin katlarında, daha sonra çalışan zamanlarda sınırları hala biz sadece artabileceğini gibi uygulamak değildir ve 2'nin bir sonraki güçlere)m × n m n n mMm×nmnnm

Sonuç: Hızlı algoritmalar elde etmek için girdi matrislerinde vaka ayrımlarından faydalanabilirseniz, OMv varsayımını iyileştirebilirsiniz.


Yazar ve vzn tarafından belirtildiği gibi, bu durum böyle değil, vektör ikili değil, Matrix gerekli değil N x N ve yazar işlemleri önceden hesaplamak istiyor ve çevrimiçi işleme gerek yok. Varsayım dayanarak yeterli değildir. Her iki makale de soru ile alakasız. Buradaki durum, asgari sayıda işlem sağlamak için sabit matrisi önceden hesaplamaktır. Tam, bantlı, simetrik durumlar için farklı yaklaşımlar olabilir.
Evil

@EvilJS: Herhangi bir M x N matrisine ve gerçek değerli vektörlere izin verirseniz, sorun cevapta verdiğimden daha da zorlaşır (örn. Çevrimiçi Boolean Matrix-Vektör Çarpma özel bir durum olacaktır). Daha genel bir problemi O'dan (n ^ 3) daha hızlı çözebilseydiniz, o zaman varsayım üzerinde de bir iyileştirme yaparsınız (ki bu büyük bir haber olurdu!). Ayrıca, yazar bir yorumda, vektörlerin başlangıçta bilinmediğini söylemektedir. Tüm vektörleri önceden biliyorsanız, sadece hızlı matris çarpımını kullanabilirsiniz (örneğin Strassen'in algoritmasının bir versiyonu).
tranisstor

Sadece yazarların durumunu "gerçek vektör" olarak gösterdim. Thomas matrisine bakın - sadece O (n) 'deki özel matris vakası. Ben genel bir durumu ima etmiyorum. Ve eğer Matrix sabitse ve vektörler biliniyorsa, hardsenze cevap Strassen'i uygulamıyor; (
Evil

@EvilJS: Ne söylemeye çalıştığınızı tamamen anladığımdan emin değilim. Elbette, Thomas matrisi gibi özel matris türleri için önemli bir hız kazanabilirsiniz, ancak genel olarak bu daha zordur. Belki de ortaya koyduğum sorunun bir ön işleme adımı (herhangi bir vektör gelmeden önce) dikkate aldığını da belirtmeliyim. Bana verdiğim herhangi bir matris için algoritmanızı sistematik olarak "nasıl kodlayacağımı" söyleyebilseydiniz, varsayımı da geliştirebilirsiniz (bu kodlama aşamasını bir algoritmanın ön işleme adımı olarak uygulayabildiğiniz için).
tranisstor

işe yarıyordu; Bununla birlikte, williams tarafından yapılan 2. ref, özellikle de ikili matrisleri göz önüne almaz. burada
fyi

-2

Bu aslında araştırma düzeyinde bir CS'dir, sorun en az iki durumda incelenmiştir, seyrek matrislerin çoğalması (örnek olarak verilen örnek kağıt) ve ayrıca "ikili seyrek matrislerin" özel durumu da incelenmiştir. 2 nd durum doğrusal programları optimize ile ilişkili olduğu bilinmektedir. minimal programlar ayrıca iki tip "geçit" içeren DAG'lar gibi olabilirler, toplama ve çarpma, bu nedenle bazı devre en aza indirme literatürü bununla bağlantı kurabilir ve muhtemelen "raf dışı" yazılım amaç için uyarlanabilir. Buradaki 2. vaka için özel bir referans ve bazı temel ilk ampirik çalışmalarla cstheory'deki aynı soru .


1
Sadece bağlantıları gözden kaçırdım, ama şu ana kadar iki nedenden dolayı şüpheliyim. 1) Matrisler seyrek değildir. Genellikle sıfır olmayanların sayısı sıfırlarla aynıdır, ancak kalıplara bağlı olarak sıfır olmayan matrisler için algoritmalarının ortaya çıkmasının bir yolu vardır . 2) Bu kağıtlar sadece temel ikili "kapılar" olarak toplama ve çarpma işlemlerine dayanıyor gibi görünmektedir, ancak benim tecrübeme göre çıkarma işlemini de kullanmak önemlidir. Bunun için bir çıkarma ikili kapısı veya "-1 ile çarpma" unary kapısı da bulunmalıdır. O ( n, 2 )O(n)O(n2)
Nick Alger

refs, başlıkların gösterdiği gibi, seyrek matrisleri gösterir . belki gazetelerdekinden farklı bir tanımın vardır? Tam bir seyreklik tanımına duyarlıysanız (çoğu kabaca korelasyonlu / neredeyse değiştirilebilir) soruda belirtilmelidir.
vzn

1
İlgilendiğim matrisler yoğun matrisler. Bu arada, bunun sorumu tam olarak çözmediğini düşünmeme rağmen, yanıtı takdir ediyorum.
Nick Alger,

tamam üzgünüm! karışık, tam soruyu anlamadı. İmkansız bakışta, örnek 2'niz bana 'doldurmaktan ve "seyrek olmaktan" daha az görünüyordu ve bazı teorilerden bazılarının en azından biraz uygulanabilir olacağını düşündüm. Temel olarak matris ne kadar yoğunsa, işlem o kadar az optimize edilebilir, bu nedenle muhtemelen bu tip optimizasyon teorisinin çoğu seyrek matrisler etrafında yönlendirilir.
vzn

-3

Bu sorunun tam olarak çalışılmış olup olmadığından emin değilim, ancak bu araştırma ilişkili ve makul bir yol / başlangıç ​​gibi görünüyor. seyrek matris çarpımı için hipergrafinin ayrışmasına bakar. İkili matrisler bu yaklaşımın özel bir halidir. Bu yaklaşım "düz" çarpma yönteminden daha uygun stratejiler bulacaktır. İkili matris özelliğine göre daha fazla optimizasyon (bu çerçeve içinde) mümkün olabilir.


2
Bunun soru ile ne alakası olduğunu anlamıyorum. Bu makale, işlemciler arası iletişim miktarını en aza indirmek için paralel hesaplama için dağıtılmış bir sistem arasında matris çarpımını bölmekle ilgilidir. Bunun bu soru ile ne alakası var? Soru, paralel hesaplama veya işlemciler arası iletişim hakkında hiçbir şeyden bahsetmiyor. Bağlantıyı daha açık hale getirmek için cevabınızı düzenlemenizi tavsiye ederim.
DW

afaik de aynı problemi ve paralel hesaplamayı minimize etmek aynı hesapların tek işlemcili uygulamasını minimuma indirir. en azından, sorgulayıcı paralel uygulamaları dışlamamıştır.
vzn

1
Bağlantı için teşekkürler. Bununla birlikte, matris girdilerinin sadece sıfır ve bir tane içerdiği gerçeğinden faydalanmadığı için bu problemin metodundan şüpheliyim, oysa ki bu özellik söyleyebileceğim kadarıyla çok önemli. Örneğin, ilk örnekteki "çalışan toplam" algoritması yalnızca matrisin belirli bir sütununda sıfır olmayan tüm girişler aynı değere sahipse çalışır.
Nick Alger

NA, gözleminiz / itirazınız cevabında ele alınmaktadır. 0/1 özelliği kullanılarak muhtemelen daha fazla optimizasyon yapılabilir; Bu yöntemin, paralelleştirme kuvveti altında toplam toplama / çarpma işlemlerini en aza indirdiği görülüyor. toplama / çarpma işlemleri ayrıca bir DAG'de "kapılar" olarak görülebilir ve teknik kapıları en aza indirir. Kağıdın önemli karmaşıklığı, bu optimizasyon işleminin özünde daha derin / önemli karmaşıklığını ortaya koymaktadır. Belirtildiği gibi cevap bu zor problem üzerinde kesin değildir, sadece “hiç olmamasından iyidir”.
vzn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.