วิธีการรันการถดถอยเชิงเส้นในแบบคู่ขนาน / กระจายสำหรับการตั้งค่าข้อมูลขนาดใหญ่?


13

ฉันกำลังทำงานกับปัญหาการถดถอยเชิงเส้นที่มีขนาดใหญ่มากด้วยขนาดข้อมูลที่ใหญ่จนพวกเขาต้องถูกเก็บไว้ในกลุ่มของเครื่อง มันจะใหญ่เกินไปที่จะรวมตัวอย่างทั้งหมดไว้ในหน่วยความจำของเครื่องเดียว (แม้แต่ดิสก์)

เมื่อต้องการถดถอยข้อมูลเหล่านี้ฉันกำลังคิดถึงวิธีการแบบขนานนั่นคือเรียกใช้การถดถอยในแต่ละกล่องแล้วคำนวณค่าเบต้าตามสถิติของแต่ละเบต้าแต่ละตัว (อาจเป็นค่าเฉลี่ยหรือค่ามัธยฐาน)

สิ่งนี้สมเหตุสมผลหรือไม่? ถ้าเป็นเช่นนั้นวิธีการที่ฉันควรจะได้รับทั้งหมดที่คาดว่าจะR2จากแต่ละR2 ?

คำตอบ:


10

คำตอบสั้น ๆ :

ใช่การดำเนินการถดถอยเชิงเส้นแบบขนานนั้นเสร็จสิ้นแล้ว ตัวอย่างเช่น Xiangrui Meng et al (2016) สำหรับการเรียนรู้ของเครื่องใน Apache Spark วิธีการทำงานคือการใช้การไล่ระดับสีแบบสุ่ม (SGD) ในส่วนที่ 3 คุณสมบัติหลักผู้เขียนกล่าวถึง:

โมเดลเชิงเส้นทั่วไปจะได้เรียนรู้ผ่านอัลกอริธึมการออปติไมซ์ซึ่งทำการคำนวณแบบไล่ระดับสีแบบขนานโดยใช้ไลบรารี่พีชคณิตเชิงเส้นที่รวดเร็วในภาษาซีพลัสพลัสสำหรับการคำนวณของคนงาน

ตัวอย่างเกี่ยวกับการทำงานของ SGD สามารถพบได้ในคำตอบของฉันที่นี่: วิธีสืบเชื้อสายการไล่ระดับสีแบบสุ่มสามารถประหยัดเวลาได้อย่างไรเมื่อเปรียบเทียบกับการไล่ระดับสีแบบมาตรฐาน


คำตอบยาว:

หมายเหตุสัญกรณ์ไม่สอดคล้องกับลิงค์ที่ฉันให้ฉันรู้สึกว่าสัญกรณ์เมทริกซ์ดีกว่าในคำถามนี้

เพื่อทำการถดถอยเชิงเส้นที่เราพยายามทำ

minimize Xβy2

อนุพันธ์คือ

2XT(Xβy)

ในการตั้งค่าข้อมูลขนาดเล็กเราสามารถตั้งค่าอนุพันธ์เป็นและแก้ได้โดยตรง (เช่นการสลายตัวของ QR ในอาร์) ในการตั้งค่าข้อมูลขนาดใหญ่ data matrixนั้นใหญ่เกินไปที่จะเก็บไว้ในหน่วยความจำและอาจแก้ไขได้ยาก (ฉันไม่คุ้นเคยกับวิธีการแยกสลาย QR หรือ Cholesky สำหรับการฝึกอบรมขนาดใหญ่)0X

วิธีหนึ่งในการทำให้ขนานนี้คือการพยายามใช้วิธีวนซ้ำ: การไล่ระดับสีแบบสุ่มสุ่มซึ่งเราสามารถประมาณการไล่ระดับสีโดยใช้ชุดย่อยของข้อมูล (ถ้าเราใช้ ,เพื่อเป็นตัวแทนของชุดย่อยของข้อมูลการไล่ระดับสีสามารถประมาณได้โดยและเราสามารถอัปเดตด้วยการไล่ระดับสีโดยประมาณ)Xsys2XsT(Xsβys)β

นอกจากนี้สำหรับสถิติเราสามารถคำนวณสำหรับข้อมูลทั้งหมดในแบบขนานหรือใกล้เคียงโดยใช้ชุดย่อยของข้อมูลR2R2

สัญชาตญาณในการทำงาน (mapreduce กระบวนทัศน์):

