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:
Full Knowledge: the entire vector \(\nabla f(\beta_k)\) is known,
Partial Knowledge: only the actively updated portion \([\nabla f(\beta_k)]^i\).
The reference coordinate descent algorithm in the prior examples is
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\).
Figure 1: Convergence rate of coordinate descent algorithm v.s. number of blocks#
Figure 1: Convergence rate of coordinate descent algorithm v.s. number of blocks.#
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();