Jawaban singkat:
Ya, menjalankan regresi linier secara paralel telah dilakukan. Sebagai contoh, Xiangrui Meng et al. (2016) untuk Pembelajaran Mesin di Apache Spark. Cara kerjanya menggunakan stochastic gradient descent (SGD). Di bagian 3, fitur inti, penulis menyebutkan:
Model linier umum dipelajari melalui algoritma optimasi yang memparalelkan perhitungan gradien, menggunakan pustaka aljabar linier berbasis C ++ yang cepat untuk perhitungan pekerja.
Contoh tentang cara kerja SGD dapat ditemukan dalam jawaban saya di sini: Bagaimana penurunan gradien stokastik dapat menghemat waktu dibandingkan dengan penurunan gradien standar?
Jawaban panjang:
Catatan, notasi tidak konsisten dengan tautan yang saya berikan, saya merasa notasi matriks lebih baik dalam pertanyaan ini.
Untuk melakukan regresi linier, kami coba lakukan
kecilkan ∥ X β- y∥2
Derivatifnya adalah
2 XT( Xβ- y)
Dalam pengaturan data kecil, kita dapat mengatur turunan ke dan menyelesaikannya secara langsung. (misalnya, dekomposisi QR dalam R.) Dalam pengaturan data besar, matriks data terlalu besar untuk disimpan dalam memori, dan mungkin sulit untuk dipecahkan secara langsung. (Saya tidak terbiasa dengan cara melakukan dekomposisi QR atau dekomposisi Cholesky untuk matriks besar).X0X
Salah satu cara untuk memparalelkan ini adalah dengan mencoba menggunakan metode iteratif: stochastic gradient descent, di mana kita dapat memperkirakan gradien menggunakan subset data. (Jika kita menggunakan , untuk mewakili bagian dari data, gradien dapat didekati dengan , dan kita dapat memperbarui dengan gradien yang didekati).y s 2 X T s ( X s β - y s ) βXsys2 XTs(Xsβ-ys)β
Selain itu, untuk statistik , kita dapat menghitung untuk semua data secara paralel atau memperkirakannya dengan menggunakan subset data.R 2R2R2
Intuisi tentang cara kerjanya (paradigma mapreduce):
Saya terus mengatakan perkiraan menggunakan subset; intuisi mengapa ini bekerja dapat dijelaskan dalam contoh berikut: misalkan saya memiliki 100 miliar titik data dan kami ingin menghitung rata-rata semua titik data. Misalkan melakukan operasi seperti itu membutuhkan waktu yang sangat lama, dan selanjutnya seluruh data tidak dapat disimpan dalam memori.
Apa yang dapat kita lakukan adalah hanya mengambil satu bagian, katakan 1 miliar item, dan menghitung rata-rata dari semuanya. Perkiraan yang dihasilkan seharusnya tidak jauh dari kebenaran (yaitu, menggunakan seluruh data).
Untuk memparalelkan, kita dapat menggunakan 100 komputer, dengan masing-masing dari mereka mengambil subset berbeda dari 1 miliar titik data dan menghitung rata-rata dari ini. (Umumnya disebut sebagai langkah MAP). Terakhir, jalankan rata-rata lain pada 100 angka ini (alias langkah REDUCE).
Perhatikan "paradigma mapreduce" akan bekerja dengan baik dalam beberapa kasus, tetapi tidak baik dalam kasus lain. Sebagai contoh, operasi "rata-rata" yang disebutkan sebelumnya sangat mudah, karena kita tahu , ( dengan asumsi panjang dan adalah sama). Untuk beberapa metode berulang, yaitu iterasi saat ini tergantung pada hasil iterasi sebelumnya, sulit untuk diparalelkan. Stochastic gradient descent menyelesaikan masalah ini dengan memperkirakan gradien menggunakan subset data. Dan detail dapat ditemukan dalam jawaban @ user20160.x yrata-rata ( < x , y> ) = rata-rata ( x ) + rata-rata (y)xy
Referensi:
Xiangrui Meng et al. (2016) . MLlib: Pembelajaran Mesin di Apache Spark