Triple Momentum

Triple Momentum#

The Triple Momentum (TMM) algorithm is an explicit first-order accelerated method to optimize a function \(f \in S_{m, L}\) [1]. The worst-case linear convergence rate for the triple momentum scheme is \(\rho \leq 1 - \sqrt{\frac{m}{L}}\) .

The Triple Momentum method was extended to composite optimization in [2]. The composite triple momentum algorithm minimizes the sum of functions \(f_1 + f_2\) with \(f_1 \in S_{m, L}\) and \(f_2 \in S_{0, \infty}\), and maintains the worst-case convergence rate \(\rho \leq 1 - \sqrt{\frac{m}{L}}\).

Analysis is used to numerically verify the rate \(1 - \sqrt{\frac{m}{L}}\) using IQCs of order [1, 1]. Figure 1 plots the results of the a parameter sweep. The left plots are the computed upper bounds (solid) v.s. the true rate (dotted lines). The right plots are the error between the computed bounds and the true rate. The top plots report a sweep of \(m \in [0.0033 , 1]\) with \(L=1\). The bottom plots report a sweep of \(L \in [1, 1/0.0033]\) (\(L \in [1,303.0303]\)).

../../_images/tmm_ana_sweep_dark.png

Figure 2: Triple Momentum sweeps#

../../_images/tmm_ana_sweep_light.png

Figure 2: Triple Momentum sweeps#

The \(m\) sweep is more faithful to the true rate than the \(L\) sweep at high values of \(m = 1/L\), while the opposite is true for low values of \(m\).

Code for Triple Momentum analysis at \(m=1, L=10\)#
 1%define the operators
 2m = 1;L = 10;
 3op1= op_sml(m, L);
 4op2 = op_sml(0, inf);
 5ops = {op1, op2};
 6
 7%define the controller (unconstrained and constrained/composite)
 8K_uncon = tmm(m, L);
 9K_con = tmm_prox(m, L);
10
11%form the system
12sys_uncon = opt_system(op1, [], K_uncon);
13sys_con= opt_system(ops, [], K_con);
14
15%pose the analysis problem
16order = [1,1];
17
18man_uncon = opt_analysis(sys_uncon);
19man_con = opt_analysis(sys_con);
20
21%solve the analysis problem
22sol_uncon = man_uncon.bisect(order);
23sol_con = man_con.bisect(order);
24
25best_rho = 1 - sqrt(m/L);
26[best_rho, sol_uncon.rho, sol_con.rho]
27%0.6838    0.6838    0.6838
28 
29
30%% functions to generate algorithms
31function K = tmm(m, L)
32    %triple momentum algorithm
33    rho=1-1/sqrt(L/m);
34    al=(1+rho)/L;
35    be=rho^2/(2-rho);
36    ga=rho^2/((1+rho)*(2-rho));
37    A=[1+be -be;1 0];B=[-al;0];C=[1+ga -ga];
38    K = ss(A,B,C,0,1);
39end
40
41function K = tmm_prox(m, L)
42    %composite triple momentum
43    A = [(1.0 - sqrt(m / L)) / (1.0 + sqrt(m / L)),  2.0 * sqrt(m / L) / (1.0 + sqrt(m / L));
44        sqrt(m / L) * (1.0 - sqrt(m / L)) / (1.0 + sqrt(m / L)), 1.0 - sqrt(m / L) + 2.0 * m / L / (1.0 + sqrt(m / L))];
45
46    B = [-1.0 / L, -1.0 / L;
47        -1.0 / (sqrt(m / L) * L), -1.0 / (sqrt(m / L) * L)];
48    C = [    (1.0 - sqrt(m / L)) / (1.0 + sqrt(m / L)),2.0 * sqrt(m / L) / (1.0 + sqrt(m / L));   
49        sqrt(m / L) * (1.0 - sqrt(m / L)) / (1.0 + sqrt(m / L)),    1.0 - sqrt(m / L) + 2.0 * m / L / (1.0 + sqrt(m / L))];
50
51    D = [0.0, 0.0;
52        -1.0 / (sqrt(m / L) * L), -1.0 / (sqrt(m / L) * L)];
53
54    K = ss(A, B, C, D, 1);
55end
Code for Triple Momentum sweep analysis#
 1mlist = mlist(2:end);
 2rho = zeros(Nm, 2, 3);
 3
 4parfor i = 1:Nm
 5    for j = 1:2
 6        if j==1
 7            m = 1;
 8            L = 1/mlist(i);
 9        else
10            m = mlist(i);
11            L = 1;
12        end
13        
14        %define the operators
15        op1= op_sml(m, L);
16        op2 = op_sml(0, inf);
17        ops = {op1, op2};
18        
19        %define the controller (composite)              
20        K_uncon = tmm(m, L);
21        K_con = tmm_prox(m, L);
22        
23        %form the system
24        sys_uncon = opt_system(op1, [], K_uncon);
25        sys_con= opt_system(ops, [], K_con);
26        
27        
28        %pose and solve the problem
29        order = [1,1];
30        
31        man_uncon = opt_analysis(sys_uncon);
32        man_con = opt_analysis(sys_con);
33        
34        sol_uncon = man_uncon.bisect(order);
35        sol_con = man_con.bisect(order);
36    
37        best_rho = 1 - sqrt(m/L);
38    
39        rho(i,j,  :) = [sol_uncon.rho, sol_con.rho, best_rho];
40    end
41end
42
43%% plot the sweep
44figure(1)
45clf
46tiledlayout(2, 2)
47for j = 1:2
48nexttile
49hold on
50if j == 1
51    xla = "$m$";
52else
53    xla = "$1/L$";
54end
55plot(mlist, squeeze(rho(:, j,  1:2)), 'linewidth', 2)
56plot(mlist, squeeze(rho(:, j, 3)), '--', 'linewidth', 2, 'color', 0.5*[1,1,1]);
57xlabel(xla, 'interpreter', 'latex', 'fontsize', 16)
58ylabel('$\rho$', 'interpreter', 'latex', 'fontsize', 16)
59xlim([0, 1]);
60ylim([0, 1])
61if j ==1
62legend({'TMM', 'Composite TMM', '$1-\sqrt{m/L}$'}, 'location','northeast', 'interpreter', ...
63    'latex', 'fontsize', 16,'location', 'northeast')
64end
65nexttile
66hold on
67plot(mlist, squeeze(rho(:, j, 1:2)-rho(:, j, 3)), 'linewidth', 2)
68xlabel(xla, 'interpreter', 'latex', 'fontsize', 16)
69ylabel('$\rho - \left(1-\sqrt{m/L}\right)$', 'interpreter', 'latex', 'fontsize', 16)
70xlim([0, 1]);
71set(gca, 'yscale', 'log')
72end
73
74%% functions to generate algorithms
75function K = tmm(m, L)