{ "cells": [ { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Forward-Backward Splitting\n", "===================================\n", "\n", "$\\newcommand{\\dotp}[2]{\\langle #1, #2 \\rangle}$\n", "$\\newcommand{\\enscond}[2]{\\lbrace #1, #2 \\rbrace}$\n", "$\\newcommand{\\pd}[2]{ \\frac{ \\partial #1}{\\partial #2} }$\n", "$\\newcommand{\\umin}[1]{\\underset{#1}{\\min}\\;}$\n", "$\\newcommand{\\umax}[1]{\\underset{#1}{\\max}\\;}$\n", "$\\newcommand{\\umin}[1]{\\underset{#1}{\\min}\\;}$\n", "$\\newcommand{\\uargmin}[1]{\\underset{#1}{\\arg\\min}\\;}$\n", "$\\newcommand{\\norm}[1]{\\|#1\\|}$\n", "$\\newcommand{\\abs}[1]{\\left|#1\\right|}$\n", "$\\newcommand{\\choice}[1]{ \\left\\{ \\begin{array}{l} #1 \\end{array} \\right. }$\n", "$\\newcommand{\\pa}[1]{\\left(#1\\right)}$\n", "$\\newcommand{\\diag}[1]{{diag}\\left( #1 \\right)}$\n", "$\\newcommand{\\qandq}{\\quad\\text{and}\\quad}$\n", "$\\newcommand{\\qwhereq}{\\quad\\text{where}\\quad}$\n", "$\\newcommand{\\qifq}{ \\quad \\text{if} \\quad }$\n", "$\\newcommand{\\qarrq}{ \\quad \\Longrightarrow \\quad }$\n", "$\\newcommand{\\ZZ}{\\mathbb{Z}}$\n", "$\\newcommand{\\CC}{\\mathbb{C}}$\n", "$\\newcommand{\\RR}{\\mathbb{R}}$\n", "$\\newcommand{\\EE}{\\mathbb{E}}$\n", "$\\newcommand{\\Zz}{\\mathcal{Z}}$\n", "$\\newcommand{\\Ww}{\\mathcal{W}}$\n", "$\\newcommand{\\Vv}{\\mathcal{V}}$\n", "$\\newcommand{\\Nn}{\\mathcal{N}}$\n", "$\\newcommand{\\NN}{\\mathcal{N}}$\n", "$\\newcommand{\\Hh}{\\mathcal{H}}$\n", "$\\newcommand{\\Bb}{\\mathcal{B}}$\n", "$\\newcommand{\\Ee}{\\mathcal{E}}$\n", "$\\newcommand{\\Cc}{\\mathcal{C}}$\n", "$\\newcommand{\\Gg}{\\mathcal{G}}$\n", "$\\newcommand{\\Ss}{\\mathcal{S}}$\n", "$\\newcommand{\\Pp}{\\mathcal{P}}$\n", "$\\newcommand{\\Ff}{\\mathcal{F}}$\n", "$\\newcommand{\\Xx}{\\mathcal{X}}$\n", "$\\newcommand{\\Mm}{\\mathcal{M}}$\n", "$\\newcommand{\\Ii}{\\mathcal{I}}$\n", "$\\newcommand{\\Dd}{\\mathcal{D}}$\n", "$\\newcommand{\\Ll}{\\mathcal{L}}$\n", "$\\newcommand{\\Tt}{\\mathcal{T}}$\n", "$\\newcommand{\\si}{\\sigma}$\n", "$\\newcommand{\\al}{\\alpha}$\n", "$\\newcommand{\\la}{\\lambda}$\n", "$\\newcommand{\\ga}{\\gamma}$\n", "$\\newcommand{\\Ga}{\\Gamma}$\n", "$\\newcommand{\\La}{\\Lambda}$\n", "$\\newcommand{\\si}{\\sigma}$\n", "$\\newcommand{\\Si}{\\Sigma}$\n", "$\\newcommand{\\be}{\\beta}$\n", "$\\newcommand{\\de}{\\delta}$\n", "$\\newcommand{\\De}{\\Delta}$\n", "$\\newcommand{\\phi}{\\varphi}$\n", "$\\newcommand{\\th}{\\theta}$\n", "$\\newcommand{\\om}{\\omega}$\n", "$\\newcommand{\\Om}{\\Omega}$\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] } ], "source": [ "from __future__ import division\n", "%pylab inline\n", "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "This numerical tour presents the Forward-Backward (FB) algorithm to\n", "minimize the sum of a smooth and a simple function. It shows an\n", "application to sparse deconvolution." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Forward-Backward Algorithm\n", "--------------------------\n", "We consider the problem of minimizing the sum of two functions\n", "$$ E^\\star = \\umin{x \\in \\RR^N} E(x) = f(x) + g(x). $$\n", "\n", "So, we want to find a vector $x^\\star$ solution to the problem, i.e. a minimizer of $E=f+g$.\n", "\n", "\n", "We assume that $f$ is a $C^1$ function with $\\beta$-Lipschitz gradient.\n", "\n", "\n", "\n", "We also assume that $g$ is \"simple\", in the sense that one can compute exactly and quickly its proximity operator, which is defined as\n", "$$ \\text{prox}_{\\ga g}(x) = \\uargmin{y \\in \\RR^N} \\frac{1}{2}\\norm{x-y}^2 + \\ga g(y). $$\n", "for any $\\ga > 0$.\n", "\n", "\n", "The forward-backward algorithm reads, after initializing $x^{(0)} \\in \\RR^N$,\n", "$$ x^{(k+1)} = \\text{prox}_{\\ga g}\\pa{ x^{(k)} - \\ga \\nabla f( x^{(k)} ) }. $$\n", "\n", "\n", "If $0 < \\ga < 2/\\beta$, then this scheme converges to a minimizer of\n", "$f+g$.\n", "\n", "Sparse Regularization of Inverse Problems\n", "-----------------------------------------\n", "We consider a linear inverse problem\n", "$$ y = A x^\\sharp + w \\in \\RR^P$$\n", "where $x^\\sharp \\in \\RR^N$ is the (unknown) signal to recover, $w \\in\n", "\\RR^P$ is a noise vector, and $A \\in \\RR^{P \\times N}$ models the\n", "acquisition device.\n", "\n", "\n", "To recover an estimate of the signal $x^\\sharp$, we consider basis\n", "pursuit denoising, which makes use of the $\\ell^1$ norm as sparsity\n", "enforcing penalty:\n", "$$ \\umin{x \\in \\RR^N} \\frac{1}{2} \\norm{A x-y}^2 + \\la \\norm{x}_1, $$\n", "where the $\\ell^1$ norm is defined as\n", "$$ \\norm{x}_1 = \\sum_i \\abs{x_i}. $$\n", "\n", "\n", "The parameter $\\la$ should be set in accordance to the noise level\n", "$\\norm{w}$.\n", "\n", "\n", "This minimization problem can be cast in the form of minimizing $f+g$\n", "where\n", "$$ f(x) = \\frac{1}{2} \\norm{Ax-y}^2\n", "\\qandq g(x) = \\la \\norm{x}_1. $$\n", "\n", "\n", "$f$ is smooth; we have\n", "$$ \\nabla f(x) = A^* (A x - y), $$\n", "which is $\\beta$-Lipschitz continuous, with\n", "$$ \\beta = \\norm{ A^* A }. $$\n", "\n", "\n", "The $\\ell^1$-norm is \"simple\", because its proximal operator is soft\n", "thresholding:\n", "$$ \\big(\\text{prox}_{\\ga g}(x)\\big)_n = \\max\\pa{ 0, 1 - \\frac{\\la \\ga}{\\abs{x_n}} } x_n. $$\n", "\n", "Signal Deconvolution on Synthetic Sparse Data\n", "-----------------------------------------------------\n", "A simple linearized model of seismic acquisition considers a linear filtering\n", "operator (convolution):\n", "$$ A x = h \\ast x $$\n", "\n", "The filter $h$ is called the impulse response, or the poind spread function, of the acquisition process $x\\mapsto Ax$." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "N = 1024" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We define the width of the filter $h$." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "s = 5" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We define $h$ as the second derivative of a\n", "Gaussian." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "t = arange(-N/2,N/2)\n", "h = (1-t**2/s**2)*exp(-(t**2)/(2*s**2))\n", "h = h - h.mean()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We define the operator $A$. For simplicity, here periodic boundary conditions are used, so that the convolution is efficiently implemented as a product in Fourier domain." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "h_tf = fft.fft(fft.fftshift(h))\n", "opA = lambda u : real(fft.ifft(fft.fft(u) * h_tf))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We display the filter $h$ and its spectrum (amplitude of its Fourier transform)." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "(-100, 100)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "figsize(7,5)\n", "plot(t,h)\n", "xlim(-100,100)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot(t,fft.fftshift(abs(h_tf)))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We generate a synthetic sparse signal $x^\\sharp$, with only a small number of nonzero\n", "coefficients." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "random.seed(80) # we set the seed of the random number generator for reproducibility purpose." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "s = round(N*.01) # number of nonzero elements of xsharp\n", "sel = random.permutation(N)\n", "sel = sel[0:s] # indices of the nonzero elements of xsharp\n", "xsharp = zeros(N)\n", "xsharp[sel] = sign(randn(s)) * (1-0.3*rand(s))" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "noiselevel = 0.2" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Compute the measurements $y=A x^\\sharp + w$ where $w$ is a realization\n", "of white Gaussian noise." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "y = opA(xsharp) + noiselevel * randn(N)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzYAAAFFCAYAAAA+ZngHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGDRJREFUeJzt3X+w5WV9H/D3R1BBoTXWDios0WExakhabaKSNMnGqLCb\nFG0nP2TywzhCMk0Ek8l01LZTcfpHzR+Zhl1Hx27UEtui1jYO6rKGWmnt1KKOaEVBXVq6CwZMG42g\n0IJ++sc5C3cv9+6Pe8695z57X6+ZO/v9Pud7zvdz7z5zzn3f7/M83+ruAAAAjOwxiy4AAABgVoIN\nAAAwPMEGAAAYnmADAAAMT7ABAACGJ9gAAADDE2wAAIDhCTYAAMDwTl10AQCwkapqW5JKcnZ3f3LR\n9QAwH67YADB3VXVLVf3kBpznjqr6mRN82mOSPD3JS9ehJAAWxBUbAOauuy/YqFNNv07ES5O8Msn1\n8y8HgEURbADYaj6W5IYk5yy6EADmx1A0ANasql5fVXdW1beq6raq+ulp+x1V9eLp9vOr6ubpMe+v\nqvdV1T9d8hp3VNXvVdXnq+qbVfXeqnr89LE3VNWB6XO/WFWvmEPZ35vDawCwyQg2AKxJVf1Akt9O\n8iPd/VeSvCzJ/5o+3NNjHpfkT5K8K8n3Jbk2ySty5PCxTvILSS5K8swkP5zk16ePHUjyt6ev/+Yk\n/6qqnjqH8h+bZKOGywGwAQQbANbqu0ken+QHq+qx3X2wu//HsmNelOSU7t7T3d/t7j9J8qkVXmt3\nd9/d3d9I8qEkfzNJuvsD3X33dPv9Sb6a5AXHU1xVXVJVP1tVb6mqX66q91TVs5O8MMm/TXL+Gr5n\nADYpwQaANenuA0l+J8lVSe6pqmur6mnLDnt6kruWtR3KZLnlpe5esn1/kjOSpKp+bTqM7RtV9Y1M\nrrL8tWPVVlXnJvlSd38kk8UCPpLkfUkOJvlykksyCTcAnCQEGwDWrLuv7e6fSPL9mQwp+/1lh3wt\nydnL2s7N0Vcy6yQ9DSd7Mxnu9uTu/r4kt+TRoWilug5294GqOivJvd39ze7+cHd/p7s/392Huvum\n4/omARiCYAPAmlTVs6rqxdOJ/v83yQOZDE9b6pNJvltVr62qU6vq5Ul+9FgvPf16YiYT/f93ksdU\n1atznPNiqurZVfU3kuxK8p+nbbuO81sDYECCDQBr9fgk/yzJnyf5syRPSfLGpQd094NJ/l6S1yT5\n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\nSfLK6GPM5t2Z9I+lTqRPHZ5j//Ykr+nu8zOZn7/8NY/LojuoG3gyF919d3d/brp9X5JbM7ln0iVJ\nrpkedk2SV0y3X57k2u5+sLvvSHIgk/4IK6qqc5LsSvJHeWTBFP2Luaiqv5rkJ7r7Xclkjmp3/2X0\nMebnW5n8EfAJVXVqkidksrCTPsaadfcnknxjWfOJ9KkXVtXTkpzZ3Z+aHvfHS55zQhYdbNzAk7mb\n/lXqeUluSnJWd98zfeieJGdNt5+eSX87TN/jWP55kn+Q5HtL2vQv5uWZSf68qt5dVZ+tqr1V9cTo\nY8xJd/9Fkj9IcjCTQPPN7r4h+hjzd6J9ann7XVljX1t0sLFyAXNVVWck+XdJXtfd9y59rCcrZRyt\nz+mPrKiqfi7J17v75qyyvL3+xYxOTfL8JG/r7ucn+XamwzcO08eYRVWdl+R3kjwjk18kz6iqX1l6\njD7GvB1Hn5qrRQebu5JsW7K/LUcmNjhuVfXYTELNe7r7g9Pme6rqqdPHn5bk69P25X3vnGkbrOTH\nklxSVf8zybVJXlxV74n+xfzcmeTO7v70dP8DmQSdu/Ux5uRHkvzX7v4/09tx/PskF0YfY/5O5LPx\nzmn7Ocva19TXFh1sHr6BZ1U9LpMJRdctuCYGNJ189s4kX+ruP1zy0HVJXjXdflWSDy5pf2VVPa6q\nnpnk/CSfCqygu/9hd2/r7mdmMtn2P3b3r0b/Yk66++4kh6rqWdOmlyT5YpIPRR9jPm5L8qKqOn36\nmfmSTBZD0ceYtxP6bJy+/31ruhJkJfnVJc85IafOVvdsuvuhqjp8A89TkrzTDTxZox9P8itJ/ntV\n3Txte2OStyR5f1W9JskdSX4xSbr7S1X1/kze1B9K8lvtpk4cv8N9Rf9inq5I8q+nf+i7PcmrM/ls\n1MeYWXd/vqr+OJM/Kn8vyWeT/IskZ0YfY42q6tokP5XkKVV1KMk/ydo+G38ryb9Mcnomq0PuX1M9\n+igAADC6RQ9FAwAAmJlgAwAADE+wAQAAhifYAAAAwxNsAACA4Qk2AADA8AQbAABgeIINAAAwvP8P\neb97JyXyU2sAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "figsize(14,5)\n", "stem(sel,xsharp[sel])\n", "xlim(0,N-1)\n", "title('signal $x^\\sharp$')" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "figsize(14,5)\n", "plot(range(N),y)\n", "xlim(0,N-1)\n", "title('signal $y$')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Deconvolution\n", "---------------------------\n", "We now implement the foward-backward algorithm to recover an estimate of the sparse signal\n", "\n", "\n", "We define the regularization parameter $\\la$." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "Lambda = 3" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We define the proximity operator of $\\ga g$." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "def prox_gamma_g (x, gamma, Lambda) :\n", " return x - x/maximum(abs(x)/(Lambda*gamma),1) # soft-thresholding" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We define the gradient operator of $f$. Note that $A^*=A$ because the filter $h$ is symmetric." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "__Exercise__ \n", "\n", "Write the code of the function grad_f." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "grad_f = lambda x : # put your code here" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We define the Lipschitz constant $\\beta$ of $\\nabla f$." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "85.032184045506753" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "beta = abs(fft.fft(h)).max()**2\n", "beta" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We define the stepsize $\\ga$, which must be smaller than $2/\\beta$." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "gamma = 1.9 / beta" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We compute the solution of $\\ell_1$ deconvolution (basis pursuit denoising).\n", "We keep track of the energy $E_k=f(x^{(k)})+g(x^{(k)})$." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "__Exercise__ \n", "\n", "Write the code of the forward-backward iteration." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "nbiter = 2000\n", "x = y\n", "En_array = zeros(nbiter+1)\n", "En_array[0] = norm(opA(x) - y)**2/2 + Lambda*norm(x, ord=1)\n", "for iter in range(nbiter): # iter goes from 0 to nbiter-1\n", " # put your code here\n", " En_array[iter+1] = norm(opA(x) - y)**2/2 + Lambda*norm(x, ord=1) \n", "x_restored = x" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We display the result." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA7EAAAG0CAYAAADkcaDDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X+0pHddJ/j3xwRMQiLI6gGBzsISOMD06ooKtD/WFsGk\n7zqge8ZFdvwxOIme2aU7O+uOoJ6VeNaZA+zMjklcZ5gWPeg4wh51HNBOQ1R6dN3wa0UkkAgdZbsB\nCYozkobOGOSzf1S1uX373tu3b9Wtqqfq9TqnT9fzrae+z6e+T9X93vetp56nujsAAAAwBF8w7wIA\nAABgp4RYAAAABkOIBQAAYDCEWAAAAAZDiAUAAGAwhFgAAAAGQ4gFAABgMC6fdwHApauqfUkqyRO7\n+6551wMAALPik1gYpi9I8oQkL5x3IQAAMEtCLAzTC5P8RJLPzLsQAACYperuedcAXKKqekqSzyd5\nUnf/3rzrAQCAWfFJLAzT5+ddAAAAzIMQC8P1iCT7510EAADMkrMTw4Krqhcl+esk35Dk/UluSPLh\nJN+e5LfmWBoADN4W8+w/7u5751oYsCXfiYUFVlXXJnlkd5+sqv83yTcn+fokn0ry0SRP6O53zrNG\nABiqbebZ3+7uz86ohmcl2dfdb53F9mAZCLEwAFX1uCRv6u6D864FAJbNpPNsVT21u+/b5WMvS/Kv\nu/ulu3k8rCLfiYUFVlXPqKqvSLKW5HfGbWvzrQoAlsM05tnxFQNevNsauvuvkzy428fDKvKdWFhs\n35LkmiR/muSKqvq2jA4jBgAmt+k8W1V/P6PvyP5lkh9M8tQkX5XkizO6QsD7kjyvu/+PJM9J8jXj\nMPyZJAcy+trPZ8ePO9fP/5nkq8d9/HaSh8bbf2+Sq2bxZGFZCLGwwLr7tnnXAADLaqt5tqr+LMmz\nuvsHx8s/kuSnMwq8z87ok9tj49XfkeQZ3f2+qvq5JDd2919X1ZuS/NC5fqrq5zMKstck2Zfkv0/y\nD7r7bFV9/949S1g+Ex9OXFU/W1X3V9X7t1nntqr6cFW9r6q+ctJtAgBbq6obqure8dz7ii3WOVhV\n762qu6vqxIxLhEVXST69brmT3Nfdv5nk95L8YpKXrbsvVfW3kjwqySPH7Y8a/3+un8+v6+N94238\n9V49AVhmE5/Yqaq+IcmZJD/f3f/lJvevJXl5d69V1XOT3Nrdz5toowDApsYnifmjJC9I8rEk707y\n0u6+Z906j8noF/Hru/ujVfUl3f3ncykYFlBVfU+S70jy/d39p1X11CR/J6NDf786o/fP47v7TVX1\niCSvTfIrSe5P8k1JPpHR4cJfeq6fjA4ZPtfHHyW5Isn1GV3W5zVJ/rvu/sisniMM2VTOTlxVT07y\nli1C7L9M8vbuftN4+d4k39jd90+8YQDgPFV1IMmruvuG8fIrk6S7X71unf8ho1/Af2w+VQLA7s3i\n7MRPTHJ63fJHkzxpBtsFgFW02bz7xA3rPC3JY6vq7VX1nqr67plVBwATmtWJnWrD8gUf/1aVC9YC\nMFXdvXH+WQU7mU8fkdHJab45o0Mc76qqd3T3h9evZG4GYNqmMTfPIsR+LKMzsJ3zpHHbBVb0l40L\nVNUt3X3LvOtYFMbjfMbjYcbifMbjfCscwDbOu/ty4aW5Tif58+4+m+RsVf1Okq9I8uEN65mbx7y/\nzmc8zmc8HmYszmc8zjetuXkWhxO/Ocn3JElVPS/Jf/R9WADYM+9J8rSqenJVPTLJSzKai9f7d0m+\nvqouq6qrkjw3yQdnXCcA7MrEn8RW1S8l+cYkX1JVp5O8KqPDlNLdr+vuY1W1VlUnM7oA9Mu27g0e\nVrV/Ldl3JLnuGVWHnpecvq377mMXfyTA6uruz1XVy5O8NcllSV7f3fdU1Q+M739dd99bVceT/GFG\nl/042t1LEWIfnjuuuSJ54EFzB8DymTjEdvdLd7DOyyfdzoo5Me8C5m30S8iBW5Oj142G4+B/ntz0\n1Kr98cuI18c6J+ZdwII5Me8CWAzdfUeSOza0vW7D8j9N8k9nWddeO3/uOGdqc8eJCR+/bE7Mu4AF\nc2LeBSyQE/MuYMGcmHcBy2gql9iZhqpq37vhnKpDx5M7rr/wnrXj3ccOzb4iYGjMK5Mb2hiaOwAW\n27TmlVl8JxZ24ZorNm+/+srZ1gHAcJg7AFaBEMuCeuDBzdvPnJ1tHQAMh7kDYBUIsSyo07clN508\nv+3G+5JTt8+nHgAWn7kDYBX4TiwLa3SCjmsPJ8duSNaOJ6dud1InYKfMK5Mb4hiaOwAW17TmFSGW\nhVeV7o7XBnBJzCuTG/IYmjv2hksYAZOY1rwy8SV2AABYfnt8CSOAHfOdWAAAdmDfkfMDbDJavvbw\nfOoBVpVPYufE4TgAwLC4hBGwGITYOXA4DgAwPC5hBCwGhxPPhcNxAIChcQkjYDEIsXPhcBwAYFhG\n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\nhhALAADAYAixAAAADIYQCwAAwGAIsQAAAAyGEAsAADAjVfvXqg4dH90+dLxq/9q8axoaIRYAAGAG\nRoH1wK3JHdePWu64PjlwqyB7aYRYAACAmdh3JDl63fltR69Lrj08n3qGSYgFAACYiWuu2Lz96itn\nW8ewCbEAAAAz8cCDm7efOTvbOoZNiAUAAJiJ07clN508v+3G+5JTt8+nnmESYgEAAGag++5jyV03\nJ2vHRy1rx5N3HBm1s1PV3fOuIUlSVd3dNe86dqMq3Z1ta99qnZ08dtUZI5jcKr6PhjyvLIohj+HF\nXvPb3b+K75dLZYxgcqv4PprWvOKTWAAAAAZDiAUAAGAwhFgAAAAGQ4gFAABgMIRYAAAABkOIBQAA\nYDCEWAAAAAZDiAUAAGAwhFgAAAAGQ4gFAABgMIRYAAAABkOIBQAAYDCEWAAAAAZDiAUAAGAwhFgA\nAAAGQ4gFAABgMIRYAAAABkOIBQAAYDCEWAAAAAZj4hBbVTdU1b1V9eGqesUW69w2vv99VfWVk24T\nANiauRmAZTZRiK2qy5L8VJIbkjwryUur6pkb1llLcl13Py3J9yf5F5NsEwDYmrkZgGV3+YSPf06S\nk939kSSpqjcmeXGSe9at86Ikb0iS7n5nVT2mqh7X3fdv7Kzqa3rzEj83YZlbmbTvc49/9ya1n7tv\nq3W2e+ylbHsvLErflzpGe1n3NPrf7vHTrH1jX1v1PY1tLvqYr0LfF9vW5Um+MMmJVH3755MH7ks+\ncXP33cf2qEDmbwZzc7K476GLzR3nfvW5a3z/+m1NOjev72MvLELfux2jRah9M49K8tkkWz2VadW9\nWT87bZvmNqdF39v3f7HtPCqjzxJ/O1Xf/p+Sz9ydfPx/NTfv3KQh9olJTq9b/miS5+5gnScluWCi\nTK7asHxlkgeTPHLCMjczad8bH3/VJvc9eot1tnvsbrY9TYvS96WO0V7WPY3+t3v8NGvf2NdWfU9j\nm4s+5qvQ98W2dWWSL0rytPHyv60k1yUv+4Wq/d9tslxaezw3J4v7HrrY3HFlkkpydrz8n61bf9K5\nebPtT9Mi9L3bMVqE2jfzpUk+na0D7LTq3qyfnbZNc5vTou/t+9/4+/9GXzpe5/Hj5X/7yCTPTr7v\nZ6r232hu3plJQ+xO/wJXO3vcF21YvirJIy6toh2btO+Nj/+iTe7bap3tHrubbU/TovR9qWO0l3VP\no//tHj/N2jf2tVXf09jmoo/5KvR9sW1dlVGA/YkN7T/32GTtcBIT5XLa47k5Wdz30MXmjnOh69yv\nP49et/6kc/NmfUzTIvS92zFahNo384wk78voaJVp932xfnbaNs1tTou+t+//Ytt5xvj/jXPzz36Z\nuXnnJg2xH0uyb93yvoz+mrvdOk8at13gVfn1v7l9cPxvGDb+HnAp6+zksavOGMFk/vHf3Kq/ySlX\nXzmfWvZOVR3MkKaOvWNuTnLxuWO7+807F7cMY/TrF18Fpu7c687cPFG/3bv8ykeSqro8yR8l+eYk\nH0/yriQv7e571q2zluTl3b1WVc9L8pPd/bxN+urRH4H/9rrWqzL6nsJemLTv7R5/7r6t1tnLbU9q\nUfq+1Dr2su5p9L/+8W/J3r3ON27nJVv0vV09u9nWXliU1+Ii932x/bjVJ7FJsna8+9ihqZe4QKqq\nu3sZftO+JNOfm781e/tza6NJ+r7YY899EvvZdcuT/iy8lO0Pve/d1rAItW/mKzL6JDbZ+mfoNOre\n7HW2Wd/TfD0u6pgva9/r+7/YfvyK8f/m5klM9Elsd3+uql6e5K1JLkvy+u6+p6p+YHz/67r7WFWt\nVdXJJJ9J8rLte/30utsPZXRM+e6D9tYm7Xu7x5+7b6t19nLbk1qUvi+1jr2sexr9b3z8Xr3ON/b1\nl1v0vV09u93WtC3Ka3GR+77YfnwoyYeS/GjW/8U3+Xt/kZy6fQ8KZAFMf27+9Ib/k8V9D13ssQ/l\n4e/E9ibrP7DL7e50+5NYhL53W8Mi1L6Ze5P8p/G/ZPOfodOoe7Of1Zv1PY25eau+pknf2/d/sf14\nb0ZfZdg4N7/sT83NOzfRJ7HT9PAnsV+z4Z5FPkPZTs42u1dnhl3kcZlW35dax6KfKffhMzru7et8\n43Yu9hrcrJ5L3dZeWZTX4iL3fbH9eHmSKzI6E+IjOjlzX/KnK3F24lX9JHaaRnPzV2fvf25tNI2z\nE293f2X0i+b69d+d5MAE293p9ofe925rWITaN3Pu7MTvytY/Q6d5duL176Xtzk48ydy8sa+9oO/t\n+7/Yfjx3duKrkjzir5LPvD/5+I+Zmy+hn0ULsd1L8SUL2FJVehav851uZ1b1sLfsxwsJsZM7N4ar\n8PpahefI1szN7AX78ULTmpu/YBrFAAAAwCwIsQAAAAyGEAsAAMBgCLEAAAAMhhALAADAYAixAAAA\n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\nxv8Px1+i7W32KaAAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, (subfig1,subfig2) = subplots(1,2,figsize=(16,7)) # one figure with two horizontal subfigures\n", "subfig1.stem(xsharp)\n", "subfig2.stem(x_restored)\n", "subfig1.set_title('$x^\\sharp$')\n", "subfig2.set_title('$x_\\mathrm{restored}$')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We plot the relative error $(E_k-E^\\star)/(E_0-E^\\star)$ in log-scale with respect to $k$." ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot(log10((En_array[0:1800]-En_array[-1])/(En_array[0]-En_array[-1])))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Over-relaxed Forward-Backward\n", "-----------------------------\n", "It is possible to introduce a relaxation parameter $\\rho$ with $0 < \\rho < 1$. The over-relaxed foward-backward algorithm initializes $x^{(0)} \\in \\RR^N$,\n", "and then iterates, for $k=1,2,\\ldots$\n", "$$ z^{(k)} = \\text{prox}_{\\ga g}\\pa{\n", " x^{(k-1)} - \\ga \\nabla f( x^{(k-1)} ) }.\n", "$$\n", "$$ x^{(k)} = z^{(k)} +\n", " \\rho \\pa{ z^{(k)} - x^{(k-1)} } $$\n", "\n", "\n", "Let us assume $\\gamma=1/\\beta$. Convergence of the iterates $x^{(k)}$ and $z^{(k)}$ to a solution is guaranteed\n", "for $ 0 < \\rho < 1/2 $. The weaker property of convergence of $ E(x^{(k)}) $\n", "to $E^\\star$ is proved, when $ 1/2\\leq \\rho <1 $." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "__Exercise__ \n", "\n", "Write the code of the over-relaxed forward-backward iteration." ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "gamma = 1/beta\n", "nbiter = 1700\n", "rho = 0.95\n", "x = y\n", "En_array_overrelaxed = zeros(nbiter+1)\n", "En_array_overrelaxed[0] = norm(opA(x) - y)**2/2 + Lambda*norm(x, ord=1)\n", "for iter in range(nbiter): \n", " # put your code here\n", " En_array_overrelaxed[iter+1] = norm(opA(x) - y)**2/2 + Lambda*norm(x, ord=1) " ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot(log10((En_array[0:1800]-En_array[-1])/(En_array[0]-En_array[-1])))\n", "plot(log10((En_array_overrelaxed[0:1800]-En_array[-1])/(En_array[0]-En_array[-1])))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "As we see, in this example, over-relaxation does not bring any speedup, because $\\gamma$ is lower than without over-relaxation. There are other setting parameters or other problems, for which over-relaxation does bring a significant speedup. " ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "FISTA-like Accelerated Forward-Backward Algorithm\n", "---------------------------\n", "We consider the FISTA algorithm introduced in:\n", "\n", "\n", "A. Beck and M. Teboulle,\n", "\"A Fast Iterative Shrinkage-Thresholding Algorithm for Linear Inverse Problems\",\n", "_SIAM Journal on Imaging Sciences_, 2009.\n", "\n", "More precisely, we consider a slightly modified version of FISTA, whose convergence is proved, see\n", "A. Chambolle and C. Dossal, \"On the convergence of the iterates of \"FISTA\"\", preprint, 2015." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Given an initial estimate $x^{(0)}$ of the solution and a parameter $a>2$, the algorithm sets $\\gamma=1/\\beta$, sets $z^{(0)}=x^{(0)} \\in \\RR^N$,\n", "and iterates, for $k=1,2,\\ldots$\n", "$$ x^{(k)} = \\text{prox}_{\\ga g}\\pa{\n", " z^{(k-1)} - \\ga \\nabla f( z^{(k-1)} ) }.\n", "$$\n", "$$ \\alpha_k=(k-1)/(k+a) $$\n", "$$ z^{(k)} = x^{(k)} +\n", " \\alpha_k\n", " \\pa{ x^{(k)} - x^{(k-1)} } $$\n", "\n", "\n", "It is proved that the iterates $x^{(k)}$ converge to a solution $x^\\star$ of the problem. Moreover, \n", "the optimal convergence rate for this class of problems is reached,\n", "namely\n", "$$ E_k - E^\\star = O(1/k^2), $$\n", "whereas the convergence rate for the normal forward-backward is only\n", "$O(1/k)$.\n", "\n", "Note the difference between the over-relaxed forward-backward and the accelerated forward-backward: the later is based on an inertia mechanism, of different nature than over-relaxation." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "__Exercise__\n", "\n", "Write the code of the accelerated forward-backward iteration." ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "gamma = 1/beta\n", "nbiter = 1700\n", "a = 10\n", "x = y\n", "En_array_fista = zeros(nbiter+1)\n", "En_array_fista[0] = norm(opA(x) - y)**2/2 + Lambda*norm(x, ord=1)\n", "for iter in range(nbiter): \n", " # put your code here\n", " En_array_fista[iter+1] = norm(opA(x) - y)**2/2 + Lambda*norm(x, ord=1) " ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/condatl/anaconda/lib/python2.7/site-packages/IPython/kernel/__main__.py:3: RuntimeWarning: divide by zero encountered in log10\n", " app.launch_new_instance()\n", "/Users/condatl/anaconda/lib/python2.7/site-packages/IPython/kernel/__main__.py:3: RuntimeWarning: invalid value encountered in log10\n", " app.launch_new_instance()\n" ] }, { "data": { "text/plain": [ "[]" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot(log10((En_array[0:1800]-En_array[-1])/(En_array[0]-En_array[-1])))\n", "plot(log10((En_array_overrelaxed[0:1800]-En_array[-1])/(En_array[0]-En_array[-1])))\n", "plot(log10((En_array_fista[0:1800]-En_array[-1])/(En_array[0]-En_array[-1])))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "__Exercise__ \n", "\n", "Try different values of a. You can try a=3,10,30,50,100." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We can note that the accelerated forward-backward is not monotonic: the cost function E is not decreasing along with the iterations and some oscillations are present." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.4.5" } }, "nbformat": 4, "nbformat_minor": 0 }