{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Randomized Algorithms for Linear Systems\n", "\n", "All the labs will be in the Julia language. Think of Julia as a language which is nearly as fast as C, while being as easy to work with as MATLAB. Presumably most of you have not worked with Julia before - do not worry about it, you will pick it up during the course. \n", "\n", "In this lab, the randomized iterative method of Gower and Richtarik for solving linear systems has been coded up for you. We are using the Julia notebook interface - the notebook is composed of three cell types: heading, markdown (containing text and LaTeX, such as this cell) and code (contaning actual Julia code that can be executed). You can execute each active \"cell\" by pressing the play button in the menu above, or by pressing \"shift + enter\". The cells in this notebook need to be executed in order.\n", "\n", "Play with the code and try to see what it does. There will be some exercices at the end. Do at least one - there will be no time to do (much) more than that in the lab. However, feel free to work on the other exercises at home." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Generate data\n", "\n", "We first generate an $m\\times n$ matrix $A$, then a random vector $x^*$ ($\\verb\"x_star\"$) and finally, set $b = A x^*$. This way we will know the system we have generated is consistent (i.e., that it has a solution).\n", "\n", "## 1.1 Silly synthetic data" ] }, { "cell_type": "code", "execution_count": 84, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1000x1 Array{Float64,2}:\n", " -0.153183\n", " -2.34837 \n", " -7.07596 \n", " 8.9659 \n", " 17.1319 \n", " -9.09333 \n", " -0.850716\n", " 11.3664 \n", " 2.15202 \n", " 11.7419 \n", " -3.82589 \n", " 4.54637 \n", " 8.67222 \n", " ⋮ \n", " 6.10183 \n", " 3.29236 \n", " -3.43715 \n", " -15.9092 \n", " -3.23675 \n", " -0.271846\n", " -9.24254 \n", " 7.46836 \n", " -6.5396 \n", " -6.30701 \n", " 3.54236 \n", " -7.0734 " ] }, "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ "srand(1) # set random seed to 1\n", "\n", "m = 1000\n", "n = 50\n", "\n", "# Generate random matrix A\n", "\n", "A = randn(m,n) # A has random standard normal entries. For uniform entries on [0,1], use rand() \n", "x_star = randn(n)\n", "b = A*x_star\n", "\n", "# Generate solution and the right hand side\n", "\n", "xopt = ones(n,1)\n", "b = A*xopt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.2 Smarter synthetic data (good for randomized Kaczmarz)\n", "\n", "We now generate a matrix $A\\in \\mathbb{R}^{m\\times n}$ such that the randomized Kaczmarz rate \n", "\n", "$$\\rho =1 - \\frac{\\lambda_{min}(A^TA)}{\\|A\\|_F^2} = 1 - \\frac{\\lambda_{min}(A^TA)}{Tr(A^TA)}$$ \n", "\n", "is under control. Specifically, we shall select the eigenvalues of $A^T A$ first, and then construct a random matrix $A\\in \\mathbb{R}^{m\\times n}$ whose spectrum is fixed this way.\n", "\n", "\n", "The trick is to assemble $A$ via its SVD (singular value decomposition): \n", "\n", "$$A = U D V^T,$$\n", "\n", "where $U\\in \\mathbb{R}^{m\\times m}$ and $V\\in \\mathbb{R}^{n \\times n}$ are orthonormal matrices and $D\\in \\mathbb{R}^{m\\times n}$ is diagonal (that is, $D_{ij}=0$ for $i\\neq j$). Note that given the SVD, we have \n", "\n", "$$A^T A = V D^T D V^T,$$ \n", "\n", "and hence the eigenvalues of $A^T A$ are $D_{ii}^2$ for $i=1,2,\\dots, \\min\\{m,n\\}$. Hence, \n", "\n", "$$\\rho = 1 - \\frac{\\min_i D_{ii}^2}{\\sum_{i} D_{ii}^2}.$$\n", "\n", "So, we first generate the eigenvalues $D_{ii}^2$, and then generate two random orthoginal matrices $U\\in \\mathbb{R}^{m\\times m}$ and $V\\in \\mathbb{R}^{n\\times n}$ by performing a QR decomposition of random matrices of appropriate sizes. After this, we simply assemble $A$ from these three components via $A = U D V^T$.\n" ] }, { "cell_type": "code", "execution_count": 75, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "rho = 0.9818054911530927\n" ] }, { "data": { "text/plain": [ "1000-element Array{Float64,1}:\n", " 2.59111 \n", " -0.556459 \n", " -0.17882 \n", " 0.402689 \n", " -0.278817 \n", " -2.70223 \n", " -0.263991 \n", " -2.0643 \n", " -0.179974 \n", " 1.89966 \n", " -2.52629 \n", " -3.90315 \n", " -1.5513 \n", " ⋮ \n", " -0.985235 \n", " 1.56159 \n", " 4.84442 \n", " -0.74797 \n", " 1.19115 \n", " 1.15037 \n", " -1.76833 \n", " -1.09004 \n", " -0.205697 \n", " 1.6215 \n", " -0.286106 \n", " -0.00876614" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "D = zeros(m,n)\n", "\n", "for i=1:min(m,n)\n", " \n", " D[i,i] = 10 + rand()\n", " \n", "end\n", "\n", "lambda_min = minimum(diag(D'*D))\n", "lambda_sum = sum(diag(D'*D))\n", "rho = 1- lambda_min/lambda_sum\n", "println(\"rho = \",rho)\n", "\n", "(U,RU) = qr(randn(m,m))\n", "(V,RV) = qr(randn(n,n))\n", "A = U*D*V'\n", "\n", "x_star = randn(n)\n", "b = A*x_star\n", "\n", "# C = A'*A\n", "# lambda_min = minimum(eigvals(C))\n", "# lambda_sum = sum(eigvals(C))\n", "# rate = 1 - lambda_min/tr\n", "# println(rate)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. The Generic Solver\n", "\n", "The two functions below implement the general version of the algorithm of Gower and Richtarik covered in the lecture today:\n", "\n", "$$ x \\leftarrow x - B^{-1} A^T S (S^T A B^{-1} A^T S)^\\dagger S^T (Ax-b). $$\n", "\n", "Recall that the general method has two parameters: an $n\\times n$ positive definite matrix $B$ defining a norm, and a random matrix $S$ defining the \"sketch\". Matrix $S$ has to have the right dimensions such that one can perform the following multiplication: $S^T A$. That is, $S$ has to have $m$ rows. However, it can have an arbitrary number of columns (one, more, or even random)." ] }, { "cell_type": "code", "execution_count": 83, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "RandomLinearSolve (generic function with 1 method)" ] }, "execution_count": 83, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function iterate(x, A, b, Binv, S)\n", " \n", " return x - Binv*A'*S*pinv(S'*A*Binv*A'*S)*S'*(A*x - b) # ' is the transpose operator, it has higher priority than *\n", " \n", "end\n", "\n", "\n", "function RandomLinearSolve(x, A, b, Binv, sampling, T, skip)\n", " \n", " (m,n) = size(A)\n", " xs = zeros(n, floor(Integer, T/skip) + 1) # will remember the iterates x here\n", " fv = zeros(floor(Integer, T/skip) + 1) # will remember residuals ||Ax-b|| here\n", " \n", " tic()\n", " time = 0\n", " \n", " for t=0:T\n", " tic()\n", " x = iterate(x, A, b, Binv, sampling()) # notice that the last argument is a function\n", " time = time + toq()\n", " if t % skip == 0\n", " xs[:,round(Int,t/skip)+1] = x # remember iterate x\n", " fv[round(Int,t/skip)+1] = norm(A*x-b) # remeber residual \n", " println(\"iteration: $(t), residual: $(fv[round(Int,t/skip+1)]) \")\n", " end\n", " end\n", " \n", " println(\"Time = \", time)\n", " return xs,fv\n", " \n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Sampling\n", "\n", "We now write a function which outputs a random matrix $S$ (\"sampling/sketching\") which is equal to a random coordinate vector in $\\mathbb{R}^m$ chosen uniformly at random. Recall that both the randomized Kaczmarz and randomized coordinate descent methods utilize this sampling/sketching. Also notice that standard randomized Kaczmarz uses nonuniform probabilities. \n", "\n", "${\\bf Problem:}$ You may want to modify the $\\verb\"sampling()\"$ function so that the probabilities are proportional to the squared norms of the rows of $A$ -- as initially proposed by Strohmer and Vershynin." ] }, { "cell_type": "code", "execution_count": 77, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "sampling (generic function with 1 method)" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function sampling() # for non-uniform sampling, looks into the function \"sample\" in the package StatsBase\n", " \n", " S = zeros(m)\n", " S[rand(1:m)] = 1 # rand(range) returns a random number in the given range\n", " return S\n", " \n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4. Plotting" ] }, { "cell_type": "code", "execution_count": 78, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "PlotResults (generic function with 1 method)" ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "using PyPlot\n", "\n", "function PlotResults(B, x_star, xs, fv)\n", " \n", " ax = axes()\n", " plt[:plot](skip*(0:length(fv)-1), fv, \"-\", linewidth=3.0, label=L\"||Ax - b||\")\n", " plt[:plot](skip*(0:length(fv)-1), [sqrt((xs[:,i]-x_star)'*B*(xs[:,i]-x_star)) for i=1:length(fv)] , \":\", linewidth=3.0, label=L\"||x - x^*||_B\")\n", " legend(loc=\"upper right\")\n", " ylabel(\"error\", fontsize=20)\n", " xlabel(\"iterations\")\n", " ax[:set_yscale](\"log\")\n", " plt[:show]\n", " \n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 5. Solve the problem" ] }, { "cell_type": "code", "execution_count": 82, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "iteration: 0, residual: 81.1318184147387 \n", "iteration: 100, residual: 28.061538029857452 \n", "iteration: 200, residual: 9.628608459636052 \n", "iteration: 300, residual: 3.458002696700712 \n", "iteration: 400, residual: 1.360105005354288 \n", "iteration: 500, residual: 0.6028422855792183 \n", "iteration: 600, residual: 0.18740359822190616 \n", "iteration: 700, residual: 0.07124850229391667 \n", "iteration: 800, residual: 0.023565613262080513 \n", "iteration: 900, residual: 0.0108018985173459 \n", "iteration: 1000, residual: 0.002734067263743863 \n", "iteration: 1100, residual: 0.0007288292014233471 \n", "iteration: 1200, residual: 0.00027077590111684955 \n", "iteration: 1300, residual: 8.308808574697304e-5 \n", "iteration: 1400, residual: 2.4203736115101168e-5 \n", "iteration: 1500, residual: 9.112723002839596e-6 \n", "iteration: 1600, residual: 3.519176341738644e-6 \n", "iteration: 1700, residual: 1.2569289075821847e-6 \n", "iteration: 1800, residual: 3.9096368662650536e-7 \n", "iteration: 1900, residual: 1.5709454959284916e-7 \n", "iteration: 2000, residual: 6.689231416177186e-8 \n", "iteration: 2100, residual: 2.9946875844287376e-8 \n", "iteration: 2200, residual: 1.02280957805594e-8 \n", "iteration: 2300, residual: 2.6012178416549056e-9 \n", "iteration: 2400, residual: 7.087720055832445e-10 \n", "iteration: 2500, residual: 2.772170220549675e-10 \n", "iteration: 2600, residual: 1.2018708704846946e-10 \n", "iteration: 2700, residual: 4.3137461704092176e-11 \n", "iteration: 2800, residual: 1.9253704965205233e-11 \n", "iteration: 2900, residual: 5.786641422056536e-12 \n", "iteration: 3000, residual: 2.584078128342829e-12 \n" ] }, { "data": { "image/png": "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", "text/plain": [ "Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "display_figs (generic function with 1 method)" ] }, "execution_count": 82, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = zeros(n) # initial iterate\n", "Binv = eye(n) # matrix B is one of the 2 parameters of the method\n", "\n", "T = 3*m # no of iterations \n", "skip = 100 # we shall remember x each \"skip\" number of iterations\n", "\n", "# Now we solve the problem\n", "xs, fv = RandomLinearSolve(x, A, b, Binv, sampling, T, skip)\n", "\n", "# Let us now plot the results\n", "B = inv(Binv)\n", "PlotResults(B, x_star, xs, fv)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem A\n", "\n", "Code up a dedicated randomized Kaczmarz solver. That is, do it in an efficient way so that one does not need to run the \"iterate\" function. Clearly, this function is rather inefficient - this is because it is so generic." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem B\n", "\n", "Code up a dedicated randomized coordinate descent solver. Test it on a random problem for which $A^T A$ is positive definite. Test the solver for two choices of probabilities: uniform and proportional to squared Euclidean norms of the columns of $A$, as covered in the lecture." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem C\n", "\n", "Code up the randomized Newton method. Do this for $S = I_{:C}$, where $C$ is a random subset of $\\{1,2,\\dots,n\\}$ of fixed cardinality $\\tau$ chosen uniformly at random. Test the method various choices of $\\tau$. Find a $3\\times 3$ matrix $A$ such that running the randomized Newton method with $\\tau=2$ is vastly (= as much as you want) better than running it with $\\tau=1$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem D\n", "\n", "Code up and test the Gaussian descent variant of the method." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem E\n", "\n", "Can you come up with some other interesting sketching matrix $S$ not covered in the lecture? When would you use it? " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Julia 0.3.11", "language": "julia", "name": "julia-0.3" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "0.3.11" } }, "nbformat": 4, "nbformat_minor": 0 }