การเขียนโปรแกรมเชิงเส้นด้วยข้อ จำกัด เมทริกซ์


10

ฉันมีปัญหาการเพิ่มประสิทธิภาพที่มีลักษณะดังต่อไปนี้

minJ,Bij|Jij|s.t.MJ+BY=X

ที่นี่ตัวแปรของฉันคือเมทริกซ์ และBแต่ปัญหาทั้งหมดยังคงเป็นโปรแกรมเชิงเส้น ตัวแปรที่เหลือถูกแก้ไขJB

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

มีอัลกอริทึมและ / หรือแพ็คเกจที่สามารถจัดการกับการเพิ่มประสิทธิภาพของแบบฟอร์มด้านบนได้หรือไม่? ตอนนี้ฉันมีหน่วยความจำไม่เพียงพอเพราะMและYต้องถูกคัดลอกหลายครั้ง!


คือBเมทริกซ์พารามิเตอร์หรือคุณหมายถึงY ? เมทริกซ์ต่างๆมีรูปทรงอะไรบ้าง?
Geoffrey Irving

[Hi Geoffrey!] J และ B เป็นตัวแปรส่วนที่เหลือเป็นพารามิเตอร์ B มีคอลัมน์ค่อนข้างน้อย แต่ขนาดที่เหลือทั้งหมดมีขนาดค่อนข้างใหญ่ (ไม่มีจัตุรัส)
Justin Solomon

[Hello!] คุณควรแก้ไขโพสต์เพื่อไม่พูดสองครั้งว่า B เป็นพารามิเตอร์
Geoffrey Irving

1
น่าสนใจ แต่อาจไร้ประโยชน์รุ่นของปัญหานี้กับแทนสามารถแก้ไขได้ด้วย SVD สองสามตัว Jij2|Jij|
Geoffrey Irving

1
@ Geoffrey นั่นไม่ใช่เรื่องบังเอิญ :-)
Justin Solomon

คำตอบ:


12

ภาพรวม

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

ในโพสต์นี้เรา

  • รับการกำหนด ADMM โดยรวมสำหรับการทำให้ปัญหาของคุณเป็นไปโดยทั่วไป
  • รับมาจากปัญหาย่อยสำหรับการวนซ้ำ ADMM แต่ละครั้งและให้ความเชี่ยวชาญพวกเขาในสถานการณ์ของคุณแล้ว
  • ตรวจสอบที่เกิดระบบเชิงเส้นที่ต้องได้รับการแก้ไขแต่ละซ้ำและพัฒนาแก้ได้อย่างรวดเร็ว (หรือ preconditioner) ตาม precomputing decompositions eigenvalue (หรือประมาณอันดับที่ต่ำดังกล่าว) สำหรับและ TMTMYYT
  • สรุปด้วยคำพูดสรุปไม่กี่

ความคิดใหญ่ ๆ ส่วนใหญ่ที่นี่ครอบคลุมอยู่ในบทความวิจารณ์ที่ยอดเยี่ยมดังต่อไปนี้

Boyd, Stephen, et al. "การเพิ่มประสิทธิภาพแบบกระจายและการเรียนรู้เชิงสถิติด้วยวิธีการสลับทิศทางของตัวคูณ" รากฐานและแนวโน้ม®ในการเรียนรู้ของเครื่อง 3.1 (2011): 1-122 http://www.stanford.edu/~boyd/papers/pdf/admm_distr_stats.pdf

ก่อนที่จะลงรายละเอียดฉันต้องการทราบว่านี่เป็นวิธีการ / อัลกอริทึมตอบไม่ใช่คำตอบรหัสที่มีอยู่ในทางปฏิบัติ - ถ้าคุณต้องการใช้วิธีนี้คุณจะต้องม้วนการใช้งานของคุณเอง

สูตร ADMM

โดยทั่วไปสมมติว่าคุณต้องการแก้

minxi|xi|s.t.Ax=b.

ปัญหาในการโพสต์ต้นฉบับตกอยู่ในหมวดหมู่นี้หลังจาก vectorization ที่เหมาะสม (นี่เป็นเพียงหลักการเท่านั้น - เราจะเห็นว่าการแปลงเป็นเวกเตอร์ไม่จำเป็นต้องดำเนินการในทางปฏิบัติ)

คุณสามารถแก้ปัญหาที่เทียบเท่าแทน ซึ่งมี Lagrangian

