Coordinate Descent

Coordinate Descent#

This examples Synthesizes cyclic coordinate descent algorithms, continuing from the previous simulation and Analysis examples.

Two types of cyclic coordinate descent algorithms are the considered in this demonstration:

  1. Full Knowledge: the entire vector \(\nabla f(\beta_k)\) is known,

  2. Partial Knowledge: only the actively updated portion \([\nabla f(\beta_k)]^i\).

The reference coordinate descent algorithm in the prior examples is

\[\begin{align} \beta^{i(k)}_{k+1} = \beta^{i(k)}_{k} -\gamma \ [\nabla f(\beta_k)]^i. \end{align}\]

This reference algorithm has Partial Knowledge.

Synthesis is performed to design a \(c\)-block cyclic coordinate descent algorithm with respect to a function \(f \in S_{1, 2}\). Figure 1 plots the upper bounds on the convergence rate \(\rho\) as \(c\) increases. Algorithms with Partial Knowledge (orange, top) have a higher worst-case convergence rate when compared against algorithms with Full Knowledge (blue, bottom) at \(c>1\). The two synthesized algorithms are equal in the trivial case of \(c=1\).

../../_images/coord_synth_1_2_dark.png

Figure 1: Convergence rate of coordinate descent algorithm v.s. number of blocks#

../../_images/coord_synth_1_2_light.png

Figure 1: Convergence rate of coordinate descent algorithm v.s. number of blocks.#

Code for coordinate descent synthesis at \(m=1, L=2, c=6\)#
 1c=6; %blocksize 
 2
 3%symmetry generator/permutation matrix
 4M = circshift(eye(c), 1); 
 5
 6%define the objective function
 7m = 1; L = 2; 
 8
 9op1 = op_sml(m, L);
10
11op1.c = c; %enforce coordinate dimension
12
13%performs gradient operations, not prox
14config = opt_config();
15config.syn.D_mask = 0;
16
17%% Full Knowledge
18network = coordinate_descent_system(c);
19
20%form the system
21sys = opt_system_periodic_orbit(op1, network, [], M);
22
23man = opt_synthesis(sys, config);
24
25% %access to all parts of gradient
26sol = man.bisect();