Gambaran
Anda mungkin ingin mencoba varian dari Alternating Directions Method of Multipliers (ADMM), yang ternyata sangat cepat menyatu untuk masalah tipe laso . Strateginya adalah merumuskan masalah dengan Lagrangian yang diperbesar dan kemudian melakukan pendakian gradien pada masalah ganda. Ini sangat baik untuk masalah teregulasi l1 karena bagian yang tidak mulus dari setiap iterasi metode memiliki solusi yang tepat Anda hanya dapat mengevaluasi elemen demi elemen, sedangkan bagian yang halus melibatkan penyelesaian sistem linear.l 1l1l1
Dalam posting ini kita
- dapatkan formulasi ADMM keseluruhan untuk generalisasi masalah Anda,
- dapatkan subproblem untuk setiap iterasi ADMM dan khususkan mereka untuk situasi Anda, dan kemudian
- menyelidiki sistem linear yang dihasilkan bahwa kebutuhan untuk dipecahkan setiap iterasi, dan mengembangkan pemecah cepat (atau preconditioner) berdasarkan precomputing yang dekomposisi eigen (atau perkiraan peringkat rendah daripadanya) untuk dan .Y Y TMTMYYT
- merangkum dengan beberapa kata penutup
Sebagian besar ide besar di sini tercakup dalam makalah ulasan yang luar biasa berikut,
Boyd, Stephen, dkk. "Optimalisasi terdistribusi dan pembelajaran statistik melalui metode pengganda arah bergantian." Yayasan dan Tren® dalam Pembelajaran Mesin 3.1 (2011): 1-122. http://www.stanford.edu/~boyd/papers/pdf/admm_distr_stats.pdf
Sebelum masuk ke perincian, saya ingin mencatat bahwa ini adalah metode / jawaban algoritma bukan jawaban kode praktis yang ada - jika Anda ingin menggunakan metode ini, Anda perlu menggulung implementasi Anda sendiri.
Formulasi ADMM
Secara umum, misalkan Anda ingin menyelesaikan
minxs.t.∑i|xi|Ax=b.
Masalah dalam posting asli termasuk dalam kategori ini setelah vektorisasi yang sesuai. (ini hanya pada prinsipnya - kita akan melihat bahwa vektorisasi tidak perlu dilakukan dalam praktik)
Anda bisa menyelesaikan masalah yang setara,
yang memiliki bahasa Lagrangian
L(x,z,λ,γ)=
minx,zs.t.&∑i|xi|+α2||x−z||2+β2||Az−b||2Az=bx=z,
L(x,z,λ,γ)==∑i|xi|+α2||x−z||2+β2||Az−b||2+λT(Az−b)+γT(x−z)∑i|xi|+α2||x−z+1αγ||2+β2||Az−b+1βλ||2+α2||1αγ||2+β2||1βλ||2.
Metode arah bolak-balik dari pengganda memecahkan masalah ganda,
melalui kenaikan gradien pada variabel ganda, kecuali dengan proyeksi bolak-balik yang tidak tepat pada subproblem ganda. Yaitu, satu iterasi
x k + 1
maxλ,γminx,zL(x,z,λ,γ),
xk+1zk+1γk+1λk+1=argminxL(x,zk,λk,γk)=argminzL(xk+1,z,λk,γk)=γk+α(xk+1−zk+1)=λk+β(Azk+1−b).
Di bawah kondisi ringan tertentu pada parameter dan (dijelaskan dalam kertas Boyd & Parikh yang ditautkan di atas), metode ADMM akan menyatu dengan solusi yang sebenarnya. Tingkat konvergensi adalah linier, karena pada intinya metode kenaikan gradien. Seringkali dapat dipercepat menjadi superlinear dengan 1) mengubah parameter dan saat Anda menggunakan heuristik, atau 2) menggunakan akselerasi Nesterov. Untuk catatan tentang mengubah parameter penalti, lihat kertas survei Boyd, dan untuk menggunakan akselerasi Nesterov dengan ADMM, lihat kertas berikut,β α βαβαβ
Goldstein, Tom, Brendan O'Donoghue, dan Simon Setzer. "Metode optimasi arah bolak-balik cepat." Laporan CAM (2012): 12-35. ftp://ftp.math.ucla.edu/pub/camreport/cam12-35.pdf
Namun, bahkan jika keseluruhan tingkat konvergensi hanya linier, untuk masalah metode telah diamati untuk menemukan pola sparsity sangat cepat, dan kemudian bertemu lebih lambat pada nilai yang tepat. Karena menemukan pola sparsity adalah bagian tersulit, ini sangat kebetulan! Alasan tepatnya mengapa tampaknya menjadi bidang penelitian saat ini. Semua orang melihat pola sparsity berkumpul dengan cepat, tetapi tampaknya tidak ada yang tahu persis mengapa itu terjadi. Beberapa waktu yang lalu saya bertanya kepada Boyd dan Parikh tentang hal ini melalui email dan Parikh berpikir itu mungkin dijelaskan dengan menafsirkan metode ini dalam konteks sistem kontrol. Penjelasan heuristik lain dari fenomena ini ditemukan dalam lampiran makalah berikut,l1
Goldstein, Tom, dan Stanley Osher. "Metode Bregman split untuk masalah yang diatur L1." Jurnal SIAM tentang Ilmu Pencitraan 2.2 (2009): 323-343. ftp://ftp.math.ucla.edu/pub/camreport/cam08-29.pdf
Tentu saja sekarang kesulitannya terletak pada penyelesaian masalah pembaruan dan untuk situasi spesifik Anda. Karena Lagrangian adalah kuadrat dalam , subproblem pembaruan hanya membutuhkan penyelesaian sistem linear. The subproblem tampaknya sulit karena merupakan nondifferentiable, tapi ternyata ada sebuah formula yang tepat untuk solusi yang dapat diterapkan elemen dengan elemen! Kami sekarang mendiskusikan subproblem ini lebih terinci dan menentukannya untuk masalah di posting asli.z z z xxzzzx
Pengaturan untuk subproblem pembaruan (sistem linier)z
Untuk pembaruan , kami memiliki
a r g m i n z L ( x k , z , λ k , γ k ) = a r g m i n z αz
argminzL(xk,z,λk,γk)=argminzα2||x−z+1αγ||2+β2||Az−b+1βλ||2.
Khusus untuk masalah Anda, menjadi,
argminZJ,ZBα2||Jk+1−ZJ+1αΓJ||2Fro+α2||Bk+1−ZB+1αΓB||2Fro+β2||MZJ+ZBY−X+1αΛ||2Fro,
di mana menunjukkan norma Frobenius (elementwise ). Ini adalah masalah minimisasi kuadratik, di mana kondisi optimalitas orde pertama dapat ditemukan dengan mengambil turunan sebagian dari tujuan sehubungan dengan dan dan mengaturnya ke nol. Ini adalah,
l 2 Z J Z B 0||⋅||Frol2ZJZB
00=−α2(Jk+1−ZJ+1αΓJ)+β2MT(MZJ+ZBY−X+1βΛ),=−α2(Bk+1−ZB+1αΓB)+β2(MZJ+ZBY−X+1βΛ)YT.
Seperti dicatat dalam komentar oleh poster asli Justin Solomon, sistem ini untuk simetris sehingga gradien konjugat adalah metode bebas-matriks yang ideal. Bagian selanjutnya membahas sistem ini dan bagaimana menyelesaikan / memprakondisikannya secara lebih rinci.ZJ,ZB
Memecahkan pembaruan submasalah (solusi penetapan ambang analitik)x
Sekarang kita beralih ke subproblem ,
a r g m i n x L ( x , z k , λ k , γ k )x
argminxL(x,zk,λk,γk)=argminx∑i|xi|+α2||x−zk+1αγk||2
Hal pertama yang harus dilihat adalah jumlah dapat dipecah elemen demi elemen,
∑i|xi|+α2||x−zk+1αγk||2=∑i|xi|+α2∑i(xi−zki+1αγki)2,
Jadi kita dapat memecahkan elemen masalah optimasi dengan elemen secara paralel, menghasilkan
xk+1i=argminxi|xi|+α2(xi−zki+1αγki)2.
Bentuk umum persamaan ini adalah,
mins|s|+α2(s−t)2.
Fungsi nilai absolut mencoba menarik titik optimal ke arah , sedangkan istilah kuadrat mencoba menarik titik optimal ke arah . solusi sebenarnya karena itu terletak di suatu tempat di segmen antara keduanya, dengan peningkatan cenderung untuk menarik titik optimal ke arah , dan mengurangi menarik titik optimal ke .s = t [ 0s=0s=tα t α 0[0,t)αtα0
Ini adalah fungsi cembung tetapi tidak dapat dibedakan dengan nol. Kondisi untuk titik minimum adalah bahwa subderivatif tujuan pada titik tersebut mengandung nol. Istilah kuadrat memiliki turunan , dan fungsi nilai absolut memiliki turunan untuk , subderivatif bernilai-set sebagai interval ketika , dan turunan untuk . Dengan demikian kita mendapatkan subderivatif untuk fungsi objektif keseluruhan,
- 1 s < 0 [ - 1 , 1 ] s = 0 1 sα(s−t)−1s<0[−1,1]s=01∂ s ( | s | + αs>0
∂s(|s|+α2(s−t)2)=⎧⎩⎨1+α(s−t)[−1,1]+αt,−1+α(s−t),s>0s=0,s<0.
Dari sini kita melihat bahwa subderivatif tujuan pada berisi jika dan hanya jika , dalam hal ini adalah minimizer. Di sisi lain, jika bukan minimizer, maka kita dapat mengatur turunan bernilai tunggal sama dengan nol dan menyelesaikannya untuk minimizer. Melakukan ini menghasilkan,
0 | t | ≤ 1s=00 s=0s=0argmins| s| +α|t|≤1αs=0s=0
argmins|s|+α2(s−t)2=⎧⎩⎨⎪⎪t−1α,0,t+1α,t>1α,|t|≤1α,t<−1α
Mengkhususkan hasil ini lagi untuk masalah nyata yang kami coba pecahkan dalam pertanyaan awal di mana menghasilkan,
Pembaruan untuk hanyalah
J k + 1 i j ={ Z k i j - 1t=Zkij−1αΓkijBB
Jk+1ij=⎧⎩⎨⎪⎪⎪⎪Zkij−1αΓkij−1α,0,Zkij−1αΓkij+1α,Zkij−1αΓkij>1α,|Zkij−1αΓkij|≤1α,Zkij−1αΓkij<−1α.
BBk+1=ZB−1αΓB,
seperti dicatat oleh poster asli Justin Solomon dalam komentar. Secara keseluruhan, melakukan pembaruan untuk hanya membutuhkan perulangan melalui entri matriks Anda dan mengevaluasi formula di atas untuk setiap entri.J,B
Schur pelengkap untuk sistemZJ,ZB
Langkah iterasi yang paling mahal adalah menyelesaikan sistem,
00=−α2(Jk+1−ZJ+1αΓJ)+β2MT(MZJ+ZBY−X+1βΛ),=−α2(Bk+1−ZB+1αΓB)+β2(MZJ+ZBY−X+1βΛ)YT.
Untuk itu, perlu beberapa upaya untuk membangun pemecah / pengkondisi yang baik untuk sistem ini. Pada bagian ini kami melakukannya dengan membuat vektor , membentuk komplemen Schur , melakukan beberapa manipulasi produk Krnoecker dan kemudian membatalkannya. Sistem komplemen Schur yang dihasilkan adalah persamaan Sylvester yang sedikit dimodifikasi .
Dalam apa yang mengikuti identitas berikut tentang vektorisasi dan produk Kronecker benar-benar penting:
- vec(ABC)=(CT⊗A)vec(B),
- (A⊗B)(C⊗D)=AC⊗BD ,
- (A⊗B)−1=A−1⊗B−1 , dan
- (A⊗B)T=AT⊗BT .
Identitas ini berlaku setiap kali ukuran matriks dan keterbalikan sedemikian rupa sehingga setiap sisi persamaan adalah ekspresi yang valid.
Bentuk vektor dari sistem adalah,
(αI+β[I⊗MTMY⊗M(Y⊗M)TYYT⊗I])[vec(ZJ)vec(ZB)]=[vec(αJ+βMTX+ΓJ−MTΛ)vec(αB+βXYT+ΓB−ΛYT)],
atau,
[I⊗(αI+βMTM)βY⊗Mβ(Y⊗M)T(αI+βYYT)⊗I][vec(ZJ)vec(ZB)]=[vec(F)vec(G)],
di mana dan adalah notasi kental untuk sisi kanan. Sekarang kita melakukan komplemen block-gaussian-eliminasi / Schur untuk menghilangkan blok kiri bawah dari matriks, dalam proses kondensasi produk Kronecker. Ini adalah,
FG
[I⊗(αI+βMTM)0β(Y⊗M)T(αI+βYYT)⊗I−β2YYT⊗M(αI+βMTM)−1MT]…⋅[vec(ZJ)vec(ZB)]=[vec(F)vec(G)−βY⊗M(αI+βMTM)−1vec(F)].
Unvectorizing, dua persamaan yang harus kita pecahkan secara berurutan adalah,
ZB(αI+βYYT)−(βM(αI+βMTM)−1MT)ZB(βYYT)…=G−βM(αI+βMTM)−1FYT
(αI+βMTM)ZJ=F−βMTZBY.
Solusi sistem komplemen Schur ketika adalah kuadrat, peringkat tinggiY,M
Pada bagian ini kita memecahkan sistem komplemen Schur untuk (persamaan 1. di atas) dengan menggunakan SVD penuh yang sudah dikompilasi dari matriks dan menerapkan versi modifikasi dari algoritma Bartels-Stewart untuk Sylvester persamaan. Algoritma ini sedikit dimodifikasi dari versi standar untuk memperhitungkan ekstra pada istilah kedua, yang membuatnya tidak cukup dengan persamaan Sylvester. Setelah ditemukan melalui persamaan pertama, dapat ditemukan dari persamaan kedua dengan mudah. Persamaan kedua sepele untuk dipecahkan melalui metode apa pun yang Anda suka.ZBYYT,MMT,MTMβYYTZBZJ
Metode ini membutuhkan biaya dimuka untuk melakukan precompute dua SVD penuh sebelum proses ADMM dimulai, tetapi kemudian cepat untuk diterapkan dalam iterasi ADMM yang sebenarnya. Karena metode ini berkaitan dengan SVD penuh dari matriks kendala, itu sesuai ketika mereka dekat dengan kuadrat dan peringkat tinggi. Metode yang lebih rumit dengan menggunakan peringkat rendah SVD juga dimungkinkan, tetapi disajikan di bagian selanjutnya.
Metode ini berkembang sebagai berikut. Mari
masing menunjukkan precomputed penuh singular nilai dekomposisi, dan memadatkan sisi kanan menjadi . Kemudian persamaan pertama menjadi,
Mengalikan oleh faktor-faktor ortogonal untuk membersihkan sisi kiri dan kanan dan menetapkan sementara yang baru tidak diketahui , ini selanjutnya menjadi,
QDQT=YYT,WΣWT=MMT,VTVT=MTM
HZBQ(αI+D)QT−WβΣ(αI+Σ)−1ΣWTZBQDQT=H.
A=WTZBQA(αI+D)−βΣ(αI+Σ)−1ΣAD=WHQT.
Sekarang kita dapat menemukan dengan menyelesaikan sistem diagonal ,
A
((αI+D)⊗I+D⊗βΣ(αI+Σ)−1Σ)vec(A)=vec(WHQT).
Setelah menemukan , kita menghitung , dan mengetahui kita menyelesaikan persamaan kedua di atas untuk , yang sepele karena kita sudah memiliki dekomposisi nilai eigen untuk .AZB=WAQTZBZJMTM
Biaya di muka menghitung dua dekomposisi nilai eigen pasti simetris positif dan , dan kemudian biaya per iterasi untuk penyelesaian lengkap didominasi oleh beberapa perkalian matriks-matriks, yang berada pada urutan yang sama dari besarnya seperti melakukan 1 subiterasi CG. Jika dekomposisi nilai eigen dimuka terlalu mahal, maka mereka dapat dihitung secara tidak tepat dengan, misalnya, mengakhiri iterasi Lanczos lebih awal dan menjaga vektor eigen terbesar. Kemudian metode ini dapat digunakan sebagai prasyarat yang baik untuk CG daripada sebagai pemecah langsung.MTMYYT
Metode solusi ketika sangat persegi panjang atau memiliki perkiraan peringkat rendahM,Y
Sekarang kita mengalihkan perhatian kita untuk memecahkan atau ketika salah satu a) matriks input sangat persegi - artinya mereka memiliki lebih banyak baris daripada kolom atau sebaliknya - atau b) mereka memiliki perkiraan peringkat rendah. Derivasi di bawah ini melibatkan penggunaan ekstensif formula Woodbury, komplemen Schur, dan manipulasi serupa lainnya.ZJ,ZBM,Y
Kita mulai dengan sistem komplemen Schur kami,
(αI+βYYT)⊗I−β2YYT⊗M(αI+βMTM)−1MT.
Beberapa manipulasi mengubah sistem ini menjadi bentuk yang lebih simetris,
(αI+βI⊗MMT+βYYT⊗I)vec(ZB)=(I⊗(I+βαMMT))vec(H).
Sekarang kita membawa perkiraan peringkat rendah. Misalkan
menjadi perkiraan SVD yang dikurangi atau peringkat rendah dan ( adalah pengganti dan tidak bekas). Mengganti ini ke dalam sistem kami menghasilkan invers matriks berikut yang ingin kami terapkan,
QD1/2QT2=YWΣ1/2VT=M
YMQ2(αI+βI⊗WΣWT+βYYT⊗I)−1.
Karena matriks yang kita gunakan untuk membalikkan adalah pembaruan peringkat rendah untuk identitas, strategi logisnya adalah mencoba menggunakan rumus Woodbury,
(A+UCUT)−1=A−1−A−1U(C−1+UTA−1U)−1UTA−1.
Namun, beberapa kehati-hatian diperlukan karena potongan-potongan peringkat rendah dan tidak ortogonal. Jadi untuk menerapkan rumus Woodbury, kami mengumpulkan kedua pembaruan peringkat rendah menjadi satu pembaruan besar. Sambut dan menerapkan hasil rumus Woodbury,
I⊗WY⊗I
(1αI+β[I⊗WQ⊗I][I⊗ΣD⊗Y][I⊗ΣTQT⊗I])−1=αI−βα2[I⊗WQ⊗I][I⊗(Σ−1+βαI)βαQT⊗WβαQ⊗WT(D−1+βαI)⊗Y]−1[I⊗ΣTQT⊗I].
Inti invers dapat dihitung dengan rumus invers 2x2,
[ABTBC]−1=[(A−BC−1BT)−1−C−1BT(A−BC−1BT)−1−A−1B(C−BTA−1B)−1(C−BTA−1B)−1].
Posting ini sudah cukup panjang sehingga saya akan menyisihkan detail perhitungan yang panjang, tetapi hasil akhirnya adalah bahwa memasukkan submatrices yang diperlukan ke inversi blockwise dan mengalikan semuanya melalui menghasilkan bentuk eksplisit berikut untuk invers keseluruhan,
(αI+βI⊗MMT+βYYT⊗I)−1=1αI−βα2(t11+s11+t12+s12+t21+s21+t22+s22),
di mana
t11s11t12s12t21s21t22s22D11D22lh=αβI⊗Wl−1WT=(Q⊗Wl−1)D11(QT⊗l−1WT)=−αβQh−1QT⊗Wl−1WT=−(Qh−1⊗Wl−1)D22(h−1QT⊗WT)=t12=−(Qh−1⊗W)D22(h−1QT⊗l−1WT)=αβQh−1QT⊗I=(Qh−1⊗W)D22(h−1QT⊗WT)=αβ(h⊗I−I⊗l−1)−1=αβ(I⊗l−h−1⊗I)−1=αβΣ−1+I=αβD−1+I.
Dalam formulir ini, kita dapat menerapkan invers dan menemukan istilah per term melalui 8 sandwich multiplikasi matriks kiri dan kanan. Rumus umum untuk menerapkan jumlah produk Kronecker adalah,
ZB
((A1⊗B1)+(A2⊗B2)+…)vec(C)=vec(BT1CA1+BT2CA2+…).
Perhatikan bahwa semua invers eksplisit yang kami hasilkan adalah diagonal, jadi tidak ada yang harus "diselesaikan".
Kode pemecah linear
Saya mengimplementasikan dua di Matlab. Tampaknya bekerja dengan baik. Kode solver ada di sini.zJ,ZB
https://github.com/NickAlger/MeshADMM/blob/master/zkronsolve.m
Skrip uji untuk memeriksa apakah solver berfungsi ada di sini. Ini juga menunjukkan dengan contoh bagaimana memanggil kode solver.
https://github.com/NickAlger/MeshADMM/blob/master/test_zkronsolve.m
Komentar penutup
Metode tipe ADMM sangat cocok untuk masalah seperti ini, tetapi Anda harus menjalankan implementasi Anda sendiri. Struktur keseluruhan dari metode ini cukup sederhana sehingga implementasi tidak terlalu sulit dalam sesuatu seperti MATLAB.
Potongan yang hilang dari pos ini yang perlu ditentukan untuk sepenuhnya mendefinisikan metode untuk masalah Anda adalah pilihan parameter penalti . Untungnya metode ini umumnya cukup kuat asalkan parameter parameternya tidak gila. Makalah Boyd dan Parikh memiliki bagian tentang parameter penalti seperti referensi di dalamnya, tapi saya hanya akan bereksperimen dengan parameter sampai Anda mendapatkan tingkat konvergensi yang masuk akal.α,β
The strategi pemecah disajikan sangat efektif jika matriks kendala yang baik) padat, squareish, dan peringkat tinggi, atau b) memiliki pendekatan yang baik rendah peringkat. Solver lain yang berguna yang bisa menjadi topik pekerjaan di masa depan akan menjadi pemecah dioptimalkan untuk kasus berikut - matriks kendala jarang dan squareish dan peringkat tinggi, tetapi terdapat preconditioner baik untuk . Ini akan menjadi kasus jika, misalnya, adalah seorang Laplacian yang didiskritkan.ZJ,ZBMαI+MMTM