minx,zi|xi|+α2||xz||2+β2||Azb||2s.t.Az=b&x=z,
L(x,z,λ,γ)=i|xi|+α2||xz||2+β2||Azb||2+λT(Azb)+γT(xz)=i|xi|+α2||xz+1αγ||2+β2||Azb+1βλ||2+α2||1αγ||2+β2||1βλ||2.

วิธีการสลับทิศทางของตัวทวีคูณแก้ปัญหาคู่ ผ่านการไล่ระดับสีของตัวแปรสองตัวยกเว้น ไม่แน่นอนการสลับการประมาณการในปัญหาย่อยที่สอง นั่นคือการวนซ้ำ

maxλ,γminx,zL(x,z,λ,γ),
xk+1=argminxL(x,zk,λk,γk)zk+1=argminzL(xk+1,z,λk,γk)γk+1=γk+α(xk+1zk+1)λk+1=λk+β(Azk+1b).

ภายใต้เงื่อนไขที่ไม่แน่นอนบางประการเกี่ยวกับพารามิเตอร์และ (อธิบายไว้ในกระดาษ Boyd & Parikh ที่ลิงก์ด้านบน) วิธีการ ADMM จะรวมเข้ากับโซลูชันที่แท้จริง อัตราการคอนเวอร์เจนซ์เป็นแบบเชิงเส้นเนื่องจากเป็นวิธีการไล่ระดับสีที่แกนกลาง บ่อยครั้งที่สามารถเร่งความเร็วให้สุดยอดโดย 1) การเปลี่ยนพารามิเตอร์และตามการวิเคราะห์พฤติกรรมหรือ 2) โดยใช้การเร่งความเร็ว Nesterov สำหรับหมายเหตุเกี่ยวกับการเปลี่ยนพารามิเตอร์การลงโทษโปรดดูที่กระดาษสำรวจ Boyd และสำหรับการใช้การเร่งความเร็ว Nesterov ด้วย ADMM ดูกระดาษต่อไปนี้αβαβ

Goldstein, Tom, Brendan O'Donoghue และ Simon Setzer "วิธีการปรับทิศทางให้เร็วที่สุด" รายงาน CAM (2012): 12-35 ftp://ftp.math.ucla.edu/pub/camreport/cam12-35.pdf

อย่างไรก็ตามแม้ว่าอัตราการบรรจบโดยรวมเป็นเชิงเส้นเพียงอย่างเดียวสำหรับปัญหาวิธีการสังเกตพบว่ารูปแบบการกระจายอย่างรวดเร็วมากและจากนั้นมาบรรจบกันช้ากว่าค่าที่แน่นอน เนื่องจากการค้นหารูปแบบการกระจายเป็นส่วนที่ยากที่สุดนี่เป็นโชคดีมาก! เหตุผลที่แน่นอนว่าทำไมดูเหมือนจะเป็นพื้นที่ของการวิจัยในปัจจุบัน ทุกคนเห็นรูปแบบ sparsity มาบรรจบกันอย่างรวดเร็ว แต่ดูเหมือนไม่มีใครรู้ว่าทำไมมันถึงเกิดขึ้น ไม่นานมานี้ฉันถาม Boyd และ Parikh เกี่ยวกับเรื่องนี้ทางอีเมลและ Parikh คิดว่าอาจอธิบายได้ด้วยการตีความวิธีในบริบทของระบบควบคุม คำอธิบายปรากฏการณ์ฮิวริสติกอีกคำหนึ่งอยู่ในภาคผนวกของบทความต่อไปนี้l1

Goldstein, Tom และ Stanley Osher "วิธีการแบ่ง Bregman สำหรับปัญหาที่ทำให้เป็นมาตรฐาน L1" วารสารวิทยาศาสตร์การถ่ายภาพสยาม 2.2 (2552): 323-343 ftp://ftp.math.ucla.edu/pub/camreport/cam08-29.pdf

แน่นอนว่าความยากลำบากอยู่ที่การแก้ปัญหาย่อยและสำหรับสถานการณ์เฉพาะของคุณ เนื่องจาก Lagrangian เป็นกำลังสองใน , subproblem update เพียงแค่ต้องแก้ระบบเชิงเส้น subproblem ดูเหมือนยากเพราะมันเป็น nondifferentiable แต่ปรากฎว่ามีสูตรที่แน่นอนสำหรับการแก้ปัญหาที่สามารถนำมาใช้โดยองค์ประกอบองค์ประกอบ! ตอนนี้เราพูดถึงปัญหาย่อยเหล่านี้ในรายละเอียดเพิ่มเติมและระบุปัญหาในการโพสต์ต้นฉบับxzzzx