ฉันพูดประมาณโดยใช้ชุดย่อย; สัญชาตญาณว่าทำไมงานนี้สามารถอธิบายได้ในตัวอย่างต่อไปนี้: สมมติว่าฉันมีจุดข้อมูล 100 พันล้านจุดและเราต้องการคำนวณค่าเฉลี่ยของจุดข้อมูลทั้งหมด สมมติว่าการดำเนินการดังกล่าวใช้เวลานานมากและยิ่งกว่านั้นข้อมูลทั้งหมดไม่สามารถเก็บไว้ในหน่วยความจำได้

สิ่งที่เราทำได้คือเอาเซ็ตย่อยพูด 1 พันล้านรายการแล้วคำนวณค่าเฉลี่ยของสิ่งเหล่านี้ การประมาณที่เกิดขึ้นจึงไม่ควรอยู่ห่างจากความจริง (เช่นใช้ข้อมูลทั้งหมด)

ในการขนานเราสามารถใช้คอมพิวเตอร์ 100 เครื่องโดยแต่ละเครื่องใช้ชุดย่อยของจุดข้อมูล 1 พันล้านชุดที่แตกต่างกันและคำนวณค่าเฉลี่ยของคอมพิวเตอร์เหล่านี้ (โดยทั่วไปเรียกว่าขั้นตอน MAP) ในที่สุดเรียกใช้ค่าเฉลี่ยอื่นในจำนวน 100 เหล่านี้ (หรือที่รู้จักว่าขั้นตอนการลดซ้ำ)

หมายเหตุ "กระบวนทัศน์ mapreduce" จะทำงานได้ดีในบางกรณี แต่อาจไม่ดีในบางกรณี สำหรับตัวอย่างการดำเนินการ "เฉลี่ย" ที่กล่าวถึงก่อนหน้านี้นั้นง่ายมากเพราะเรารู้ , ( สมมติว่าความยาวของและเท่ากัน) สำหรับวิธีการทำซ้ำบางอย่างเช่นการทำซ้ำปัจจุบันขึ้นอยู่กับผลการทำซ้ำก่อนหน้านี้มันยากที่จะขนาน โคตรการไล่ระดับสีแบบสุ่มแก้ปัญหานี้โดยการประมาณการไล่ระดับสีโดยใช้ชุดย่อยของข้อมูล และรายละเอียดสามารถพบได้ในคำตอบของ @ user20160mean(<x,y>)=mean(x)+mean(y)xy

อ้างอิง:

เซียงรุยเหมิงและคณะ (2016) MLlib: การเรียนรู้ของเครื่องใน Apache Spark


8

ดังที่ @ hxd1011 กล่าวถึงวิธีหนึ่งคือกำหนดสูตรการถดถอยเชิงเส้นเป็นปัญหาการปรับให้เหมาะสมแล้วแก้ไขโดยใช้อัลกอริทึมแบบวนซ้ำ วิธีการนี้สามารถขนานกัน แต่มีคำถามที่สำคัญสองสามข้อ: 1) ปัญหาจะถูกแบ่งออกเป็นปัญหาย่อยอย่างไร 2) เมื่อพิจารณาว่าอัลกอริธึมการปรับให้เหมาะสมเช่น SGD นั้นเรียงลำดับโดยเนื้อแท้แล้วจะรวมโซลูชันสำหรับปัญหาย่อยเพื่อให้ได้โซลูชันระดับโลกได้อย่างไร

Zinkevich และคณะ (2010) อธิบายวิธีการก่อนหน้านี้บางส่วนเพื่อขนานในหลายเครื่อง:

  • 1) ขนาน SGD ดังนี้แบ่งข้อมูลข้ามหลายเครื่อง ในแต่ละขั้นตอนแต่ละเครื่องจะประมาณการไล่ระดับสีโดยใช้ชุดย่อยของข้อมูล การประมาณการไล่ระดับสีทั้งหมดจะถูกส่งผ่านไปยังเครื่องส่วนกลางซึ่งจะทำการรวมการทดสอบพารามิเตอร์ส่วนกลาง ข้อเสียของวิธีนี้คือต้องใช้การสื่อสารเครือข่ายจำนวนมากซึ่งจะช่วยลดประสิทธิภาพ

  • 2) แบ่งพาร์ติชันข้อมูลอย่างเท่าเทียมกันในเครื่องท้องถิ่น เครื่องแต่ละเครื่องแก้ปัญหาได้อย่างแม่นยำสำหรับชุดย่อยของข้อมูลโดยใช้ชุดการแก้ปัญหา การประมาณพารามิเตอร์สุดท้ายจากเครื่องท้องถิ่นนั้นมีค่าเฉลี่ยเพื่อสร้างโซลูชันระดับโลก ข้อดีของวิธีนี้คือต้องใช้การสื่อสารผ่านเครือข่ายเพียงเล็กน้อย แต่ข้อเสียคือการประมาณค่าพารามิเตอร์อาจไม่ดีเท่าที่ควร

