学习优化的时候论文经常会提到类似概念

发现了一个讲的比较详细的答案

Rate of convergence

简单来说,如果 x_n\\rightarrow L,那么写出如下分式形式极限:

\\lim_{n\\rightarrow \\infty}\\frac{\\|x_{n+1}-L\\|}{\\|x_n-L\\|}=\\mu

若极限存在且 \\mu\\in(0,1) ,那么就称其为线性收敛(linear convergence),也称Q-linear convergence,因为上述形式为分式Quotient形式。此处所谓线性,是指误差取对数后,随迭代步数呈线性,实际上误差是指数收敛。如果 \\mu=1 ,那么称为次线性收敛sublinear convergence,如果\\mu=0 ,那么称为超线性收敛superlinear convergence。


如果上述分式为

\\lim_{n\\rightarrow \\infty}\\frac{\\|x_{n+1}-L\\|}{\\|x_n-L\\|^q}=\\mu

q=1 对应之前线性情况, q=2 则称为二次收敛(quadratic convergence),q=3 则称为三次收敛(cubic convergence)。此处所谓二次/三次,是指误差取对数后,随迭代步数呈二次方下降或三次方下降关系,实际上误差是指数平方或三次方收敛。

如果上述极限不存在,还希望刻画收敛速率,则使用一个序列控制其收敛

\\|x_n-L\\|\\leq y_n

如果上述不等式对任意 n 成立,如果 y_n 是线性收敛, x_n 就是R-线性收敛,R-linear convergence。对应地也有R-superlinear convergence, R-sublinear convergence, R-quadratic convergence。

用代码说吧

import numpy as np

def q_linear_convergence(x_k, x_star):
    # 模拟Q-线性收敛
    delta=0.5
    f_k=np.linalg.norm(x_k - x_star) ** 2
    f_star=np.linalg.norm(x_star) ** 2
    return f_k <=delta * (f_star - np.finfo(float).eps)

def r_linear_convergence(x_k, x_star):
    # 模拟R-线性收敛
    gamma=0.8
    return np.linalg.norm(x_k - x_star) <=gamma * np.linalg.norm(x_k - x_star)

# 测试
x_k=np.array([3, 4, 5])
x_star=np.array([1, 2, 3])

print("Q-线性收敛:", q_linear_convergence(x_k, x_star))  # 输出 True
print("R-线性收敛:", r_linear_convergence(x_k, x_star))  # 输出 True

大概这样吧

在优化算法中,Q-linear与R-linear收敛是两种常见的收敛性质。

1. Q-linear收敛(quadratic-linear convergence):当一个优化算法以Q-linear的方式收敛时,意味着它的收敛速度比线性收敛更快。具体而言,对于每一次迭代,算法的目标函数值会以平方级别减小,即与上一次迭代的目标函数值的平方差成正比。这种收敛性质常见于二次型优化问题或者局部优化算法。

2. R-linear收敛(rate-linear convergence):R-linear收敛是一种相对较慢的收敛速度,略快于线性收敛。当一个优化算法以R-linear的方式收敛时,目标函数值的减小速度是线性的,即与上一次迭代的目标函数值的差成正比。这种收敛性质在某些非光滑的优化问题中较为常见,比如拟凸优化。

Q-linear收敛速度较快,R-linear收敛速度较慢。优化算法的收敛性质直接影响了算法的迭代轮数和收敛精度。