学习优化的时候论文经常会提到类似概念
发现了一个讲的比较详细的答案
Rate of convergence简单来说,如果 ,那么写出如下分式形式极限:
若极限存在且 ,那么就称其为线性收敛(linear convergence),也称Q-linear convergence,因为上述形式为分式Quotient形式。此处所谓线性,是指误差取对数后,随迭代步数呈线性,实际上误差是指数收敛。如果
,那么称为次线性收敛sublinear convergence,如果
,那么称为超线性收敛superlinear convergence。
如果上述分式为
对应之前线性情况,
则称为二次收敛(quadratic convergence),
则称为三次收敛(cubic convergence)。此处所谓二次/三次,是指误差取对数后,随迭代步数呈二次方下降或三次方下降关系,实际上误差是指数平方或三次方收敛。
如果上述极限不存在,还希望刻画收敛速率,则使用一个序列控制其收敛
如果上述不等式对任意 成立,如果
是线性收敛,
就是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收敛速度较慢。优化算法的收敛性质直接影响了算法的迭代轮数和收敛精度。