机器学习笔记之优化算法(九)收敛速度的简单认识

机器学习笔记之优化算法——收敛速度的简单认识

引言

本节对收敛速度简单介绍。

收敛速度的判别标准

我们之前几节介绍了线搜索方法 ( Line Search Method ) (\text{Line Search Method}) (Line Search Method),并从方向角度、步长角度描述了先搜索方法的迭代优化过程。关于针对目标函数 f ( X ) f(\mathcal X) f(X)优化的终极目标: min ⁡ X ∈ R n f ( X ) \mathop{\min}\limits_{\mathcal X \in \mathbb R^n} f(\mathcal X) XRnminf(X),我们希望通过一系列数值解 { x k } k = 0 ∞ \{x_k\}_{k=0}^{\infty} {xk}k=0,使其对应的目标函数结果 { f ( x k ) } k = 0 ∞ \{f(x_k)\}_{k=0}^{\infty} {f(xk)}k=0收敛到最优值 f ∗ f^* f
也可以等价写作: { x k } k = 0 ∞ ⇒ x ∗ ; f ( x ∗ ) = f ∗ \{x_k\}_{k=0}^{\infty} \Rightarrow x^*;f(x^*) = f^* {xk}k=0x;f(x)=f。其中 x ∗ x^* x则表示迭代产生的最优数值解: x ∗ = arg ⁡ min ⁡ X ∈ R n f ( X ) x^* = \mathop{\arg\min}\limits_{\mathcal X \in \mathbb R^n} f(\mathcal X) x=XRnargminf(X)
{ f ( x k ) } k = 0 ∞ ⇒ f ∗ \{f(x_k)\}_{k=0}^{\infty} \Rightarrow f^* {f(xk)}k=0f

本节将介绍两种关于收敛速度的判别标准 Q \mathcal Q Q-收敛速度 R \mathcal R R-收敛速度

Q \mathcal Q Q-收敛速度

其中 Q \mathcal Q Q-收敛速度中的 Q \mathcal Q Q是指: Quotient \text{Quotient} Quotient,也就是除法中的。该方式主要围绕迭代过程中数值解 x k , x k + 1 x_k,x_{k+1} xk,xk+1最优解 x ∗ x^* x之间差异性的商值对收敛速度进行描述:

  • 由于 x k , x k + 1 , x ∗ x_k,x_{k+1},x^* xk,xk+1,x可能是 ∈ R n \in \mathbb R^n Rn的向量,因此关于差异性的描述使用范数进行表示。
  • 而这个范数也可以理解为:数值解最优解之间的距离,是一个正值。
    lim ⁡ k ⇒ ∞ ∣ ∣ x k + 1 − x ∗ ∣ ∣ ∣ ∣ x k − x ∗ ∣ ∣ \mathop{\lim}\limits_{k \Rightarrow \infty} \frac{||x_{k+1} - x^*||}{||x_k - x^*||} klim∣∣xkx∣∣∣∣xk+1x∣∣