การตั้งค่าสำหรับโปรแกรมย่อย update (ระบบเชิงเส้น)z

สำหรับการอัปเดตเรามี z

argminzL(xk,z,λk,γk)=argminzα2||xz+1αγ||2+β2||Azb+1βλ||2.

สิ่งนี้จะทำให้คุณกลายเป็นปัญหาโดยเฉพาะ

argminZJ,ZBα2||Jk+1ZJ+1αΓJ||Fro2+α2||Bk+1ZB+1αΓB||Fro2+β2||MZJ+ZBYX+1αΛ||Fro2,

โดยที่หมายถึงบรรทัดฐานของ Frobenius (elementwise ) นี่คือปัญหาการลดกำลังสองที่ซึ่งเงื่อนไขการปรับให้เหมาะสมอันดับแรกสามารถพบได้โดยรับอนุพันธ์บางส่วนของวัตถุประสงค์ที่เกี่ยวข้องกับและและตั้งค่าเป็นศูนย์ นี่คือ ||||Frol2ZJZB

0=α2(Jk+1ZJ+1αΓJ)+β2MT(MZJ+ZBYX+1βΛ),0=α2(Bk+1ZB+1αΓB)+β2(MZJ+ZBYX+1βΛ)YT.

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

การแก้ปัญหาย่อยการอัพเดต (โซลูชัน thresholding การวิเคราะห์)x

ตอนนี้เราหันไปที่ subproblem x

argminxL(x,zk,λk,γk)=argminxi|xi|+α2||xzk+1αγk||2

สิ่งแรกที่เห็นคือผลรวมสามารถแยกองค์ประกอบตามองค์ประกอบ

i|xi|+α2||xzk+1αγk||2=i|xi|+α2i(xizik+1αγik)2,

ดังนั้นเราสามารถแก้ปัญหาองค์ประกอบการหาค่าเหมาะที่สุดโดยองค์ประกอบในแบบคู่ขนานทำให้ได้

xik+1=argminxi|xi|+α2(xizik+1αγik)2.

รูปแบบทั่วไปของสมการนี้คือ

mins|s|+α2(st)2.

ฟังก์ชันค่าสัมบูรณ์พยายามที่จะดึงจุดที่ดีที่สุดที่มีต่อในขณะที่ระยะกำลังสองพยายามที่จะดึงจุดที่ดีที่สุดที่มีต่อ tวิธีการแก้ปัญหาที่แท้จริงจึงอยู่ที่ไหนในส่วนระหว่างสองเพิ่มขึ้นพุ่งจะดึงจุดที่ดีที่สุดที่มีต่อและลดลงดึงจุดที่ดีที่สุดที่มีต่อ0s=0s=t[0,t)αtα0

นี่เป็นฟังก์ชั่นนูน แต่มันไม่สามารถหาอนุพันธ์ได้ที่ 0 เงื่อนไขสำหรับจุดที่ย่อเล็กสุดคือ subderivative ของวัตถุประสงค์ที่จุดนั้นมีศูนย์ คำที่เป็นกำลังสองมีอนุพันธ์และฟังก์ชันค่าสัมบูรณ์มีอนุพันธ์สำหรับ , subderivative ที่ตั้งค่าไว้เป็นช่วงเวลาเมื่อ , และอนุพันธ์สำหรับ . ดังนั้นเราจึงได้รับ subderivative สำหรับฟังก์ชั่นวัตถุประสงค์โดยรวม α(st)1s<0[1,1]s=01s>0