พวกเขาเสนอวิธีการใหม่:

  • 3) อนุญาตให้แต่ละเครื่องโลคัลวาดจุดข้อมูลแบบสุ่ม เรียกใช้ SGD ในแต่ละเครื่อง ในที่สุดให้เฉลี่ยพารามิเตอร์ข้ามเครื่องเพื่อรับโซลูชันระดับโลก เช่นเดียวกับ (2) วิธีนี้ต้องใช้การสื่อสารเครือข่ายเล็กน้อย แต่การประมาณพารามิเตอร์นั้นดีกว่าเพราะแต่ละเครื่องได้รับอนุญาตให้เข้าถึงเศษส่วนที่ใหญ่กว่าของข้อมูล

วิธีการปรับให้เหมาะสมแบบขนานนั้นเป็นเรื่องทั่วไปมากและนำไปใช้กับอัลกอริทึมการเรียนรู้ของเครื่องจำนวนมาก (ไม่ใช่แค่การถดถอยเชิงเส้น)

อีกทางเลือกหนึ่งคือใช้อัลกอริธึมการสลายตัวแบบขนาน / กระจายหรือตัวแก้เชิงเส้น การถดถอยเชิงเส้นกำลังสองน้อยที่สุดมีโครงสร้างพิเศษที่ช่วยให้สามารถแก้ไขได้โดยใช้วิธีการสลายตัวเมทริกซ์ นี่คือวิธีที่คุณมักจะแก้ปัญหาในกรณีของชุดข้อมูลขนาดเล็กที่เหมาะกับหน่วยความจำ สิ่งนี้สามารถทำให้ขนานได้โดยการกระจายบล็อกของเมทริกซ์ข้ามหลายเครื่องจากนั้นทำการแก้ปัญหาโดยใช้การคำนวณเมทริกซ์แบบขนาน / กระจาย เนื่องจากวิธีการนี้มีความเชี่ยวชาญมากกว่าในการแก้ปัญหาระบบเชิงเส้นมันน่าสนใจที่จะเห็นว่าประสิทธิภาพของระบบเปรียบเทียบกับวิธีการเพิ่มประสิทธิภาพแบบกระจายทั่วไป หากใครสามารถให้ข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ฉันยินดีที่จะได้ยิน

อ้างอิง:

Zinkevich และคณะ (2010) โคตรลาดลงแบบขนาน


+1 คำตอบที่ดีในการแก้ไขปัญหาที่ฉันไม่ได้กล่าวถึงในรายละเอียดซึ่งก็คือหลังจากมีการไล่ระดับสีแบบประมาณว่าจะทำอย่างไร
Haitao Du

@ hxd1011 +1 ให้กับคุณเช่นกันสำหรับคำอธิบายที่ดีของ SGD และวิธีการเชื่อมต่อกับปัญหาของ OP
user20160

2

ยาวยาวก่อนลดแผนที่ฉันแก้ไขสิ่งนี้ ด้านล่างคือการอ้างอิงถึงกระดาษเก่าของฉันในวารสารเศรษฐศาสตร์เศรษฐมิติ 2523 มันเป็นโอกาสสูงสุดที่ไม่เชิงเส้นแบบขนานและจะทำงานเพื่อการประเมิน M

วิธีการที่แน่นอนสำหรับการถดถอย แบ่งข้อมูลออกเป็นชุดย่อย k บนตัวประมวลผล / หน่วย k (สามารถทำตามลำดับได้เช่นกัน) การถดถอย k เก็บค่าสัมประสิทธิ์การถดถอยเป็นเมทริกซ์ X'X สำหรับแต่ละตัวหรือไม่ เรียก b1, ... , bk และ W1, ... , Wk ตามลำดับจากนั้นสัมประสิทธิ์การถดถอยโดยรวมจะได้รับโดย b = ผกผัน (W1 + .. + Wk) * (W1 * b1 + ... + Wk * bk) ต้องการการส่งผ่านข้อมูลอีกครั้งเพื่อคำนวณส่วนที่เหลือโดยใช้ b เพื่อให้พารามิเตอร์ได้รับ sigma ^ 2 ความแปรปรวนข้อผิดพลาดโดยประมาณ R ^ 2 โดยรวม F และสิ่งที่คล้ายกัน จากนั้นเมทริกซ์ความแปรปรวนร่วมของ b ถูกกำหนดโดย sigma ^ 2 (ค่าผกผัน (W1 + .. + Wk)) ด้านบน * หมายถึงการคูณเมทริกซ์

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


หวังว่าฉันจะรู้งานของคุณเมื่อฉันเอง! academic.oup.com/imaiai/article-abstract/5/4/379/...
JohnRos
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.