在判断是否为 Q \mathcal Q Q-收敛时,我们事先假定

  • k k k充分大——这意味着 x k , x k + 1 x_k,x_{k+1} xk,xk+1都经过充分迭代产生的数值解,因而它们均无限趋近于 x ∗ x^* x。也就是说:无论 ∣ ∣ x k + 1 − x ∗ ∣ ∣ ||x_{k+1} - x^*|| ∣∣xk+1x∣∣还是 ∣ ∣ x k − x ∗ ∣ ∣ ||x_{k} - x^*|| ∣∣xkx∣∣,它们都可视作无穷小量
    { lim ⁡ k ⇒ ∞ ∣ ∣ x k + 1 − x ∗ ∣ ∣ = 0 lim ⁡ k ⇒ ∞ ∣ ∣ x k − x ∗ ∣ ∣ = 0 \begin{cases} \mathop{\lim}\limits_{k \Rightarrow \infty} ||x_{k+1} - x^*|| = 0 \\ \mathop{\lim}\limits_{k \Rightarrow \infty} ||x_{k} - x^*|| = 0 \\ \end{cases} klim∣∣xk+1x∣∣=0klim∣∣xkx∣∣=0
  • x k x_k xk f ( x k ) f(x_k) f(xk)同理——这个意思并不是 x k x_k xk f ( x k ) f(x_k) f(xk)可以进行相互替换,而是说在 Q \mathcal Q Q-收敛中, f ( x k ) f(x_k) f(xk)与· x k x_k xk一样存在相同形式的定义
    这两个定义在 Q \mathcal Q Q-收敛中没有区别,针对具体情况都可以进行使用。
    lim ⁡ k ⇒ ∞ ∣ ∣ f ( x k + 1 ) − f ∗ ∣ ∣ ∣ ∣ f ( x k ) − f ∗ ∣ ∣ \mathop{\lim}\limits_{k \Rightarrow \infty} \frac{|| f(x_{k+1}) - f^*||}{||f(x_k) - f^*||} klim∣∣f(xk)f∣∣∣∣f(xk+1)f∣∣

我们根据收敛速度的强度由低到高介绍 4 4 4 Q \mathcal Q Q-收敛:

  • Q \mathcal Q Q-次线性收敛 ( Q-SubLinear Convergence ) (\text{Q-SubLinear Convergence}) (Q-SubLinear Convergence),其定义用数学符号表示为:
    lim ⁡ k ⇒ ∞ ∣ ∣ x k + 1 − x ∗ ∣ ∣ ∣ ∣ x k − x ∗ ∣ ∣ = 1 \mathop{\lim}\limits_{k \Rightarrow \infty} \frac{||x_{k+1} - x^*||}{||x_k - x^*||} = 1 klim∣∣xkx∣∣∣∣xk+1x∣∣=1

  • Q \mathcal Q Q-线性收敛 ( Q-Linear Convergence ) (\text{Q-Linear Convergence}) (Q-Linear Convergence)。对应数学符号表示为:
    ∣ ∣ x k + 1 − x ∗ ∣ ∣ ∣ ∣ x k − x ∗ ∣ ∣ ≤ a ∈ ( 0 , 1 ) \frac{||x_{k+1} - x^*||}{||x_k - x^*||} \leq a \in (0,1) ∣∣xkx∣∣∣∣xk+1x∣∣a(0,1)
    我们发现,与 Q \mathcal Q Q-次线性收敛不同的是,它并没有加极限符号。并且:差异性的比值被 ( 0 , 1 ) (0,1) (0,1)范围内的常数 a a a限制着。例如:目标函数值集合 { f ( x k ) } k = 0 ∞ \{f(x_k)\}_{k=0}^{\infty} {f(xk)}k=0服从函数 G ( k ) = 2 − k \mathcal G(k) = 2^{-k} G(k)=2k。其定义域内对应的函数图像表示如下:
    Q-线性收敛示例
    可以发现:随着 k ⇒ ∞ k \Rightarrow \infty k,可以得到最优解 f ∗ = 0 f^* = 0 f=0,而对应的 ∣ ∣ f ( x k + 1 ) − f ∗ ∣ ∣ ∣ ∣ f ( x k ) − f ∗ ∣ ∣ \begin{aligned}\frac{||f(x_{k+1}) - f^*||}{||f(x_k) - f^*||}\end{aligned} ∣∣f(xk)f∣∣∣∣f(xk+1)f∣∣在图像中可表示为相邻红色直线之间的比值。这个比值的计算结果为:
    ∣ ∣ f ( x k + 1 ) − f ∗ ∣ ∣ ∣ ∣ f ( x k ) − f ∗ ∣ ∣ = 2 − ( k + 1 ) − 0 2 − k − 0 = 1 2 \frac{||f(x_{k+1}) - f^*||}{||f(x_k) - f^*||} = \frac{2^{-(k+1)} - 0}{2^{-k} - 0} = \frac{1}{2} ∣∣f(xk)f∣∣∣∣f(xk+1)f∣∣=2k02(k+1)0=21
    因此,由 G ( k ) \mathcal G(k) G(k)表示的 { f ( x k ) } k = 0 ∞ \{f(x_k)\}_{k=0}^{\infty} {f(xk)}k=0 a = 1 2 \begin{aligned}a = \frac{1}{2}\end{aligned} a=21 Q \mathcal Q Q-线性收敛
    此处所谓线性是指:将 { f ( x k ) } k = 0 ∞ \{f(x_k)\}_{k=0}^{\infty} {f(xk)}k=0视作为误差序列。也就是说:随着迭代次数 k k k的增加,误差信息 G ( k ) \mathcal G(k) G(k)越来越小,最终减少到 0 0 0。对误差取对数操作后,其结果 log ⁡ G ( k ) \log \mathcal G(k) logG(k) k k k之间呈线性关系
    这里关于 log ⁡ \log log取底数为 2 2 2
    log ⁡ G ( k ) = log ⁡ 2 2 − k = − k \log \mathcal G(k) = \log_2 2^{-k} =-k logG(k)=log22k=k
    a a a取到极限 1 1 1时, Q \mathcal Q Q-线性收敛会退化至 Q \mathcal Q Q-次线性收敛;相反,当 a a a取到极限 0 0 0时, Q \mathcal Q Q-线性收敛会进化至 Q \mathcal Q Q-超线性收敛。反过来说:

    • 为什么被称作 Q \mathcal Q Q-次线性收敛是因为:相比 Q \mathcal Q Q-线性收敛中相邻迭代产生的差异性比值能够明显地用 a ∈ ( 0 , 1 ) a \in (0,1) a(0,1)描述出来;而 Q \mathcal Q Q-次线性收敛中相邻迭代产生的差异性几乎完全相同,它们之间的差距可以忽略不计。从而才有:
      很明显,相比 Q \mathcal Q Q-次线性收敛, Q \mathcal Q Q-线性收敛的差异性更明显,收敛的速度更快。
      lim ⁡ k ⇒ ∞ ∣ ∣ x k + 1 − x ∗ ∣ ∣ ∣ ∣ x k − x ∗ ∣ ∣ = 1 \mathop{\lim}\limits_{k \Rightarrow \infty} \frac{||x_{k+1} - x^*||}{||x_k - x^*||} = 1 klim∣∣xkx∣∣∣∣xk+1x∣∣=1
      例如: G ( k ) = 1 k \begin{aligned}\mathcal G(k) = \frac{1}{k}\end{aligned} G(k)=k1就是一个明显的 Q \mathcal Q Q-次线性收敛。其对应函数图像表示如下:
      很明显,相比上述的 G ( k ) = 2 − k \mathcal G(k)=2^{-k} G(k)=2k,随着迭代次数 k k k的增加,相邻红色线比值的变化并不非常明显。
      Q次线性收敛示例
      其次通过计算比值也能观察到类似的效果:
      很明显,当充分迭代之后,此时 k k k已经充分大,而 k k + 1 \begin{aligned}\frac{k}{k+1}\end{aligned} k+1k这样的收敛效果完全可以忽略不计。
      lim ⁡ k ⇒ ∞ ∣ ∣ f ( x k + 1 ) − f ∗ ∣ ∣ ∣ ∣ f ( x k ) − f ∗ ∣ ∣ = lim ⁡ k ⇒ ∞ 1 k + 1 − 0 1 k − 0 = lim ⁡ k ⇒ ∞ k k + 1 = 1 \mathop{\lim}\limits_{k \Rightarrow \infty}\frac{||f(x_{k+1}) - f^*||}{||f(x_k) - f^*||} = \mathop{\lim}\limits_{k \Rightarrow \infty}\frac{\frac{1}{k+1} - 0}{\frac{1}{k} - 0} = \mathop{\lim}\limits_{k \Rightarrow \infty}\frac{k}{k+1} = 1 klim∣∣f(xk)f∣∣∣∣f(xk+1)f∣∣=klimk10k+110=klimk+1k=1
  • Q \mathcal Q Q-次线性收敛相反, Q \mathcal Q Q-超线性收敛 ( Q-Superlinear Convergence ) (\text{Q-Superlinear Convergence}) (Q-Superlinear Convergence)的定义用数学符号表示为:
    这意味着相邻迭代次数之间差异性极大,使得 x k + 1 x_{k+1} xk+1对应的差异性结果与 x k x_k xk的差异性结果相比小到可以忽略不计,这里不再过多赘述。
    lim ⁡ k ⇒ ∞ ∣ ∣ x k + 1 − x ∗ ∣ ∣ ∣ ∣ x k − x ∗ ∣ ∣ = 0 \mathop{\lim}\limits_{k \Rightarrow \infty} \frac{||x_{k+1} - x^*||}{||x_k - x^*||} = 0 klim∣∣xkx∣∣∣∣xk+1x∣∣=0

  • Q \mathcal Q Q-二次收敛 ( Q-Quadratic Convergence ) (\text{Q-Quadratic Convergence}) (Q-Quadratic Convergence)的定义用数学符号表示为:

    • 同理,如 Q \mathcal Q Q-三次收敛 ( Cubic Convergence ) (\text{Cubic Convergence}) (Cubic Convergence)等等,仅与分母中的指数项相关。
    • 相比于线性收敛中 a ∈ ( 0 , 1 ) a \in (0, 1) a(0,1),我们在 Q \mathcal Q Q-二次收敛中不会更多计较 a a a的范围,因为无穷小量的级别就可以说明其收敛速度。
      ∣ ∣ x k + 1 − x ∗ ∣ ∣ ∣ ∣ x k − x ∗ ∣ ∣ 2 ≤ a ∈ ( 0 , + ∞ ) \frac{||x_{k+1} - x^*||}{||x_k - x^*||^2} \leq a \in (0,+\infty) ∣∣xkx2∣∣xk+1x∣∣a(0,+)

    Q \mathcal Q Q-线性收敛的定义类似,也同样没有极限符号。由于 ∣ ∣ x k − x ∗ ∣ ∣ ||x_k - x^*|| ∣∣xkx∣∣自身就是一个无穷小量,那么它的平方结果可理解为一个更高级别的无穷小量,反过来说明:如果 x k + 1 x_{k+1} xk+1差异性所描述的无穷小量与 x k x_k xk差异性的平方所描述的无穷小量是一个级别的话,那么它的收敛速度已经超越了线性范畴

    例如: G ( k ) = 2 − 2 k \mathcal G(k) = 2^{-2^{k}} G(k)=22k就是明显的 Q \mathcal Q Q-二次收敛。其对应的函数图像表示如下:
    很明显,相比上面的收敛,它的收敛速度更快了,这里不再过多赘述。
    Q二次收敛示例
    对应比值的计算结果是:
    G ( k + 1 ) − 0 [ G ( k ) ] 2 = 2 − 2 k + 1 [ 2 − 2 k ] 2 = 1 ∈ ( 0 , + ∞ ) \begin{aligned}\frac{\mathcal G(k+1) -0}{[\mathcal G(k)]^2} = \frac{2^{-2^{k+1}}}{[2^{-2^k}]^2} = 1 \in (0, +\infty)\end{aligned} [G(k)]2G(k+1)0=[22k]222k+1=1(0,+)

R \mathcal R R-收敛速度

其中 R \mathcal R R-收敛速度中的 R \mathcal R R是指: Root \text{Root} Root。关于假设条件与 Q \mathcal Q Q-收敛速度相同,这里不再赘述:

  • k k k充分大;
  • x k x_k xk f ( x k ) f(x_k) f(xk)共用相同概念

关于 R \mathcal R R-收敛速度定义的数学符号表示如下:
∣ ∣ x k − x ∗ ∣ ∣ ≤ t k ||x_k - x^*|| \leq t_k ∣∣xkx∣∣tk
其中 ∣ ∣ x k − x ∗ ∣ ∣ ||x_k - x^*|| ∣∣xkx∣∣依然是数值解与最优解之间的差异性信息(距离范数);该结果被另外一个序列 { t k } k = 0 ∞ \{t_k\}_{k=0}^{\infty} {tk}k=0限制住

  • 如果 t k t_k tk Q \mathcal Q Q-次线性/线性/超线性/二次收敛
  • 并且 lim ⁡ k ⇒ ∞ t k = 0 \mathop{\lim}\limits_{k \Rightarrow \infty} t_k = 0 klimtk=0
    这说明 { t k } k = 0 ∞ \{t_k\}_{k=0}^{\infty} {tk}k=0是一个 误差序列而不是数值解序列。上面的函数例子中,我们使用这些函数描述的是数值解序列 { x k } k = 0 ∞ \{x_k\}_{k=0}^{\infty} {xk}k=0或者 { f ( x k ) } k = 0 ∞ \{f(x_k)\}_{k=0}^{\infty} {f(xk)}k=0,但这里示例函数 G ( k ) \mathcal G(k) G(k)最终都会收敛到 0 0 0,因而也可以将其视作误差序列

则称 x k x_k xk R \mathcal R R-次线性/线性/超线性/二次收敛
可以看出: Q \mathcal Q Q R \mathcal R R的区别在于:

  • 关于差异性的描述: Q ⇒ ∣ ∣ x k + 1 − x ∗ ∣ ∣ ∣ ∣ x k − x ∗ ∣ ∣ p ( p = 1 , 2 , 3 , ⋯ ) \begin{aligned}\mathcal Q \Rightarrow \frac{||x_{k+1} - x^*||}{||x_k - x^*||^p}(p=1,2,3,\cdots)\end{aligned} Q∣∣xkxp∣∣xk+1x∣∣(p=1,2,3,) R ⇒ ∣ ∣ x k − x ∗ ∣ ∣ \mathcal R \Rightarrow ||x_k - x^*|| R∣∣xkx∣∣
  • 相比于 Q \mathcal Q Q中使用具体值(0、1)或者范围 ( 0 , 1 ) ; ( 0 , + ∞ ) (0,1);(0,+\infty) (0,1);(0,+) R \mathcal R R则使用误差序列 { t k } k = 0 ∞ \{t_k\}_{k=0}^{\infty} {tk}k=0,并且每一个迭代步骤 k = 0 , 1 , 2 , ⋯ k=0,1,2,\cdots k=0,1,2,均被对应 { t k } k = 0 ∞ \{t_k\}_{k=0}^{\infty} {tk}k=0中的 t 0 , t 1 , t 2 , ⋯ t_0,t_1,t_2,\cdots t0,t1,t2,限制住。

之所以会定义 R \mathcal R R-收敛速度,原因在于:一些情况下, Q \mathcal Q Q-收敛速度不容易求解,如果找到一组合适的 { t k } k = 0 ∞ \{t_k\}_{k=0}^{\infty} {tk}k=0,可以根据 t k t_k tk的收敛速度,从而对 x k x_k xk的收敛速度进行表达。例如:
∣ ∣ f ( x k ) − f ∗ ∣ ∣ ≤ G ( k ) = 1 k ||f(x_k) - f^*|| \leq \mathcal G(k) = \frac{1}{k} ∣∣f(xk)f∣∣G(k)=k1
我们已经知道:满足 G ( k ) \mathcal G(k) G(k)误差序列 Q \mathcal Q Q-次线性收敛,因而可以判断 { f ( x k ) } k = 0 ∞ \{f(x_k)\}_{k=0}^{\infty} {f(xk)}k=0 R − \mathcal R- R次线性收敛

关于算法复杂度与收敛速度

在真实情况下,我们不能任由算法无限迭代下去,即 k k k不能无限大。因而我们会设置一些判断条件。例如:
这里 ϵ \epsilon ϵ表示描述限制条件的超参数。达到该条件,即可停止算法。
∣ ∣ f ( x k ) − f ∗ ∣ ∣ ≤ ϵ ||f(x_k) - f^*|| \leq \epsilon ∣∣f(xk)f∣∣ϵ

  • 如果依然以 Q \mathcal Q Q-次线性收敛 1 k \begin{aligned}\frac{1}{k}\end{aligned} k1为例,需要满足:
    ∣ ∣ f ( x k ) − f ∗ ∣ ∣ ≤ G ( k ) = 1 k ≤ ϵ ⇒ k ≥ 1 ϵ ||f(x_k) - f^*|| \leq \mathcal G(k) =\frac{1}{k} \leq \epsilon \Rightarrow k \geq \frac{1}{\epsilon} ∣∣f(xk)f∣∣G(k)=k1ϵkϵ1
    可以看出: ϵ \epsilon ϵ越小时,迭代的次数 k k k越大
  • 如果以 Q \mathcal Q Q-线性收敛 2 − k 2^{-k} 2k为例,需要满足:
    2 − k ≤ ϵ ⇒ k ≥ log ⁡ 2 1 ϵ 2^{-k} \leq \epsilon \Rightarrow k \geq \log_2 \frac{1}{\epsilon} 2kϵklog2ϵ1

可以观察到: ϵ \epsilon ϵ很小的情况下,关于 1 ϵ \begin{aligned}\frac{1}{\epsilon}\end{aligned} ϵ1其量级远高于 log ⁡ 2 1 ϵ \begin{aligned}\log_2 \frac{1}{\epsilon}\end{aligned} log2ϵ1
随着 1 ϵ \begin{aligned}\frac{1}{\epsilon}\end{aligned} ϵ1的增加, Q \mathcal Q Q-次线性收敛(蓝色直线) Q \mathcal Q Q-线性收敛(橙色曲线)对应的函数结果相比,其对应函数值的增速明显更高,而更高意味着更多的迭代步骤

算法复杂度与收敛速度示例
因此,一般情况下,使用更高强度的收敛速度,那么他的迭代步骤就会减小,从而降低算法复杂度。

相关参考:
【优化算法】收敛速度简介
优化里的Q-linear Convergence和R-linear convergence是什么意思?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/21263.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode----JavaScript 详情题解(2)

目录 2629. 复合函数 2631. 分组 2634. 过滤数组中的元素 2635. 转换数组中的每个元素 2637. 有时间限制的 Promise 对象 2648. 生成斐波那契数列 2649. 嵌套数组生成器 2665. 计数器 II 2666. 只允许一次函数调用 2629. 复合函数 恒等函数 在数学里,恒等函…

kubectl get node notReady | network not ready | kube-flannel not ready

问题 # 查看 node 状态 notReady [rootlocalhost ~]# kubectl get node NAME STATUS ROLES AGE VERSION node1 NotReady control-plane 31m v1.27.4 # 查看详细信息 network not ready [rootlocalhost ~]# kubectl describe node node1 Name: …

【Linux命令200例】awk文本处理工具的系统与实战讲述(常用)

🏆作者简介,黑夜开发者,全栈领域新星创作者✌,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已…

美团基础架构面经总结汇总

美团基础架构的面经。 问的全是基础,一个编程语言的问都没有。 问题记录 MySQL-MVCC InooDB是通过 MVCC 实现可重复读的隔离级别的,MVCC 就是多版本并发控制,它其实记录了历史版本的数据,解决了读写并发冲突问题。有一个版本编码,然后它进入了各种操作下的数据状态,能…

篇一:单例模式:C++中的独一无二

篇一:“单例模式:C中的独一无二” 设计模式在软件开发中起到了至关重要的作用,其中单例模式是最为常用且基础的设计模式之一。单例模式确保一个类只有一个实例,并提供全局访问点,以保证系统中的某个对象只有唯一的存在…

redis数据未到过期时间被删除

1. 问题描述 使用了jeecgboot开发后端代码,代码设置的redis过期时间为24小时,部署使用的宝塔面板,在redis中看到的过期时间也是为24小时,但是并未到过期时间,数据就被删除。 2. 解决办法 观察了一下redis中的数据&a…

DataGrip实时模板的配置

DataGrip实时模板的配置 File→Setting→Editor→Live Templates→点击“”→Live Template 即可新写入一条模板语句 写入新模板 缩写:seld select $END$ from dual; 注意:一开始都是默认无应用的,需要手动配置应用于所有SQL 点击difine(…

【计算机网络】NAT技术

文章目录 1. NAT技术简介2. 使用NAT技术转换IP的过程3. NAPT4. NAT技术的缺陷5. NAT和代理服务器 1. NAT技术简介 NAT(Network Address Translation,网络地址转换)技术,是解决IP地址不足的主要手段,并且能够有效避免外…

TestFilterOnProxyWithoutTarget

目录 1 TestFilterOnProxyWithoutTarget 1.1 Test_ex_thrown_from_filters 1.2 Test_catching_ex_thrown_from_filters 1.2.1 // Exceptions are handled TestFilterOnProxyWithoutTarget using Flatwhite.Core.Tests.Attributes; using Microsoft.Extensions.Depend…

Linux下安装配置Redis

文章目录 安装依赖库上传安装包并解压 启动默认启动指定配置启动开机自启 安装 依赖库 Redis是基于C语言编写的,因此首先需要安装Redis所需要的gcc依赖: yum install -y gcc tcl上传安装包并解压 将Redis安装包上传到服务器的任意目录,例…

Vue - Element el-form 表单对象多层嵌套校验

针对el-form的数据源是对象嵌套对象,在进行数据绑定和校验时和单层的对象有一点区别, 具体是下面两部分: 数据源: fromData: {name: ,health: {height: } }1、 给 el-form-item 的 prop设为:prop"health.height&…

JavaScript |(三)内建对象 | 数组 | string对象 | 尚硅谷JavaScript基础实战

学习来源:尚硅谷JavaScript基础&实战丨JS入门到精通全套完整版 文章目录 📚数组🐇数组介绍⭐️数组(Array)⭐️基本操作⭐️数组的字面量 🐇数组中的常用方法⭐️push()⭐️pop()⭐️unshift()⭐️shif…

CSS中page-break-after属性

在CSS中,page-break-after是一个属性,它控制了元素后的分页行为。 当你打印一个网页的时候,page-break-after属性可以设置在元素后插入一个分页符,将内容分割到新的一页上。它的值可以是以下之一: auto: …

spring websocket 调用受权限保护的方法失败

版本 spring-security 5.6.10 spring-websocket 5.3.27 现象 通过AbstractWebSocketHandler实现websocket端点处理器 调用使用PreAuthorize注解的方法报错,无法在SecurityContext中找到认证信息 org.springframework.security.authentication.AuthenticationCred…

无人驾驶实战-第一课(自动驾驶概述)

在七月算法上报了《无人驾驶实战》课程,老师讲的真好。好记性不如烂笔头,记录一下学习内容。 课程入口,感兴趣的也可以跟着学一下。 ————————————————————————————————————————— 无人驾驶汽车的定义…

音频光耦合器

音频光耦合器是一种能够将电信号转换为光信号并进行传输的设备。它通常由发光二极管(LED)和光敏电阻(光电二极管或光敏电阻器)组成。 在音频光耦合器中,音频信号经过放大和调节后,被转换为电流信号&#xf…

Windows11+Opencv+Clion编译源码

Windows11OpencvClion编译源码 参考:https://www.robotsfan.com/posts/69395e08.html 注意事项 编译过程中使用的软件,开源码等所有工具的安装路径一定不要有中文和空格。cmake过程会下载一些文件,如果是局域网的话可能下载不下来&#xf…

Restful开发规范以及开发流程

目录 一、RestFul开发规范 二、开发流程 一、RestFul开发规范 RESTful(Representational State Transfer)是一种用于设计和开发网络应用程序的架构风格,它强调使用标准HTTP方法和状态码来进行资源的管理和交互。以下是一些常见的RESTful开发…

【linux-网络】4层转发方法-iptable以及nginx

1.背景 有时候远程或者某些业务需要做转发就会用到iptables或者nginx,或者ss都可以 根据自己的情况去适配。 2.方法: 1)iptables -把linux内核转发功能打开 echo "net.ipv4.ip_forward1" >> /etc/sysctl.conf -出入转发…

对微服务网关的一些总结

对微服务网关的一些总结 一. 什么是网关 网关是位于NGINX(或没有)与真实微服务间的转发服务。 用户通过HTTP接口,连接到NGINX,然后NGINX反向到M个网关。 网关根据[服务注册与发现],进行转发请求到具体的微服务上。 由于网关可编码&#…