s(|s|+α2(st)2)={1+α(st)s>0[1,1]+αt,s=0,1+α(st),s<0.

จากนี้เราจะเห็นว่า subderivative ของวัตถุประสงค์ที่มีถ้าหาก , ในกรณีที่คือ minimizer ในทางกลับกันถ้าไม่ใช่ minimizer เราสามารถตั้งอนุพันธ์อันดับเดียวที่มีค่าเท่ากับศูนย์และแก้หา minimizer การทำเช่นนี้ทำให้ s=00|t|1αs=0s=0

argmins|s|+α2(st)2={t1α,t>1α,0,|t|1α,t+1α,t<1α

การระบุผลลัพธ์นี้อีกครั้งกับปัญหาจริงที่เราพยายามแก้ไขในคำถามเดิมโดยที่อัตราผลตอบแทน การอัพเดตสำหรับคือ t=Zijk1αΓijk

Jijk+1={Zijk1αΓijk1α,Zijk1αΓijk>1α,0,|Zijk1αΓijk|1α,Zijk1αΓijk+1α,Zijk1αΓijk<1α.
B
Bk+1=ZB1αΓB,

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

Schur สมบูรณ์สำหรับระบบZJ,ZB

ขั้นตอนที่มีค่าใช้จ่ายมากที่สุดในการทำซ้ำคือการแก้ปัญหาระบบ

0=α2(Jk+1ZJ+1αΓJ)+β2MT(MZJ+ZBYX+1βΛ),0=α2(Bk+1ZB+1αΓB)+β2(MZJ+ZBYX+1βΛ)YT.

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

ในสิ่งต่อไปนี้ตัวตนเกี่ยวกับ vectorization และผลิตภัณฑ์ Kronecker เป็นกุญแจสำคัญอย่างยิ่ง:

  • vec(ABC)=(CTA)vec(B),
  • (AB)(CD)=ACBD ,
  • (AB)1=A1B1และ
  • (AB)T=ATBT T

ตัวตนเหล่านี้มีอยู่ทุกครั้งที่ขนาดของเมทริกซ์และการกลับด้านเป็นไปได้ว่าแต่ละด้านของสมการเป็นนิพจน์ที่ถูกต้อง

รูปแบบเวกเตอร์ของระบบคือ

(αI+β[IMTM(YM)TYMYYTI])[vec(ZJ)vec(ZB)]=[vec(αJ+βMTX+ΓJMTΛ)vec(αB+βXYT+ΓBΛYT)],

หรือ

[I(αI+βMTM)β(YM)TβYM(αI+βYYT)I][vec(ZJ)vec(ZB)]=[vec(F)vec(G)],

โดยที่และย่อตัวอักษรทางด้านขวามือ ตอนนี้เราทำการเสริม block-gaussian-elimination / Schur เพื่อกำจัดส่วนล่างซ้ายของเมทริกซ์ในกระบวนการกลั่นตัวผลิตภัณฑ์ Kronecker นี่คือ FG

[I(αI+βMTM)β(YM)T0(αI+βYYT)Iβ2YYTM(αI+βMTM)1MT][vec(ZJ)vec(ZB)]=[vec(F)vec(G)βYM(αI+βMTM)1vec(F)].

Unvectorizing สองสมการที่เราต้องแก้ตามลำดับคือ

  1. ZB(αI+βYYT)(βM(αI+βMTM)1MT)ZB(βYYT)=GβM(αI+βMTM)1FYT
  2. (αI+βMTM)ZJ=FβMTZBY.

วิธีการแก้ปัญหาของระบบเติมเต็ม Schur เมื่อมีความกว้างและระดับสูงY,M

ในส่วนนี้เราแก้ปัญหาระบบ Schur complement สำหรับ (สมการ 1 ข้างต้น) โดยใช้การคำนวณSVD แบบเต็มล่วงหน้าของและใช้อัลกอริทึม Bartels-Stewart รุ่นดัดแปลงสำหรับ Sylvester สมการ อัลกอริทึมถูกปรับเปลี่ยนเล็กน้อยจากรุ่นมาตรฐานเป็นบัญชีสำหรับส่วนเสริมในเทอมที่สองซึ่งทำให้ไม่สมการของซิลเวสเตอร์ เมื่อพบผ่านสมการแรกสามารถพบได้จากสมการที่สองได้อย่างง่ายดาย สมการที่สองนั้นไม่สำคัญที่จะแก้ปัญหาด้วยวิธีใดก็ได้ที่คุณต้องการZBYYT,MMT,MTMβYYTZBZJ

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

วิธีการพัฒนาดังต่อไปนี้ ให้ แสดงว่า precomputed เต็มสลายตัวมูลค่าเอกพจน์และรวมตัวด้านขวามือจะเป็นHจากนั้นสมการแรกจะกลายเป็น ทวีคูณ โดยปัจจัย orthogonal เพื่อล้างออกทางซ้ายและขวาและการตั้งค่าใหม่ชั่วคราวที่ไม่รู้จักนี่จะกลายเป็น

QDQT=YYT,WΣWT=MMT,VTVT=MTM
H
ZBQ(αI+D)QTWβΣ(αI+Σ)1ΣWTZBQDQT=H.
A=WTZBQ
A(αI+D)βΣ(αI+Σ)1ΣAD=WHQT.

ตอนนี้เราสามารถหาโดยการแก้ระบบ แนวทแยงA

((αI+D)I+DβΣ(αI+Σ)1Σ)vec(A)=vec(WHQT).

เมื่อพบเราคำนวณและรู้ว่าเราแก้สมการที่สองข้างบนสำหรับซึ่งไม่สำคัญเพราะเรามีการแยกค่า eigenvalue สำหรับอยู่แล้วAZB=WAQTZBZJMTM

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

วิธีการแก้ปัญหาเมื่อเป็นรูปสี่เหลี่ยมผืนผ้ามากหรือมีการจัดอันดับที่ต่ำM,Y

ตอนนี้เราหันความสนใจไปที่การแก้ปัญหาหรือ จำกัด เงื่อนไขเมื่อใดก) เมทริกซ์การป้อนข้อมูลเป็นรูปสี่เหลี่ยมผืนผ้ามาก - หมายถึงพวกมันมีแถวมากกว่าคอลัมน์หรือในทางกลับกัน - หรือ b) พวกเขามีการประมาณอันดับต่ำ แหล่งที่มาด้านล่างเกี่ยวข้องกับการใช้สูตรวูดเบอรีส่วนประกอบ Schur และการผสมอื่น ๆ ที่คล้ายคลึงกันอย่างกว้างขวางZJ,ZBM,Y

เราเริ่มต้นด้วยระบบเติมเต็ม Schur ของเรา

(αI+βYYT)Iβ2YYTM(αI+βMTM)1MT.

กิจวัตรบางอย่างเปลี่ยนระบบนี้ให้อยู่ในรูปแบบสมมาตร

(αI+βIMMT+βYYTI)vec(ZB)=(I(I+βαMMT))vec(H).

ตอนนี้เรานำการประมาณอันดับต่ำมาใช้ ปล่อยให้ เป็น SVD ที่ลดลงหรืออันดับที่ต่ำกว่าของและ (เป็นตัวยึดตำแหน่งและไม่ใช่ ใช้) การแทนที่สิ่งเหล่านี้ในระบบของเราทำให้เมทริกซ์ผกผันต่อไปนี้ที่เราต้องการใช้

QD1/2Q2T=YWΣ1/2VT=M
YMQ2
(αI+βIWΣWT+βYYTI)1.

เนื่องจากเมทริกซ์ที่เราต้องสลับกลับเป็นการอัปเดตตัวตนระดับต่ำกลยุทธ์เชิงตรรกะคือพยายามใช้สูตรวูดเบอรี

(A+UCUT)1=A1A1U(C1+UTA1U)1UTA1.

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

(1αI+β[IWQI][IΣDY][IΣTQTI])1=αIβα2[IWQI][I(Σ1+βαI)βαQWTβαQTW(D1+βαI)Y]1[IΣTQTI].

แกนผกผันสามารถคำนวณได้ด้วยสูตรผกผันบล็อค 2x2, start

[ABBTC]1=[(ABC1BT)1A1B(CBTA1B)1C1BT(ABC1BT)1(CBTA1B)1].

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

(αI+βIMMT+βYYTI)1=1αIβα2(t11+s11+t12+s12+t21+s21+t22+s22),

โดยที่

t11=αβIWl1WTs11=(QWl1)D11(QTl1WT)t12=αβQh1QTWl1WTs12=(Qh1Wl1)D22(h1QTWT)t21=t12s21=(Qh1W)D22(h1QTl1WT)t22=αβQh1QTIs22=(Qh1W)D22(h1QTWT)D11=αβ(hIIl1)1D22=αβ(Ilh1I)1l=αβΣ1+Ih=αβD1+I.

ในรูปแบบนี้เราสามารถใช้ผกผันและหาคำศัพท์ตามคำศัพท์ผ่านแซนด์วิชการคูณเมทริกซ์ 8 ตัวทางซ้ายและขวา สูตรทั่วไปสำหรับการใช้ผลรวมของผลิตภัณฑ์ Kronecker คือ ZB

((A1B1)+(A2B2)+)vec(C)=vec(B1TCA1+B2TCA2+).

โปรดทราบว่าผู้รุกรานที่ชัดเจนที่เราลงท้ายด้วยเส้นทแยงมุมจึงไม่มีสิ่งใดที่จะ "แก้ไข"

รหัสตัวแก้ปัญหาเชิงเส้น

ฉันใช้สองตัวใน Matlab ดูเหมือนจะทำงานได้ดี รหัสแก้อยู่ที่นี่zJ,ZB

https://github.com/NickAlger/MeshADMM/blob/master/zkronsolve.m

สคริปต์ทดสอบสำหรับตรวจสอบว่านักแก้ปัญหาทำงานอยู่ที่นี่หรือไม่ นอกจากนี้ยังแสดงตัวอย่างวิธี calll รหัสตัวแก้

https://github.com/NickAlger/MeshADMM/blob/master/test_zkronsolve.m

สรุปข้อสังเกต

วิธีการประเภท ADMM นั้นเหมาะสมสำหรับปัญหาเช่นนี้ แต่คุณต้องยกเลิกการใช้งานของคุณเอง โครงสร้างโดยรวมของวิธีการนั้นค่อนข้างง่ายดังนั้นการนำไปใช้นั้นไม่ยากเกินไปในบางสิ่งอย่างเช่น MATLAB

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

แก้กลยุทธ์การนำเสนอที่มีประสิทธิภาพสูงถ้าเมทริกซ์ จำกัด มีทั้ง) หนาแน่น squareish และตำแหน่งสูงหรือข) มีดีอันดับต่ำประมาณ อีกแก้ประโยชน์ที่อาจจะเป็นเรื่องของการทำงานในอนาคตจะมีการแก้ที่ดีที่สุดสำหรับกรณีดังต่อไปนี้ - เมทริกซ์ จำกัดจะเบาบางและ squareish และอันดับสูง แต่มีอยู่ preconditioner ดีสำหรับ Tนี่อาจเป็นกรณีตัวอย่างเช่นเป็น Laplacian ที่ไม่ต่อเนื่องZJ,ZBMαI+MMTM


