Przegląd
Możesz wypróbować wariant metody mnożników alternatywnych kierunków (ADMM), która okazała się zaskakująco szybko problemów typu lasso . Strategia polega na sformułowaniu problemu za pomocą rozszerzonego Lagrangianu, a następnie przejściu gradientem na podwójny problem. Jest to szczególnie miłe w przypadku tego konkretnego problemu z regulacją ponieważ niepłaska część każdej iteracji metody ma dokładne rozwiązanie, które można po prostu ocenić element po elemencie, podczas gdy część gładka wymaga rozwiązania układu liniowego.l1l1
W tym poście my
- uzyskaj ogólną formułę ADMM w celu uogólnienia problemu,
- wyłapać podproblemy dla każdej iteracji ADMM i specjalizować je w swojej sytuacji, a następnie
- zbadania wynikowego układ liniowy, który musi być rozwiązany w każdej iteracji oraz opracowania szybkiego solver (lub przygotowującym) w oparciu o precomputing dekompozycji wartości własnej (lub niskich przybliżeń rangi ich) dla i .MTMYYT
- podsumuj kilkoma uwagami końcowymi
Większość wielkich pomysłów tutaj omówiono w następującym znakomitym artykule przeglądowym,
Boyd, Stephen i in. „Optymalizacja rozproszona i uczenie statystyczne za pomocą metody mnożników zmiennego kierunku”. Podstawy i trendy® w uczeniu maszynowym 3.1 (2011): 1-122. http://www.stanford.edu/~boyd/papers/pdf/admm_distr_stats.pdf
Zanim przejdę do szczegółów, chcę zauważyć, że jest to odpowiedź na metodę / algorytm, a nie praktyczna odpowiedź na istniejący kod - jeśli chcesz skorzystać z tej metody, musisz rzucić własną implementację.
Preparat ADMM
Ogólnie załóżmy, że chcesz rozwiązać
minxs.t.∑i|xi|Ax=b.
Problem z oryginalnym postem należy do tej kategorii po odpowiedniej wektoryzacji. (jest to tylko w zasadzie - zobaczymy, że wektoryzacja nie musi być wykonywana w praktyce)
Zamiast tego możesz rozwiązać równoważny problem,
który ma Lagrangian
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.
Metoda mnożników w naprzemiennym kierunku rozwiązuje podwójny problem,
poprzez wznoszenie gradientu na podwójnych zmiennych, z wyjątkiem niedokładne naprzemienne wyświetlanie podwójnych podproblemów. Tj. się iterację
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).
W pewnych łagodnych warunkach dla parametrów i (wyjaśnionych w powiązanym powyżej dokumencie Boyda i Parikha) metoda ADMM zbiegnie się z prawdziwym rozwiązaniem. Współczynnik zbieżności jest liniowy, ponieważ stanowi rdzeń metody wynurzania gradientowego. Często można go przyspieszyć, aby był superliniowy, 1) zmieniając parametry i miarę przechodzenia na podstawie heurystyki lub 2) stosując przyspieszenie Nesterowa. Uwagi na temat zmiany parametrów kary znajdują się w artykule z ankietą Boyda, a na temat korzystania z przyspieszenia Niestierowa z ADMM patrz następujący artykuł:αβαβ
Goldstein, Tom, Brendan O'Donoghue i Simon Setzer. „Szybkie metody optymalizacji naprzemiennego kierunku”. Raport CAM (2012): 12–35. ftp://ftp.math.ucla.edu/pub/camreport/cam12-35.pdf
Jednak nawet jeśli ogólny wskaźnik zbieżności jest tylko liniowy, w przypadku problemów z zaobserwowano metodę bardzo szybkiego znajdowania wzoru rzadkości, a następnie zbiegania się wolniej na dokładnych wartościach. Ponieważ znalezienie wzoru rzadkości jest najtrudniejszą częścią, jest to bardzo przypadkowe! Dokładne powody, dla których wydają się być obszarem obecnych badań. Wszyscy widzą, że wzór rzadkości zbiega się szybko, ale wydaje się, że nikt nie wie dokładnie, dlaczego tak się dzieje. Jakiś czas temu zapytałem o to Boyda i Parikha, a Parikh pomyślał, że można to wyjaśnić, interpretując metodę w kontekście systemów sterowania. Inne heurystyczne wyjaśnienie tego zjawiska znajduje się w załączniku do następującego artykułu:l1
Goldstein, Tom i Stanley Osher. „Podzielona metoda Bregmana dla problemów regulowanych przez L1”. SIAM Journal on Imaging Sciences 2.2 (2009): 323-343. ftp://ftp.math.ucla.edu/pub/camreport/cam08-29.pdf
Oczywiście teraz leży trudność w rozwiązywaniu i aktualizacji podproblemów do sytuacji konkretnego. Ponieważ Lagrangian jest kwadratowy w , podproblem aktualizacji wymaga po prostu rozwiązania układu liniowego. subproblem wydaje się trudniejsze, ponieważ jest nondifferentiable, ale okazuje się, że istnieje dokładny wzór na rozwiązanie, które można zastosować element po elemencie! Teraz omawiamy te podproblemy bardziej szczegółowo i określamy je dla problemu w oryginalnym poście.xzzzx
Konfiguracja podproblemu aktualizacji (system liniowy)z
Do aktualizacji mamy
z
argminzL(xk,z,λk,γk)=argminzα2||x−z+1αγ||2+β2||Az−b+1βλ||2.
Specjalizuje się w tym problemie:
argminZJ,ZBα2||Jk+1−ZJ+1αΓJ||2Fro+α2||Bk+1−ZB+1αΓB||2Fro+β2||MZJ+ZBY−X+1αΛ||2Fro,
gdzie oznacza normę Frobenius (elementwise ). Jest to kwadratowy problem minimalizacji, w którym warunki optymalności pierwszego rzędu można znaleźć, biorąc częściowe pochodne celu w odniesieniu do i i ustawiając je na zero. To jest,
||⋅||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.
Jak zauważono w komentarzach oryginalnego plakatu Justina Solomona, ten system dla jest symetryczny, więc gradient sprzężony jest idealną metodą bez matrycy. W dalszej części bardziej szczegółowo omówiono ten system i sposób jego rozwiązania / warunku wstępnego.ZJ,ZB
Rozwiązywanie problemu aktualizacja podproblemu (analityczne rozwiązanie progowania)x
Teraz do podproblemu ,
x
argminxL(x,zk,λk,γk)=argminx∑i|xi|+α2||x−zk+1αγk||2
Pierwszą rzeczą do zobaczenia jest to, że suma może być podzielona element po elemencie,
∑i|xi|+α2||x−zk+1αγk||2=∑i|xi|+α2∑i(xi−zki+1αγki)2,
Możemy więc rozwiązać problem optymalizacji element po elemencie równolegle, uzyskując
xk+1i=argminxi|xi|+α2(xi−zki+1αγki)2.
Ogólna postać tego równania to
mins|s|+α2(s−t)2.
Funkcja wartości bezwzględnej próbuje przyciągnąć optymalny punkt w kierunku , podczas gdy człon kwadratowy próbuje przyciągnąć optymalny punkt w kierunku . prawdziwe rozwiązanie leży więc gdzieś na segmencie między nimi, ze zwiększeniem zmierzającym do przyciągnięcia optymalnego punktu w kierunku , a zmniejszeniem przyciągającym optymalny punkt w kierunku .s=0s=t[0,t)αtα0
Jest to funkcja wypukła, ale nie można jej odróżnić od zera. Warunkiem punktu minimalizującego jest to, że sub pochodna celu w tym punkcie zawiera zero. Kwadratowy składnik ma pochodną , a funkcja wartości bezwzględnej ma pochodną dla , pochodną o ustalonej wartości jako przedział gdy , i pochodną dla . W ten sposób otrzymujemy pochodną dla ogólnej funkcji celu,
α(s−t)−1s<0[−1,1]s=01s>0
∂s(|s|+α2(s−t)2)=⎧⎩⎨1+α(s−t)[−1,1]+αt,−1+α(s−t),s>0s=0,s<0.
Z tego widzimy, że pochodna celu przy zawiera wtedy i tylko wtedy, gdy , w którym to przypadku jest minimalizatorem. Z drugiej strony, jeśli nie jest minimalizatorem, wówczas możemy ustawić pochodną jednowartościową równą zero i rozwiązać dla minimalizatora. Wykonanie tego daje
s=00|t|≤1αs=0s=0
argmins|s|+α2(s−t)2=⎧⎩⎨⎪⎪t−1α,0,t+1α,t>1α,|t|≤1α,t<−1α
Specjalizując ten wynik ponownie w prawdziwym problemie, który próbujemy rozwiązać w pierwotnym pytaniu, gdzie daje,
Aktualizacja dla to po prostu
t=Zkij−1αΓkij
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,
jak zauważono w oryginalnym plakacie Justina Solomona w komentarzach. Ogólnie rzecz biorąc, wykonanie aktualizacji dla wymaga tylko zapętlenia wpisów macierzy i oceny powyższych wzorów dla każdego wpisu.J,B
Uzupełnienie schura dla systemuZJ,ZB
Najdroższym krokiem iteracji jest rozwiązanie systemu,
00=−α2(Jk+1−ZJ+1αΓJ)+β2MT(MZJ+ZBY−X+1βΛ),=−α2(Bk+1−ZB+1αΓB)+β2(MZJ+ZBY−X+1βΛ)YT.
W tym celu warto trochę wysiłku skonstruować dobrego solvera / warunku wstępnego dla tego systemu. W tej sekcji robimy to poprzez wektoryzację , utworzenie dopełnienia Schur , wykonanie pewnych manipulacji produktem Krnoecker, a następnie cofnięcie wektoryzacji. Powstały układ dopełniacza Schura jest nieznacznie zmodyfikowanym równaniem Sylvester .
Poniższe dane dotyczące wektoryzacji i produktów Kronecker są absolutnie kluczowe:
- vec(ABC)=(CT⊗A)vec(B),
- (A⊗B)(C⊗D)=AC⊗BD ,
- (A⊗B)−1=A−1⊗B−1 , oraz
- (A⊗B)T=AT⊗BT .
Tożsamości te zachowują się zawsze, gdy rozmiary macierzy i odwracalność są takie, że każda strona równania jest prawidłowym wyrażeniem.
Wektoryzowana forma systemu to:
(αI+β[I⊗MTMY⊗M(Y⊗M)TYYT⊗I])[vec(ZJ)vec(ZB)]=[vec(αJ+βMTX+ΓJ−MTΛ)vec(αB+βXYT+ΓB−ΛYT)],
lub
[I⊗(αI+βMTM)βY⊗Mβ(Y⊗M)T(αI+βYYT)⊗I][vec(ZJ)vec(ZB)]=[vec(F)vec(G)],
gdzie i są skróconą notacją dla prawej strony. Teraz przeprowadzamy eliminację bloku-gaussa / eliminację Schura, aby wyeliminować lewy dolny blok matrycy w procesie kondensacji produktów Kroneckera. To jest,
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)].
Bez wektorowania dwa równania, które musimy rozwiązać kolejno, to:
ZB(αI+βYYT)−(βM(αI+βMTM)−1MT)ZB(βYYT)…=G−βM(αI+βMTM)−1FYT
(αI+βMTM)ZJ=F−βMTZBY.
Rozwiązanie układu dopełniacza Schur, gdy są kwadratowe, mają wysoką rangęY,M
W tej sekcji rozwiązujemy układ dopełniacza Schura dla (równanie 1. powyżej), stosując wstępnie obliczone pełne SVD macierzy i stosując zmodyfikowaną wersję algorytmu Bartelsa-Stewarta dla Sylvester równanie. Algorytm został nieco zmodyfikowany w stosunku do standardowej wersji, aby uwzględnić dodatkowy w drugim członie, co sprawia, że nie jest to równanie Sylvester. Po za pomocą pierwszego równania, można łatwo znaleźć z drugiego równania. Drugie równanie jest łatwe do rozwiązania za pomocą dowolnej metody.ZBYYT,MMT,MTMβYYTZBZJ
Ta metoda wymaga wstępnego obliczenia dwóch pełnych plików SVD przed rozpoczęciem procesu ADMM, ale szybko można ją zastosować w rzeczywistych iteracjach ADMM. Ponieważ metoda dotyczy pełnych SVD macierzy więzów, właściwe jest, gdy są one zbliżone do kwadratu i wysokiej rangi. Możliwa jest również bardziej skomplikowana metoda wykorzystująca SVD niskiej rangi, ale została przedstawiona w dalszej części.
Metoda rozwija się w następujący sposób. Niech
oznaczają Precomputed pełne dekompozycje wartości pojedyncze, i skroplenia prawą stronę za . Wtedy pierwszym równaniem jest:
Mnożenie przez czynniki ortogonalne, aby wyczyścić lewą i prawą stronę i ustawić nowy tymczasowy nieznany , to dalej staje się,
QDQT=YYT,WΣWT=MMT,VTVT=MTM
HZBQ(αI+D)QT−WβΣ(αI+Σ)−1ΣWTZBQDQT=H.
A=WTZBQA(αI+D)−βΣ(αI+Σ)−1ΣAD=WHQT.
Teraz możemy znaleźć , rozwiązując układ diagonalny ,
A
((αI+D)⊗I+D⊗βΣ(αI+Σ)−1Σ)vec(A)=vec(WHQT).
Po znalezieniu obliczamy i znając rozwiązujemy drugie równanie powyżej dla , co jest trywialne, ponieważ mamy już rozkład wartości własnej dla .AZB=WAQTZBZJMTM
Koszt początkowy polega na obliczeniu dwóch symetrycznych dodatnich określonych wartości własnych i , a następnie koszt za iterację dla pełnego rozwiązania jest zdominowany przez garstkę mnożenia macierzy-macierzy, która jest tego samego rzędu wielkość jako wykonanie 1 podrzędności CG. Jeśli początkowe dekompozycje wartości własnych są zbyt kosztowne, można je obliczyć niedokładnie, na przykład przez wcześniejsze zakończenie iteracji Lanczosa i utrzymanie największych wektorów własnych. Następnie metodę tę można zastosować jako dobry warunek wstępny dla CG, a nie jako bezpośredni solver.MTMYYT
Metoda rozwiązania, gdy są bardzo prostokątne lub mają przybliżenie niskiej rangiM,Y
Teraz zwracamy uwagę na rozwiązywanie lub kondycjonowanie gdy albo a) macierze wejściowe są bardzo prostokątne - co oznacza, że mają znacznie więcej wierszy niż kolumn lub odwrotnie - lub b) mają przybliżenie niskiej rangi. Poniższe wyprowadzenie obejmuje szerokie zastosowanie formuły Woodbury'ego, uzupełnienia Schura i innych podobnych manipulacji.ZJ,ZBM,Y
Zaczynamy od naszego systemu uzupełniającego Schur,
(αI+βYYT)⊗I−β2YYT⊗M(αI+βMTM)−1MT.
Kilka manipulacji przekształca ten system w bardziej symetryczną formę,
(αI+βI⊗MMT+βYYT⊗I)vec(ZB)=(I⊗(I+βαMMT))vec(H).
Teraz przybliżamy niskie rangi. Niech
będzie przybliżonym zmniejszeniem SVD lub przybliżeniem niskiego stopnia i ( jest symbolem zastępczym i nie jest używany). Podstawienie ich do naszego układu daje następującą macierz odwrotną, którą chcemy zastosować,
QD1/2QT2=YWΣ1/2VT=M
YMQ2(αI+βI⊗WΣWT+βYYT⊗I)−1.
Ponieważ macierz, którą mamy do odwrócenia, jest aktualizacją tożsamości niskiej rangi, logiczną strategią jest próba użycia formuły Woodbury'ego
(A+UCUT)−1=A−1−A−1U(C−1+UTA−1U)−1UTA−1.
Jednak należy zachować ostrożność, ponieważ elementy niskiej rangi i nie są ortogonalne. Tak więc, aby zastosować formułę Woodbury, zbieramy zarówno aktualizacje niskiej rangi w jedną dużą aktualizację. Zrób to i stosując formułę 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].
Odwrotność rdzenia można obliczyć według odwrotnej formuły odwrotnej 2x2,
[ABTBC]−1=[(A−BC−1BT)−1−C−1BT(A−BC−1BT)−1−A−1B(C−BTA−1B)−1(C−BTA−1B)−1].
Ten post jest już wystarczająco długi, więc oszczędzę obszernych szczegółów obliczeń, ale efekt końcowy jest taki, że podłączenie niezbędnych podmacierzy do odwrotnego bloku i pomnożenie wszystkiego przez to daje następującą jawną formę dla ogólnego odwrotności,
(αI+βI⊗MMT+βYYT⊗I)−1=1αI−βα2(t11+s11+t12+s12+t21+s21+t22+s22),
gdzie
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.
W tej formie możemy zastosować odwrotność i znaleźć po semestrze przez 8 lewych i prawych kanapek mnożenia macierzy. Ogólna formuła stosowania sumy produktów Kronecker to:
ZB
((A1⊗B1)+(A2⊗B2)+…)vec(C)=vec(BT1CA1+BT2CA2+…).
Zauważ, że wszystkie jawne odwrotności, na których się skończyliśmy, są ukośne, więc nie ma nic do „rozwiązania”.
Liniowy kod solvera
W Matlabie zaimplementowałem powyższe dwa . Wydaje się, że działa dobrze. Kod solvera jest tutaj.zJ,ZB
https://github.com/NickAlger/MeshADMM/blob/master/zkronsolve.m
Skrypt testowy do sprawdzania działania solverów jest tutaj. Pokazuje również przykładowo, jak wywołać kod solvera.
https://github.com/NickAlger/MeshADMM/blob/master/test_zkronsolve.m
Uwagi końcowe
Metody typu ADMM dobrze nadają się do takich problemów, ale konieczne byłoby wdrożenie własnej implementacji. Ogólna struktura metody jest dość prosta, więc implementacja nie jest zbyt trudna w czymś takim jak MATLAB.
Brakującym elementem tego postu, który należałoby określić, aby w pełni zdefiniować metodę problemu, jest wybór parametrów karnych . Na szczęście metoda jest ogólnie dość solidna, o ile wartości parametrów nie są szalone. W artykule Boyda i Parikha znajduje się sekcja o parametrach karnych, podobnie jak odniesienia do nich, ale po prostu eksperymentowałbym z tymi parametrami, aż uzyskasz rozsądne wskaźniki zbieżności.α,β
Przedstawione strategie solvera są wysoce skuteczne, jeśli macierze ograniczeń są albo a) gęste, kwadratowe i mają wysoką rangę, albo b) mają dobre przybliżenie niskiej rangi. Inną użyteczną Solver które mogą być temat pracy przyszłości będzie Solver zoptymalizowane w następnym przypadku - matryca ograniczenie jest niewielkie i squareish i wysoki stopień, ale istnieje dobra prekondycjonerze do . Byłoby tak, gdyby na przykład był zdyskretowanym Laplacianinem.ZJ,ZBMαI+MMTM