Büyük veri ayarı için doğrusal regresyon nasıl paralel / dağıtılmış şekilde çalıştırılır?


13

Çok büyük bir lineer regresyon problemi üzerinde çalışıyorum, veri boyutu o kadar büyük ki bir makine kümesinde saklanmaları gerekiyor. Tüm örnekleri tek bir makinenin belleğine (hatta diske) toplamak çok büyük olacak

Bu verileri regresyon yapmak için, paralel bir yaklaşım düşünüyorum, yani her bir kutuda regresyon çalıştırın ve daha sonra her bir beta (muhtemelen bir ortalama veya bir medyan) istatistiklerine göre beta hesaplayın

bu bir anlam ifade ediyor mu? eğer öyleyse, nasıl beklenen toplam almalısınız her gelen R 2 ?R,2R,2

Yanıtlar:


10

Kısa cevap:

Evet, doğrusal regresyonun paralel olarak yürütülmesi yapılmıştır. Örneğin, Xiangrui Meng ve ark. (2016) Apache Spark'da Makine Öğrenimi için. Çalışma şekli stokastik degrade iniş (SGD) kullanmaktır. Bölüm 3, temel özellikler, yazar şunları söyledi:

Genelleştirilmiş doğrusal modeller, işçi hesaplamaları için hızlı C ++ tabanlı doğrusal cebir kitaplıkları kullanılarak gradyan hesaplamasını paralelleştiren optimizasyon algoritmaları aracılığıyla öğrenilir.

SGD'nin nasıl çalıştığına dair bir örnek burada cevabımda bulunabilir: Stokastik degrade iniş, standart degrade inişe kıyasla zamandan nasıl tasarruf edebilir?


Uzun cevap:

Not, gösterim sağladığım bağlantı ile tutarlı değil, bu soruda matris gösteriminin daha iyi olduğunu hissediyorum.

Doğrusal bir regresyon yapmak için yapmaya çalışıyoruz

küçültmek Xβ-y2

Türev

2XT(Xβ-y)

Küçük veri ayarlarında, türevi ayarlayabilir ve doğrudan çözebiliriz. (örneğin, R'deki QR ayrışması) Büyük veri ayarlarında, X veri matrisi bellekte depolanmak için çok büyüktür ve doğrudan çözülmesi zor olabilir. (Büyük matrisler için QR ayrıştırması veya Cholesky ayrışması nasıl yapılacağını bilmiyorum).0X

Xsys2XsT(Xsβ-ys)β

R,2R,2

Nasıl çalıştığına dair sezgi (mapreduce paradigması):

Ben bir altkümeyi kullanarak yaklaşık söylemeye devam ediyorum; bunun neden işe yaradığı sezgisi aşağıdaki örnekte açıklanabilir: 100 milyar veri noktasına sahip olduğumu ve tüm veri noktalarının ortalamasını hesaplamak istediğimizi varsayalım. Böyle bir işlemin gerçekleştirilmesinin çok uzun zaman aldığını ve ayrıca tüm verilerin hafızada saklanamayacağını varsayalım.

Yapabileceğimiz sadece bir alt küme almak, 1 milyar öğe söylemek ve bunların ortalamasını hesaplamak. Bu şekilde üretilen yaklaşım gerçek olmaktan uzak olmamalıdır (yani tüm verileri kullanarak).

Paralel hale getirmek için, her biri 1 milyar veri noktasının farklı bir alt kümesini alıp bunların ortalamasını hesaplayan 100 bilgisayar kullanabiliriz. (Genellikle MAP adımı olarak adlandırılır). Son olarak, bu 100 sayı üzerinde başka bir ortalama çalıştırın (REDUCE adımı).

anlamına gelmek(<x,y>)=anlamına gelmek(x)+ortalama (Y)xy

Referanslar:

Xiangrui Meng ve diğ. (2016) . MLlib: Apache Spark'da Makine Öğrenmesi


8

@ Hxd1011'de belirtildiği gibi, bir yaklaşım doğrusal regresyonu bir optimizasyon problemi olarak formüle etmek, daha sonra tekrarlayan bir algoritma (örneğin stokastik gradyan iniş) kullanarak çözmek. Bu yaklaşım paralelleştirilebilir, ancak birkaç önemli soru vardır: 1) Sorun alt problemlere nasıl bölünmelidir? 2) SGD gibi optimizasyon algoritmalarının doğası gereği ardışık olduğu düşünüldüğünde, küresel bir çözüm elde etmek için alt problemlere yönelik çözümler nasıl birleştirilmelidir?

Zinkevich ve diğ. (2010) birden fazla makinede paralelleştirmeye yönelik daha önceki bazı yaklaşımları tanımlamaktadır:

  • 1) SGD'yi aşağıdaki gibi paralelleştirin: Verileri birden çok makineye ayırın. Her adımda, her bir yerel makine, verilerin bir alt kümesini kullanarak degradeyi tahmin eder. Tüm degrade tahminleri, genel bir parametre güncellemesi gerçekleştirmek için onları toplayan merkezi bir makineye iletilir. Bu yaklaşımın dezavantajı, verimliliği azaltan ağır ağ iletişimi gerektirmesidir.

  • 2) Verileri yerel makineler arasında eşit olarak bölümlere ayırın. Her makine, toplu iş çözücü kullanarak sorunu kendi veri alt kümesi için tam olarak çözer. Küresel bir çözüm üretmek için yerel makinelerden nihai parametre tahminlerinin ortalaması alınır. Bu yaklaşımın yararı, çok az ağ iletişimi gerektirmesidir, ancak dezavantajı, parametre tahminlerinin yetersiz olması olabilir.