ใช้งานได้ทันที! ในการตรวจสอบเมทริกซ์แก้สำหรับและควรเป็นสมมาตร / บวกแน่นอนเนื่องจากมันมาจากกำลังสองน้อยใช่มั้ย สังเกตุนี้น่าจะเป็นจริง :-) ดังนั้น CG เป็นตัวเลือกที่ดีกว่า GMRES หรือไม่? ZBZJ
Justin Solomon

นอกจากนี้ฉันคิดว่าการอัปเดตสำหรับ B นั้นผิด ฉันทำงานผ่านรายละเอียดนี้มากกว่า แต่การเรียกคืน B ไม่ปรากฏในฟังก์ชันพลังงานของฉัน (ไม่ใช่เทอม) ดังนั้นฉันไม่แน่ใจว่าควรใช้ค่าเป็น ฉันกำลังคิดผิดเกี่ยวกับเรื่องนี้หรือไม่? ขอบคุณ! |B|±(11/α).
Justin Solomon

1
[errr ค่อนข้าง ]B=ZBΓB/α
Justin Solomon

3
! ที่น่าตื่นตาตื่นใจ หลังจากใส่สูตรของฉันเองสำหรับและ (อาจใกล้ / เทียบเท่ากับสิ่งที่คุณโพสต์ แต่มีบางอย่างที่ไม่ทำงาน) นี่เป็นวิธีที่ดีกว่าวิธี IRLS ขอบคุณ! JB
Justin Solomon

