Résolution du problème d'optimisation convexe utilisé pour le débruitage de haute qualité

8

La réponse la plus votée à cette question suggère que pour débruiter un signal tout en préservant des transitions nettes, il faut

minimiser la fonction objectif:

|xy|2+b|f(y)|

où est le signal bruyant, est le signal débruité, est le paramètre de régularisation etest une pénalité de norme L1. Le débruitage est accompli en trouvant la solution à ce problème d'optimisation, et dépend du niveau de bruit.xyb|f(y)|yb

Cependant, rien n'indique comment on pourrait accomplir cela dans la pratique, car cela pose un problème dans un espace de dimension très élevée, en particulier si le signal fait par exemple 10 millions d'échantillons. Dans la pratique, comment ce type de problème est-il résolu par calcul pour les signaux de grande taille?

John Robertson
la source
Êtes-vous préoccupé par le temps d'exécution? Sinon, la température sur la façon de minimiser une fonction est assez étendue (Levenberg-Marquardt, Nelder-Mead, etc. viennent à l'esprit). Il existe même des versions modifiées spécialement conçues pour cela.
thang
En fait, j'ai une question pour les personnes qui répondent ci-dessous. En plus d'être lent, qu'est-ce qui ne va pas avec quelque chose comme Levenberg-Marquardt ou Nelder-Mead? Ce sont des optimiseurs généralisés, de sorte que vous pouvez même approximer numériquement . f
thang
Oui, je suis préoccupé par le temps d'exécution, mais merci d'avoir signalé ces méthodes.
John Robertson

Réponses:

6

Boyd a un solveur Matlab pour les problèmes de moindres carrés régularisés à grande échelle ℓ1 . La formulation du problème est légèrement différente, mais la méthode peut être appliquée pour le problème.

L'approche classique de majoration-minimisation fonctionne également bien. Cela correspond à effectuer de façon itérative un seuillage progressif ( pour la télévision, l'écrêtage ).

Les solutions peuvent être vues à partir des liens. Cependant, il existe de nombreuses méthodes pour minimiser ces fonctions par l'utilisation extensive de la littérature d'optimisation.

PS: Comme mentionné dans d'autres commentaires, FISTA fonctionnera bien. Une autre famille d'algorithmes «très rapide» est celle des algorithmes primal-dual. Vous pouvez voir l' article intéressant de Chambolle pour un exemple, mais il existe une pléthore d'articles de recherche sur les méthodes primal-dual pour les formulations de problèmes inverses linéaires.

Deniz
la source
À quoi se réfère exactement «primal-dual»?
Spacey
Mohammad, je n'ai implémenté aucun algorithme primal-dual pour les problèmes inverses. Cependant, vous pouvez voir un exemple du lien que j'ai mentionné dans la réponse: le papier de Chambolle. Dans cet article, vous pouvez voir ce que signifie précisément un algorithme primal-dual. Ces méthodes fournissent juste une autre solution (et rapidement convergente) aux problèmes inverses.
Deniz
Je pensais que le dual primal est l'optimisation combinatoire? Comment pouvez-vous transformer ce problème de manière générique (pour un générique ) dans ce cadre? f
thang
merci, comme je l'ai mentionné précédemment, je ne suis pas un expert dans ce domaine. Vous pouvez voir le papier de Chambolle et voir comment les méthodes primal-dual peuvent être utilisées pour résoudre des problèmes comme ou la régularisation TV. 1
Deniz
4

Pour résoudre les problèmes d'optimisation avec la pénalité TV, nous utilisons un algorithme récemment proposé appelé Fast Gradient Based Algorithms for Constrained Total Variation Image Denoising and Deblurred Problems (FISTA) , qui a un meilleur taux de convergence que les méthodes itératives conventionnelles, telles que ASD-POCS.

chaohuang
la source
1
Est-il possible pour vous d'ajouter plus d'informations sur l'algorithme, puisque la seule référence que vous avez liée nécessite l'achat de l'article?
Jason R
@JasonR, Il s'agit essentiellement de l'accélération Nesterov de l' Proxopérateur. Un travail vraiment sympa.
Royi
3

Dans le cas particulier où , la fonction objectif peut s'écriref(y)=y1

xy2+by1=i(xiyi)2+bi|yi|,

la minimiser nécessite de minimiser chaque entrée de la somme:

yi^=argmin{(xiyi)2+b|yi|}

En utilisant des sous-différentielles, il est possible de montrer que le minimiseur est l'opérateur de seuillage progressif avec le seuil . C'est la méthode proposée par Donoho et Johnstone pour le débruitage du signal. Voir leur article Adaptation spatiale idéale par retrait en ondelettes pour plus de détails.b

Donc dans ce cas, je pense que vous n'avez pas besoin d'un solveur plus sophistiqué pour estimer votre signal.

Alejandro
la source
Vous avez une pénalité de norme plutôt qu'une pénalité de variation totale . Est-ce une faute de frappe? L1|yi||yi+1yi|
John Robertson
Dans la question, il est dit: "et | f (y) | est une pénalité de norme L1", donc je viens de brancher la norme , qui est le cas classique du débruitage du signal. Mais peut-être que je comprends mal la question. 1
Alejandro
Yah, cela aurait pu être plus clair. Dans cette citation, est une fonction sur l'ensemble du signal, pas nécessairement une fonction exécutée sur chaque composante du signal, c'est-à-dire que peut combiner différents échantillons de signaux, par exemple est parfaitement légitime. fff(x0,x1,...)=(x1x0,x2x1,...)
John Robertson
Je vois. J'ajouterai que ma réponse si pour le cas particulier où est la norme . f(y)1
Alejandro
2

Ajouté: si, les termes sont tous indépendants - comme le souligne @Alejandro, vous pouvez simplement minimiser chaque terme par lui-même. Il est plus intéressant de minimiser où au lieu de est destiné à pousser plusieurs à 0. Les notes suivantes sont pour ce cas. (J'appelle les variables , pas .)f(x)=1(x)=|xi|
Axb22+λx1
x1x2xi
xy


(Un an plus tard) un autre nom pour cela pour le cas norm est Elastic net regularization . Hastie et al., Elements of Statistical Learning p. 661 ff. discuter de cela pour la classification.f(x)=1

Une manière simple et rapide d'obtenir une solution approximative avec de nombreux est d'alternerxi=0

  1. minimiserpar des moindres carrésAxb
  2. rétrécir aka seuil doux: définir petit .xi=0

Il s'agit d'une forme de moindres carrés itérativement repondérés , avec des poids de 0 ou 1. Je m'attends à ce que les méthodes des articles cités dans les réponses précédentes donnent de meilleurs résultats; c'est simple.

(Lorsque vous minimisez une somme , c'est une bonne idée de tracer et sur une échelle log-log pour iter 1 2 3 ... Sinon, un terme risque de submerger l'autre, et vous ne le remarquerez même pas - surtout quand ils évoluent différemment.)f()+λg()f()λg()

denis
la source