Aperçu
Vous voudrez peut-être essayer une variante de la méthode des multiplicateurs de directions alternées (ADMM), qui s'est avérée converger étonnamment rapidement pour les problèmes de type lasso. La stratégie consiste à formuler le problème avec un lagrangien augmenté puis à faire une ascension en gradient sur le problème dual. C'est particulièrement agréable pour ce problème régularisé particulier car la partie non lisse de chaque itération de la méthode a une solution exacte que vous pouvez simplement évaluer élément par élément, tandis que la partie lisse implique la résolution d'un système linéaire.l 1l1l1
Dans ce post, nous
- dériver une formulation ADMM globale pour une généralisation de votre problème,
- dériver les sous-problèmes pour chaque itération ADMM et les spécialiser dans votre situation, puis
- rechercher la résultante système linéaire qui doit être résolu chaque itération, et à développer un solveur rapide (ou préconditionneur) sur la base de précalculer les valeurs propres décompositions (ou des approximations de rang bas de ceux - ci) pour et .Y Y TMTMYYT
- résumer avec quelques remarques finales
La plupart des grandes idées ici sont couvertes dans le superbe article de synthèse suivant,
Boyd, Stephen et al. "Optimisation distribuée et apprentissage statistique via la méthode des multiplicateurs de direction alternée." Foundations and Trends® in Machine Learning 3.1 (2011): 1-122. http://www.stanford.edu/~boyd/papers/pdf/admm_distr_stats.pdf
Avant d'entrer dans les détails, je tiens à noter qu'il s'agit d'une réponse de méthode / algorithme et non d'une réponse de code existante pratique - si vous souhaitez utiliser cette méthode, vous devez lancer votre propre implémentation.
Formulation ADMM
En général, supposons que vous vouliez résoudre
minxs.t.∑i|xi|Ax=b.
Le problème dans le message d'origine tombe dans cette catégorie après une vectorisation appropriée. (ce n'est qu'en principe - on verra que la vectorisation n'a pas besoin d'être réalisée en pratique)
Vous pouvez à la place résoudre le problème équivalent,
qui a lagrangien
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.
La méthode de direction alternée des multiplicateurs résout le problème double,
par ascension en gradient sur les variables doubles, sauf avec projections alternées inexactes sur les sous-problèmes doubles. C'est-à-dire que l'on fait l'itération
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).
Dans certaines conditions douces sur les paramètres et (expliqués dans l'article Boyd & Parikh lié ci-dessus), la méthode ADMM convergera vers la vraie solution. Le taux de convergence est linéaire, car il s'agit au cœur d'une méthode de montée en gradient. Souvent, il peut être accéléré pour être super-linéaire en 1) modifiant les paramètres et fur et à mesure en fonction de l'heuristique, ou 2) en utilisant l'accélération de Nesterov. Pour des notes sur la modification des paramètres de pénalité, voir le document d'enquête Boyd, et pour utiliser l'accélération Nesterov avec ADMM, voir le document suivant,β α βαβαβ
Goldstein, Tom, Brendan O'Donoghue et Simon Setzer. "Méthodes d'optimisation rapide de la direction alternative." Rapport CAM (2012): 12-35. ftp://ftp.math.ucla.edu/pub/camreport/cam12-35.pdf
Cependant, même si le taux de convergence global n'est que linéaire, pour les problèmes , la méthode a été observée pour trouver le motif de rareté très rapidement, puis converger plus lentement sur les valeurs exactes. Étant donné que trouver le motif de rareté est la partie la plus difficile, c'est très fortuit! Les raisons exactes pourquoi semblent être un domaine de recherche actuel. Tout le monde voit le modèle de rareté converger rapidement, mais personne ne semble savoir exactement pourquoi cela se produit. Il y a quelque temps, j'ai interrogé Boyd et Parikh à ce sujet par courrier électronique et Parikh a pensé que cela pourrait être expliqué en interprétant la méthode dans un contexte de systèmes de contrôle. Une autre explication heuristique du phénomène se trouve en annexe de l'article suivant,l1
Goldstein, Tom et Stanley Osher. "La méthode split Bregman pour les problèmes régularisés en L1." SIAM Journal on Imaging Sciences 2.2 (2009): 323-343. ftp://ftp.math.ucla.edu/pub/camreport/cam08-29.pdf
Bien sûr, la difficulté réside maintenant dans la résolution des sous-problèmes de mise à jour et pour votre situation spécifique. Comme le lagrangien est quadratique en , le sous-problème de mise à jour nécessite simplement de résoudre un système linéaire. Le sous-problème semble plus difficile car il est non différenciable, mais il s'avère qu'il existe une formule exacte pour la solution qui peut être appliquée élément par élément! Nous discutons maintenant de ces sous-problèmes plus en détail et les spécifions au problème dans le message d'origine.z z z xxzzzx
Configuration du sous-problème de mise à jour (système linéaire)z
Pour la mise à jour , nous avons
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.
Spécialisé dans votre problème, cela devient,
argminZJ,ZBα2||Jk+1−ZJ+1αΓJ||2Fro+α2||Bk+1−ZB+1αΓB||2Fro+β2||MZJ+ZBY−X+1αΛ||2Fro,
où désigne la norme Frobenius (élément élément ). Il s'agit d'un problème de minimisation quadratique, où les conditions d'optimalité du premier ordre peuvent être trouvées en prenant des dérivées partielles de l'objectif par rapport à et et en les mettant à zéro. C'est-à-dire,
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.
Comme indiqué dans les commentaires de l'affiche originale Justin Solomon, ce système pour est symétrique, donc le gradient conjugué est une méthode sans matrice idéale. Une section ultérieure traite de ce système et comment le résoudre / le préconditionner plus en détail.ZJ,ZB
Résolution update sous - problème (solution de seuillage analytique)x
Passons maintenant au sous-problème ,
x
argminxL(x,zk,λk,γk)=argminx∑i|xi|+α2||x−zk+1αγk||2
La première chose à voir est que la somme peut être décomposée élément par élément,
∑i|xi|+α2||x−zk+1αγk||2=∑i|xi|+α2∑i(xi−zki+1αγki)2,
Nous pouvons donc résoudre le problème d'optimisation élément par élément en parallèle, donnant
xk+1i=argminxi|xi|+α2(xi−zki+1αγki)2.
La forme générale de cette équation est,
mins|s|+α2(s−t)2.
La fonction de valeur absolue tente de tirer le point optimal vers , tandis que le terme quadratique tente de tirer le point optimal vers . la vraie solution se situe donc quelque part sur le segment entre les deux, avec une augmentation de tendant à tirer le point optimal vers , et une diminution de tirant le point optimal vers .s=0s=t[0,t)αtα0
C'est une fonction convexe mais elle n'est pas différenciable à zéro. La condition pour un point de minimisation est que la sous-dérivée de l'objectif à ce point contienne zéro. Le terme quadratique a une dérivée et la fonction de valeur absolue a une dérivée pour , une sous-dérivée à valeur définie comme intervalle lorsque et la dérivée pour . Ainsi, nous obtenons la sous-dérivée de la fonction objectif globale,
α(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.
De cela, nous voyons que la sous-dérivée de l'objectif à contient si et seulement si , auquel cas est le minimiseur. D'un autre côté, si n'est pas le minimiseur, alors nous pouvons définir la dérivée à valeur unique égale à zéro et résoudre pour le minimiseur. Ce faisant,
s=00|t|≤1αs=0s=0
argmins|s|+α2(s−t)2=⎧⎩⎨⎪⎪t−1α,0,t+1α,t>1α,|t|≤1α,t<−1α
En spécialisant à nouveau ce résultat dans le problème réel que nous essayons de résoudre dans la question d'origine où donne,
La mise à jour de est simplement
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,
comme l'a noté l'affiche originale Justin Solomon dans les commentaires. Dans l'ensemble, faire la mise à jour pour nécessite simplement de parcourir les entrées de vos matrices et d'évaluer les formules ci-dessus pour chaque entrée.J,B
Complément de Schur pour le systèmeZJ,ZB
L'étape la plus coûteuse de l'itération est la résolution du système,
00=−α2(Jk+1−ZJ+1αΓJ)+β2MT(MZJ+ZBY−X+1βΛ),=−α2(Bk+1−ZB+1αΓB)+β2(MZJ+ZBY−X+1βΛ)YT.
À cette fin, il vaut la peine de construire un bon solveur / préconditionneur pour ce système. Dans cette section, nous le faisons en vectorisant , en formant un complément de Schur , en faisant quelques manipulations de produits Krnoecker puis en ne vectorisant pas. Le système de complément Schur résultant est une équation de Sylvester légèrement modifiée .
Dans ce qui suit, les identités suivantes concernant la vectorisation et les produits Kronecker sont absolument essentielles:
- vec(ABC)=(CT⊗A)vec(B),
- (A⊗B)(C⊗D)=AC⊗BD ,
- (A⊗B)−1=A−1⊗B−1 , et
- (A⊗B)T=AT⊗BT .
Ces identités sont valables chaque fois que les tailles de matrice et l'invertibilité sont telles que chaque côté de l'équation est une expression valide.
La forme vectorisée du système est,
(αI+β[I⊗MTMY⊗M(Y⊗M)TYYT⊗I])[vec(ZJ)vec(ZB)]=[vec(αJ+βMTX+ΓJ−MTΛ)vec(αB+βXYT+ΓB−ΛYT)],
ou,
[I⊗(αI+βMTM)βY⊗Mβ(Y⊗M)T(αI+βYYT)⊗I][vec(ZJ)vec(ZB)]=[vec(F)vec(G)],
où et sont des notations condensées pour le côté droit. Nous effectuons maintenant le complément élimination bloc-gaussien / Schur pour éliminer le bloc inférieur gauche de la matrice, dans le processus de condensation des produits Kronecker. C'est,
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)].
Sans vecteur, les deux équations que nous devons résoudre en séquence sont,
ZB(αI+βYYT)−(βM(αI+βMTM)−1MT)ZB(βYYT)…=G−βM(αI+βMTM)−1FYT
(αI+βMTM)ZJ=F−βMTZBY.
Solution du système du complément de Schur lorsque sont carrés, de haut rangY,M
Dans cette section, nous résolvons le système du complément de Schur pour (équation 1. ci-dessus) en utilisant des SVD complets précalculés des matrices et en appliquant une version modifiée de l'algorithme de Bartels-Stewart pour le Sylvester équation. L'algorithme est légèrement modifié par rapport à la version standard pour tenir compte de l'extra sur le deuxième terme, ce qui en fait pas tout à fait l'équation de Sylvester. Une fois que est trouvé via la première équation, peut être trouvé facilement à partir de la deuxième équation. La deuxième équation est triviale à résoudre via n'importe quelle méthode que vous aimez.ZBYYT,MMT,MTMβYYTZBZJ
Cette méthode nécessite un coût initial pour précalculer deux SVD complets avant le démarrage du processus ADMM, mais est ensuite rapide à appliquer dans les itérations ADMM réelles. Comme la méthode traite des SVD complètes des matrices de contraintes, elle est appropriée lorsqu'elles sont proches du rang carré et élevé. Une méthode plus compliquée utilisant des SVD de bas rang est également possible, mais est présentée dans une section ultérieure.
La méthode évolue comme suit. Soit
représentent précalculées Les décompositions de valeurs singulières complètes, et de condenser le côté droit d'être . Alors la première équation devient,
Multiplication par les facteurs orthogonaux pour effacer la gauche et la droite et définir une nouvelle inconnue temporaire , cela devient encore,
QDQT=YYT,WΣWT=MMT,VTVT=MTM
HZBQ(αI+D)QT−WβΣ(αI+Σ)−1ΣWTZBQDQT=H.
A=WTZBQA(αI+D)−βΣ(αI+Σ)−1ΣAD=WHQT.
Maintenant, nous pouvons trouver en résolvant le système diagonal ,
A
((αI+D)⊗I+D⊗βΣ(αI+Σ)−1Σ)vec(A)=vec(WHQT).
Après avoir trouvé , nous calculons , et connaissant nous résolvons la deuxième équation ci-dessus pour , ce qui est trivial puisque nous avons déjà la décomposition de valeurs propres pour .AZB=WAQTZBZJMTM
Le coût initial calcule deux décompositions de valeurs propres définies positives symétriques de et , puis le coût par itération pour une résolution complète est dominé par une poignée de multiplications matrice-matrice, qui est du même ordre de magnitude comme faisant 1 sous-titrage CG. Si les décompositions de valeurs propres initiales sont trop coûteuses, elles peuvent être calculées de manière inexacte, par exemple, en mettant fin à l' itération de Lanczos plus tôt et en conservant les plus grands vecteurs propres. Ensuite, la méthode peut être utilisée comme un bon préconditionneur pour CG plutôt que comme un solveur direct.MTMYYT
Méthode de la solution lorsque sont très rectangulaires ou ont une approximation de bas rangM,Y
Maintenant, nous tournons notre attention vers la résolution ou le préconditionnement des lorsque a) les matrices d'entrée sont très rectangulaires - ce qui signifie qu'elles ont beaucoup plus de lignes que de colonnes ou vice versa - ou b) qu'elles ont une approximation de bas rang. La dérivation ci-dessous implique une utilisation intensive de la formule de Woodbury, du complément de Schur et d'autres manipulations similaires.ZJ,ZBM,Y
Nous commençons avec notre système de complément Schur,
(αI+βYYT)⊗I−β2YYT⊗M(αI+βMTM)−1MT.
Quelques manipulations transforment ce système en une forme plus symétrique,
(αI+βI⊗MMT+βYYT⊗I)vec(ZB)=(I⊗(I+βαMMT))vec(H).
Maintenant, nous apportons les approximations de bas rang. Soit
soit les SVD réduits ou les approximations de bas rang de et ( est un espace réservé et n'est pas utilisé). La substitution de ceux-ci dans notre système donne l'inverse de matrice suivant que nous souhaitons appliquer,
QD1/2QT2=YWΣ1/2VT=M
YMQ2(αI+βI⊗WΣWT+βYYT⊗I)−1.
Puisque la matrice que nous devons inverser est une mise à jour de bas rang de l'identité, la stratégie logique consiste à essayer d'utiliser la formule de Woodbury,
(A+UCUT)−1=A−1−A−1U(C−1+UTA−1U)−1UTA−1.
Cependant, un certain soin est nécessaire car les morceaux de bas rang et ne sont pas orthogonaux. Ainsi, pour appliquer la formule de Woodbury, nous collectons les deux mises à jour de bas rang en une seule grande mise à jour. Doint ainsi et en appliquant les rendements de formule Woodbury,
Y ⊗ II⊗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].
L'inverse du noyau peut être calculé par la formule inverse 2x2 par blocs,
[ABTBC]−1=[(A−BC−1BT)−1−C−1BT(A−BC−1BT)−1−A−1B(C−BTA−1B)−1(C−BTA−1B)−1].
Ce message est déjà assez long, donc je vais épargner les longs détails du calcul, mais le résultat final est que le fait de brancher les sous-matrices nécessaires dans l'inverse du bloc et de tout multiplier donne la forme explicite suivante pour l'inverse global,
(αI+βI⊗MMT+βYYT⊗I)−1=1αI−βα2(t11+s11+t12+s12+t21+s21+t22+s22),
où
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.
Sous cette forme, nous pouvons appliquer l'inverse et trouver terme par terme à travers 8 sandwichs de multiplication de matrice gauche et droite. La formule générale pour appliquer la somme des produits Kronecker est,
ZB
((A1⊗B1)+(A2⊗B2)+…)vec(C)=vec(BT1CA1+BT2CA2+…).
Notez que tous les inverses explicites avec lesquels nous nous sommes retrouvés sont diagonaux, il n'y a donc rien à "résoudre".
Code de solveur linéaire
J'ai implémenté les deux solveurs ci-dessus dans Matlab. Ils semblent bien fonctionner. Le code du solveur est ici.zJ,ZB
https://github.com/NickAlger/MeshADMM/blob/master/zkronsolve.m
Un script de test pour vérifier que les solveurs fonctionnent est ici. Il montre également par exemple comment appeler le code du solveur.
https://github.com/NickAlger/MeshADMM/blob/master/test_zkronsolve.m
Remarques finales
Les méthodes de type ADMM sont bien adaptées à des problèmes comme celui-ci, mais vous devrez rouler votre propre implémentation. La structure globale de la méthode est assez simple, donc l'implémentation n'est pas trop difficile dans quelque chose comme MATLAB.
La pièce manquante de ce message qui devrait être spécifiée pour définir complètement la méthode pour votre problème est un choix de paramètres de pénalité . Heureusement, la méthode est généralement assez robuste tant que les valeurs des paramètres ne sont pas folles. Le document Boyd et Parikh contient une section sur les paramètres de pénalité, tout comme les références, mais je voudrais simplement expérimenter les paramètres jusqu'à ce que vous obteniez des taux de convergence raisonnables.α,β
Les présentées sont très efficaces si les matrices de contraintes sont soit a) denses, carrées et de rang élevé, soit b) ont une bonne approximation de bas rang. Un autre solveur utile qui pourrait être un sujet de travaux futurs serait un solveur optimisé pour le cas suivant - la matrice de contrainte est clairsemée et squareish et un rang élevé, mais il existe un bon préconditionneur pour . Ce serait le cas si, par exemple, est un Laplacien discrétisé.ZJ,ZBMαI+MMTM