1
ข่าวดี. ดีใจมากที่เห็นว่าการมีส่วนร่วมที่นี่นำไปสู่ผลลัพธ์ที่แท้จริง
Michael Grant

5

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

ฉันไม่รู้แพ็คเกจการเพิ่มประสิทธิภาพเชิงพาณิชย์ใด ๆ ที่ใช้วิธีการจุดภายในแบบไม่มีเมทริกซ์ IPOPT ควรใช้วิธีการจุดภายในแบบไม่มีเมทริกซ์สำหรับการเขียนโปรแกรมแบบไม่เชิงเส้น แต่ฉันไม่สามารถติดตามการเรียก API ที่ให้คุณใช้งานได้

นอกจาก CVX คุณอาจใช้ GAMS หรือ AMPL เพื่อป้อนเมทริกซ์หนึ่งครั้งและตั้งค่าข้อ จำกัด ของคุณในภาษาการสร้างแบบจำลองเพื่อใช้เมทริกซ์นั้น อย่างไรก็ตามวิธีการที่ใช้โดย backend ของ Solver เพื่อ CVX, GAMS และ AMPL ไม่ได้ใช้ตัวแก้แบบปราศจากเมทริกซ์ ทั้งหมดจะต้องใช้เมทริกซ์สัมประสิทธิ์เต็มรูปแบบสำหรับโปรแกรมเชิงเส้นในรูปแบบมาตรฐานซึ่งจะมีขนาดใหญ่มาก (มันจะเป็นผลิตภัณฑ์ของโคร๊อกเคอร์ของเมทริกซ์) สิ่งที่อาจเกิดขึ้นคือคุณป้อนโปรแกรมเชิงเส้นของคุณในรูปแบบข้างต้นโดยใช้ภาษาการสร้างแบบจำลองจากนั้นภาษาการสร้างแบบจำลองจะแปลข้อมูลเป็นรูปแบบที่สามารถใช้งานได้โดยผู้แก้ไขแบ็กเอนด์ แบบฟอร์มนี้จะต้องมีการฝึกอบรมขนาดใหญ่และฉันสงสัยว่าคุณจะพบข้อผิดพลาดประเภทเดียวกัน (เว้นแต่คุณจะทำงานบนเครื่องที่มีหน่วยความจำเพียงพอ)


