CIL icon indicating copy to clipboard operation
CIL copied to clipboard

CIL operator norm uses power method with only 10 inner iternations

Open MargaretDuff opened this issue 1 year ago • 2 comments

When we use step_size=1/Lipschitz constant, and the CIL norm underestimates the norm, this leads to a larger step size and could cause issues with convergence.

Something to discuss with @epapoutsellis, @jakobsj and @paskino

MargaretDuff avatar Feb 13 '24 15:02 MargaretDuff

Discussed with @zeljkozeljko

Example

m, n = 900, 1000
 A =  np.random.normal(0, 1, (m, n))
 U, S, VT = np.linalg.svd(A, full_matrices=False)
 smallest_eigenval = 1e-2
 largest_eigenval = 1.
 Anew = U @ np.diag([(smallest_eigenval + (largest_eigenval-smallest_eigenval)*(1-j/(len(S)-1))) for j in range(len(S))]) @ VT
 Aop = MatrixOperator(Anew) 
print('cil norm {}, numpy norm {}'.format(Aop.norm()**2 ,np.linalg.norm(Anew, ord=2) ** 2))

MargaretDuff avatar Feb 13 '24 15:02 MargaretDuff

Suggestion: Perhaps when calculating the Lipschitz constant of least squares, we could use a larger iteration number for the power method?

MargaretDuff avatar Feb 13 '24 15:02 MargaretDuff