Yeni bir yaklaşım öneriyorlar:

  • 3) Her yerel makinenin veri noktalarını rastgele çizmesine izin verin. Her makinede SGD'yi çalıştırın. Son olarak, global bir çözüm elde etmek için parametrelerin makinelerde ortalamasını alın. (2) gibi, bu yöntem çok az ağ iletişimi gerektirir. Ancak, parametre tahminleri daha iyidir, çünkü her makinenin verilerin daha büyük bir kısmına erişmesine izin verilir.

Paralel optimizasyon yaklaşımı çok geneldir ve birçok makine öğrenme algoritması için geçerlidir (sadece doğrusal regresyon için değil).

Başka bir alternatif, paralel / dağıtılmış matris ayrışma algoritmaları veya doğrusal çözücüler kullanmak olacaktır. En küçük kareler doğrusal regresyon, matris ayrıştırma yöntemleri kullanılarak çözülmesini sağlayan özel bir yapıya sahiptir. Belleğe uyan daha küçük bir veri kümesi durumunda genellikle bu şekilde çözersiniz. Bu, matris bloklarını birden çok makineye dağıtarak, ardından paralel / dağıtılmış matris hesaplamaları kullanarak sorunu çözerek paralelleştirilebilir. Bu yaklaşımın doğrusal sistemlerin çözümünde daha uzman olduğu düşünüldüğünde, performansının daha genel dağıtılmış optimizasyon yaklaşımıyla nasıl karşılaştırıldığını görmek ilginç olacaktır. Herkes bu konuda daha fazla bilgi verebilir, duymak mutluluk duyarım.

Referanslar:

Zinkevich ve diğ. (2010) . Paralelleştirilmiş Stokastik Degrade İniş.


Ayrıntılı olarak tartışmadığım sorunu ele almak için harika bir cevap + 1, ne de olsa yaklaşık gradyanı yaptıktan sonra.
Haitao Du

@ hxd1011 SGD'nin güzel açıklaması ve OP'nin problemine nasıl bağlanacağı için +1 kullanıcısı
user20160

2

Çok, çok, harita azalmadan önce bunu çözdüm. Aşağıda Journal of Econometrics 1980'deki eski bir makaleme atıfta bulunulmaktadır. Paralel doğrusal olmayan maksimum olasılık içindi ve M-tahmini için işe yarayacaktır.

Yöntem regresyonlar için kesindir. Verileri k işlemcilerde / birimlerde k alt kümelerine ayırın (sıralı olarak da yapılabilir.) K regresyonları, regresyon katsayılarını her biri için bir X'X matrisi olarak tutar. Bunlara sırasıyla b1, ..., bk ve W1, ..., Wk deyin, sonra genel regresyon katsayıları b = ters (W1 + .. + Wk) * (W1 * b1 + ... + Wk * bk) bir parametrelerin tahmini hata varyansını, genel olarak R ^ 2 F ve benzerlerini elde etmesi için b kullanarak kalanları hesaplamak için verilerden başka bir geçişe ihtiyaç duyar. Daha sonra b'nin kovaryans matrisi tam olarak sigma ^ 2 (ters (W1 + .. + Wk)) ile verilir. * Üstünde matris çarpımı belirtilmiştir.

https://www.sciencedirect.com/science/article/pii/0304407680900950


Kendi işimi yaptığımda çalışmanı bilseydim! academic.oup.com/imaiai/article-abstract/5/4/379/...
JohnRos
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.