ดูเหมือนว่าฉันจะลองทุกสิ่งที่ถูกต้องแล้ว! ตอนแรกฉันทดลองกับ CVX และมันล้มเหลวดังนั้นฉันจึงเปลี่ยนเป็น IPOPT แต่ IPOPT ประสบปัญหาเดียวกัน ฉันไม่ทราบว่ามันมีตัวเลือกที่ปราศจากเมทริกซ์ดังนั้นฉันจะดูว่าฉันสามารถหาได้หรือไม่
Justin Solomon

ฉันไม่แน่ใจว่า GAMS / AMPL จะช่วยแก้ปัญหาของฉันได้ไหม ฉันยินดีที่จะเขียนโค้ดปัญหาในรูปแบบใดก็ตามที่จะช่วยให้นักแก้ปัญหาทำสิ่งที่ถูกต้อง แต่อย่างที่คุณบอกว่าเบื้องหลังการนำผลิตภัณฑ์ Kronecker ไปใช้งานไม่ได้
Justin Solomon

4

คุณสามารถซื้อ SVDs Geoffrey Irving เหล่านั้นได้ไหม? หากคุณสามารถฉันจะพิจารณาreweighted ซ้ำสองน้อยที่สุด (IRLS)วิธีการ วิธีนี้จะแก้ปัญหาของรูปแบบโดยที่คือเมทริกซ์น้ำหนัก

minimizeijWijJij2subject toMJ+BY=X
W

การทำซ้ำเริ่มต้นด้วยเป็นเมทริกซ์ที่ทุกคน; อัตราผลตอบแทนนี้เหมาะสม{(0)} การวนซ้ำดำเนินการกับโดยที่เป็นค่าคงที่ขนาดเล็กที่ป้องกันการหารด้วยศูนย์ ฉันไม่แน่ใจเกี่ยวกับเกณฑ์การบรรจบกันทั้งหมด แต่บางทีลิงก์ Wikipedia ที่ฉันเสนอไว้ด้านบนอาจให้การอ้างอิงแก่คุณได้W(0)J(0)

Wij(k+1)=|max{Jij(k),ϵ}|1
ϵ

คุณสามารถพิจารณาวิธีการสั่งซื้อครั้งแรกที่ราบรื่น TFOCS ซึ่งฉันร่วมเขียนสามารถจัดการสิ่งนี้ได้โดยใช้ตัวแก้ "smoothed conic dual" (SCD) แต่มันจะไม่ใช้งานง่ายนัก

หากคุณต้องการลองวิธีการตกแต่งภายในแบบไม่มีเมทริกซ์ให้อ่านงานของ Jacek Gondzio

