Tekil değer ayrıştırma algoritmalarına ilişkin mevcut durum nedir?


12

Mümkün olduğunca basit bir pakette makul derecede doğrusal cebir yeteneği sağlamak için sadece başlık matris kütüphanesi üzerinde çalışıyorum ve sanatın şu andaki durumunun ne olduğunu araştırmaya çalışıyorum: SVD'nin hesaplanması karmaşık matris.

İki fazlı ayrışma, tekdüze değer hesaplaması ve ardından tek köşeli değer hesaplaması yapıyorum. Şu anda bidiagonalization için hanehalkı yöntemini kullanıyorum (LAPACK'in bunu da kullandığına inanıyorum) ve bunun şu anda aldığı kadar iyi olduğunu düşünüyorum (birisi algoritması bilmiyorsa onun için..). O(N2)

Tekil değer hesaplaması listemde bir sonraki adımdır ve bunu yapmak için ortak algoritmaların ne olduğuna dair döngüden çıkıyorum. Burada araştırmanın O(N) karmaşıklığı ile dikliği garanti eden ters iterasyon yöntemine doğru ilerlediğini okudum . Bunu veya diğer ilerlemeleri duymak isterim.


yalnızca başlık matrisi lib'iniz için doc var mı (.h dışında)? Ayrıca lütfen "svd" etiketini ekleyin.
denis

Yanıtlar:


7

"Rastgele algoritmalar" son zamanlarda kısmi dosyalar için oldukça popüler hale gelmiştir. Yalnızca başlık uygulaması buradan indirilebilir: http://code.google.com/p/redsvd/

Mevcut yöntemlerin bir incelemesi burada bulunabilir: http://arxiv.org/abs/0909.4061

Tam svds için Hanedan daha iyi yapabilirim emin değilim.


Kulağa çok ilginç geliyor, şu anket kağıdına bir göz atmam gerekecek, teşekkürler!
gct

OP yoğun matrisler için algoritmalarla ilgilenir. Rastgele algoritmaların, eğer çalışırlarsa, o ortamda rekabetçi olduğunu düşünmüyorum.
Federico Poloni

Bu mesaj o randomize yöntemler yoğun matrisleri üzerinde sadece iyi çalışır belirtilen research.facebook.com/blog/294071574113354/fast-randomized-svd
dranxo

@dranxo Bu yazı üzerinde hiçbir doğruluk karşılaştırması yoktur ve zamanlama sonuçları çok titiz görünmemektedir. Ayrıca, randomize algoritmalar projeksiyon + küçük ölçekli bir sorunun kesin çözümüne dayanmaktadır. Bu OP'nin sonuçta ortaya çıkan küçük ölçekli problem için zaten bir "standart yöntemin" uygulanmasına ihtiyaç duyacağı anlamına gelir.
Federico Poloni

Yeterince adil. Biraz kafam karışsa da, neden bu yöntemlerin sadece seyrek matrisler üzerinde çalıştığını düşünmeliyiz. Joel Tropp'un makalesinin özetini: "Yoğun bir giriş matrisi için, rastgele algoritmalar klasik algoritmalar için O (mnk) ile karşılaştırıldığında O (mn log (k)) kayan nokta işlemlerini (flop) gerektirir." arxiv.org/pdf/0909.4061v2.pdf
dranxo

4

Burada araştırmanın karmaşıklığı ile garanti eden ters iterasyon yöntemine doğru ilerlediğini okudum . Bunu veya diğer ilerlemeleri duymak isterim.O(N)

(Ayrıntıları yazmak için zamanım olmadığından birkaç yorum yapmak istedim, ancak yorum kutusu için oldukça büyük oldu.)

Dhillon ve Parlett'in MRRR (çok sayıda nispeten sağlam gösterim) algoritması olacağına inanıyorum . Bu, Fernando'nun önceki çalışmasında kök salmış ve bu da Jim Wilkinson'un özdeğer problemleri hakkındaki anıtsal kitabında ortaya çıkan bir problemden esinlenmiştir. Tekil vektörlerinin elde edilmesi için "ters iterasyon" kısmı kavramında köklü Fernando tarafından "bükülmüş çarpanlama" içine faktoring matrislerini kullanırlar, ve ayrışmaları.U D ULDLUDU

Öte yandan, algoritmanın "tekil değer" kısmı, Fernando, Parlett , Demmel ve Kahan'ın (ilhamla) önceki çalışmasının doruk noktası olan (kaydırılmış) diferansiyel bölüm farkı (dqd (s)) algoritmasından gelir. Heinz Rutishauser).

Bildiğiniz gibi SVD yöntemleri genellikle tekil değerler bidiagonal matristen alınmadan önce bir bidiagonal ayrışma ile devam eder. Ne yazık ki ön uç bidiagonal ayrıştırma için mevcut en iyi yöntem hakkında çok güncel değil; en son kontrol ettiğimde, olağan yöntem sütun döndürme ile QR ayrışması ile başlamak ve daha sonra nihayetinde bidiagonal ayrışmayı elde etmek için üçgen faktöre uygun şekilde dikgen dönüşümler uygulamaktır.

Ayrıntılardan eksik olduğumu anlıyorum; Kütüphaneme eriştiğimde bu cevabı daha fazla açıklamaya çalışacağım ...


Matris, iki çapraz forma, bir sütun sonra bir satır yapın, çaprazlamayı tekrarlayın: sütunu diyagonale sıfırlamak için eşyalar veya ev sahibi kullanın, ardından satır için süper diyagonalin aynısını yapın.
adam W

Önceki yorumumu görmezden gel, üç köşegen form düşünüyordum. Üzgünüm. İki köşegenleştirme benzerlik açısından önemsiz değildir (aslında özdeğerleri açığa çıkarır), ancak referansınız benzerlik yapmaz, başka bir şey yapar; sol ve sağ farklı dik matrislerle çarpılır. , ve ile çift çaprazlıdır, bu ilk önce QR ile söylediğiniz gibi yapılabilir, ancak bir yorumda kolayca açıklanmaz. Cevabı daha fazla açıklarsanız ilgilenebilirim (ancak şu anda çalışmalarımın bu yöne gittiği için de anlayabilirim). U U = I V V = IUAVUU=IVV=I
adam W

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.