แก้ไข: อืมมันอาจเป็นกรณีที่ IRLS จะไม่สามารถใช้ SVD เพื่อคำนวณโซลูชัน ถ้าเป็นเช่นนั้นฉันจะถอยกลับไปยังหนึ่งในตัวเลือกอื่น ๆ


1
ฉันไม่แน่ใจว่าฉันจะสามารถใช้ SVD ที่นี่ได้หรือไม่ แต่ IRLS เป็นแนวคิดที่ยอดเยี่ยมไม่ว่า! ความเร็วไม่ได้เป็นเรื่องที่น่ากังวลเท่าไหร่สำหรับหน่วยความจำและฉันใช้ IRLS ในการค้นคว้าที่เกี่ยวข้องเมื่อไม่กี่เดือนที่ผ่านมาและมันก็ใช้งานได้ดีมาก แม้ว่าจะไม่มี SVD สำหรับ IRLS แต่ก็สามารถทำได้โดยใช้ตัวแก้เชิงเส้นอย่าง CG ที่ไม่ต้องการระบบเต็มรูปแบบ ที่จริงแล้ว CG สามารถหยุดได้ด้วยข้อ จำกัด ที่ค่อนข้างหลวมก่อนที่จะปรับตามที่คุณแนะนำ ดูวิธี ADMM ด้วย แต่ฉันก็มีประสบการณ์น้อยกว่าด้วย Wij
Justin Solomon

ใช่ ADMM ก็ยอดเยี่ยมเช่นกัน ฉันเขียนส่วนหนึ่งขึ้นมาเพื่อแนะนำให้คุณกำจัด Y โดยสิ้นเชิง แต่ภายหลังฉันเห็นว่าไม่ใช่สแควร์ M
Michael Grant

1
ดำเนินกลยุทธ์ IRLS - มันลู่ แต่ตัวเลขไม่ได้ทำดีเกินไปตั้งแต่ระบบเชิงเส้นจะมีการแก้ปัญหาจะขอบคุณป่วยปรับอากาศที่หลากหลายของ 's; ใช้ GMRES เพื่อแก้ปัญหาระบบ จะลอง ADMM ต่อไป! w
Justin Solomon

2

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

ความเป็นไปได้อื่น: ใช้ตัวแก้ปัญหาที่อนุญาตให้เมทริกซ์ข้อ จำกัด ของคุณถูกจัดเก็บเป็นเมทริกซ์แบบเบาบาง สิ่งนี้จะยังคงต้องใช้หน่วยความจำมากกว่าสิ่งที่คุณต้องการ แต่น้อยกว่าถ้าคุณเก็บไว้เป็นเมทริกซ์หนาแน่น ใน CVX ถ้าคุณใช้kronคุณจะได้เมทริกซ์ที่กระจัดกระจายดังนั้นจึงเป็นเรื่องง่ายที่จะลองทำสิ่งนี้


ถ้า Python สะดวกกว่า MATLAB ไม่ว่าด้วยเหตุผลใดก็ตามก็มีcvxpyแม้ว่าจะไม่ขัดเหมือน cvx
k20

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

1
อย่างที่เจฟฟ์บอกว่าไม่มีเลเยอร์การสร้างแบบจำลองจะช่วยคุณได้ที่นี่ LP ผลลัพธ์จะมีข้อมูลซ้ำสำหรับตัวแก้ไขทั่วไปมาตรฐานใด ๆ ในการหลีกเลี่ยงสิ่งนี้คุณจะต้องใช้ (พัฒนา) ตัวแก้ฐานแบบ oracle เช่นตัวแก้ปัญหาซึ่งโดยหลักแล้วจะขึ้นอยู่กับการคืนค่าสำหรับค่าที่กำหนดของและ / หรือบางส่วน ตัดที่เหมาะสมแล้วทำงานกับคำอธิบายนั้นแทน MJ+BYXJ,Y
Johan Löfberg

ใช่ฉันประสบปัญหาอย่างที่เจฟฟ์กล่าวถึง อันที่จริงฉันใช้ CVX สำหรับการคาดเดาครั้งแรกของฉัน ฉันได้ลองโทร Gurobi โดยตรง แต่วิธีเดียวที่ฉันสามารถคิดได้ก็คือทำสิ่งที่ไม่คลี่คลายเหมือนกัน
Justin Solomon

1
ฉันคิดว่าคุณจะต้องม้วนตัวเอง
Johan Löfberg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.