本文讲解一下函数 convexity 和 smoothness 的基本定义,等价定义,和性质。如非特别说明,本文中的模 ∥∗∥\|*\|∥∗∥ 均为 ∥∗∥2\|*\|_2∥∗∥2​.

Multi-variate function

本文中我们主要考虑形如 f(x):Rn→Rf(\bm{x}):\mathbb{R}^n\to\mathbb{R}f(x):Rn→R 的多变量函数。这里我们需要强调的两个概念是 gradient 和 Hessian. 下面我们在 n=2n=2n=2 时探讨一下这两个概念的motivation和一些intuition。

首先,函数 f(x1,x2)f(x_1,x_2)f(x1​,x2​) 是指 fff 的变化由 x1x_1x1​ 和 x2x_2x2​ 的变化决定。通常我们把 x1x_1x1​ 和 x2x_2x2​ 画成正交的两个轴。对于不同的 x1x_1x1​ 和 x2x_2x2​ 的取值,fff 呈现出一个三维图形。

Gradient

这里我们考虑的主要问题是,若fff 可微,那么在任意一点处怎么表示 fff 的导数尼

  1. n=1n=1n=1 情况下,我们求得的导数 f′(x)f^\prime(x)f′(x) 是 xxx 的一个函数,他表征着每一点处函数增大的方向和增大的速度。比如说 f(x)=x2f(x)=x^2f(x)=x2, f′(x)=2xf^\prime(x)=2xf′(x)=2x. 那么,f′(−1)=−2f^\prime(-1)=-2f′(−1)=−2 的意思是,函数沿着负方向增大,增大速度是 222.

  2. 高维情况下,导数也需要表示出函数增大的方向和速度。但是有一个问题是,在高维情况下,自变量是在一个平面上变化,因此变化方向无穷,增大的方向也无穷多。因此,我们只定义出函数增大最快的方向为导数方向,giving
    ∇f=[∂f∂x1,∂f∂x2]⊤.(1)\nabla f=\left[\frac{\partial f}{\partial x_1} ,\frac{\partial f}{\partial x_2} \right]^\top. \tag{1}∇f=[∂x1​∂f​,∂x2​∂f​]⊤.(1)

  3. 比如看第一项,实际上就是把其他变量当做常数,这样 fff 只有两个方向可以选,即增大 x1x_1x1​ 还是减少 x1x_1x1​, 而 ∂f∂x1\frac{\partial f}{\partial x_1}∂x1​∂f​ 就指示出了为了使得整个函数变化最快,沿着 x1x_1x1​ 这个轴需要改变的方向和大小

  4. 需要注意的是,∂f∂x1\frac{\partial f}{\partial x_1}∂x1​∂f​ 也是 x1x_1x1​ 和 x2x_2x2​ 的一个函数。即对于 (x1,x2)(x_1,x_2)(x1​,x2​) 平面上的任意一点,它的导数沿着 x1x_1x1​ 轴的变化方向和大小都可以是不同的。

  5. 当然,最终我们不能只看一个轴,而是应该看 ∇f\nabla f∇f, 因为他指示的是平面上的一个方向,这才是真正的导数方向 (函数增大最快),而它的模值正是函数增大的最大速度。

Hessian

第一个问题,Hessian是什么?Hessian是一个对称matrix,它的每一项都是函数进行两次偏导的结果。
∇2f(x)=[∂2f(x)∂2x1∂2f(x)∂x1∂x2⋯∂2f(x)∂x1∂xn∂2f(x)∂x2∂x1∂2f(x)∂2x2⋯∂2f(x)∂x2∂xn⋯⋯⋯⋯∂2f(x)∂xn∂x1∂2f(x)∂xn∂x2⋯∂2f(x)∂2xn]\nabla^2 f(\bm{x})=\begin{bmatrix} \frac{\partial^2 f(\bm{x})}{\partial^2 x_1} & \frac{\partial^2 f(\bm{x})}{\partial x_1\partial x_2} & \cdots & \frac{\partial^2 f(\bm{x})}{\partial x_1\partial x_n} \\ \frac{\partial^2 f(\bm{x})}{\partial x_2\partial x_1} & \frac{\partial^2 f(\bm{x})}{\partial^2 x_2} & \cdots & \frac{\partial^2 f(\bm{x})}{\partial x_2\partial x_n} \\ \cdots & \cdots & \cdots & \cdots \\ \frac{\partial^2 f(\bm{x})}{\partial x_n\partial x_1} & \frac{\partial^2 f(\bm{x})}{\partial x_n\partial x_2} & \cdots & \frac{\partial^2 f(\bm{x})}{\partial^2 x_n} \end{bmatrix}∇2f(x)=⎣⎢⎢⎢⎡​∂2x1​∂2f(x)​∂x2​∂x1​∂2f(x)​⋯∂xn​∂x1​∂2f(x)​​∂x1​∂x2​∂2f(x)​∂2x2​∂2f(x)​⋯∂xn​∂x2​∂2f(x)​​⋯⋯⋯⋯​∂x1​∂xn​∂2f(x)​∂x2​∂xn​∂2f(x)​⋯∂2xn​∂2f(x)​​⎦⎥⎥⎥⎤​

对角线上的元素是很好理解的,比如说第一项,就相当于把其他所有变量都看作常数把 f(x)f(\bm{x})f(x) 看做一个单变量函数 f(x1)f(x_1)f(x1​). 在任意一点,我们沿着 x1x_1x1​ 轴做一个切面,这一项便是切面函数的二阶导。第一次求偏导相当于查看函数沿着 x1x_1x1​ 轴正负哪个方向增大且增大的速度是多少。紧接着求第二次偏导相当于查看梯度函数沿着x1x_1x1​ 轴正负哪个方向增大且增大的速度是多少。

非对角线元素的理解要稍微困难点。这里不做过多讨论,但是我们要指出,实际上 x\bm{x}x 的方向是无穷多的,但是Hessian揭示了,我们只需要考虑有限的 nnn 个方向上 (以及他们mixed 方向上) 函数的变化,便可以囊括其他任意的方向。

第二个问题,我们为什么要研究Hessian尼?这里从optimization的角度给出一个motivation。

  1. 首先考虑简单的 n=1n=1n=1 的情况。我们已经习惯于用一阶导数来寻找函数的local minimum。这是因为, 若 x0x_0x0​ 是一个极值点,那么f′(x0)=0f^\prime(x_0)=0f′(x0​)=0. 当然,converse 是不对的,一个典型的例子是 f(x)=x3f(x)=x^3f(x)=x3 在 x0=0x_0=0x0​=0 点处一阶导是0但是这个点不是极值点。像这种一阶导为0但却不是local optima的点我们称为鞍点 saddle point.

  2. 在高维情况下,我们仍然可以用 (1) 式中的gradient ∇f\nabla f∇f 来寻找local optima。因为同样的结论:由 x0\bm{x_0}x0​ 是极值点,可以推至 ∇f(x0)=0\nabla f(\bm{x_0})=0∇f(x0​)=0. 但是高维情况下,saddle point 在所有梯度为0的点 (critical points) 中所占的比例越来越高。这就使得进一步判别这个点到底是saddle point还是local optima变得越来越重要。

  3. 为了解决这个问题,我们首先得研究saddle point是个啥。鞍点这个名字已经很好的暗示了它的含义,它就像一个马鞍上屁股坐着的那个点,向前和向后都是高高翘起,向左向右却是向下骤降。换句话说,这个点虽然梯度为0,但是各个方向上的 convexity 并不match.

有了以上的认识,我们来看看一个二阶可微函数 f(x)f(x)f(x) 如何寻找local optima. 基本步骤如下:

Second partial derivative test (multivariate case):

  1. 找到 critical points, 即 gradient 是 0 的那些点 ∇f(x0)=0\nabla f(\bm{x}_0) = 0∇f(x0​)=0.

  2. 研究 Hessian 在 critic points 的eigenvalues。对于任何一个 critical point x0\bm{x}_0x0​, Hessian ∇2f(x0)\nabla^2f(\bm{x}_0)∇2f(x0​) 的 eigenvalues 1) 若全是正的 (即Hessian正定), 则 x0\bm{x_0}x0​ 是极小值点; 2) 若全是负的 (即Hessian负定), 则 x0\bm{x_0}x0​ 是极大值点; 3) 若既有正又有负,则是saddle point; 4) 其他所有情况,即有0的情况(不可逆Hessian)均无法判断。

更常用的是 n=2n=2n=2 的情况,此时我们有

Second partial derivative test (two-variate case):

  1. 找到 critical points, 即 gradient 是 0 的那些点 ∇f(x0)=0\nabla f(\bm{x}_0) = 0∇f(x0​)=0.

  2. 判断 Hessian 在 critic points 的行列式 det(∇2f(x0))\text{det}\left(\nabla^2f(\bm{x}_0)\right)det(∇2f(x0​)). 若 det>0\text{det}>0det>0, 则 x0\bm{x_0}x0​ 是一个极值点 (此时再任选一个方向看二阶导大于0则是最小值点,反之是最大值点); 若 det<0\text{det}<0det<0, 则 x0\bm{x_0}x0​ 是saddle point; 若 det=0\text{det}=0det=0, 无法判断。

针对 n=2n=2n=2 的 second partial derivative test, 我们推荐大家看一下这个视频的直观解释 https://www.bilibili.com/video/BV12h411B7fN

Taylor series expansion (vector form)

单变量函数 f(x):R→Rf(x):\mathbb{R}\to\mathbb{R}f(x):R→R 可以在 x0x_0x0​ 点展开为
f(x0+d)=f(x0)+df(x0)dxd+12!d2f(x0)d2xd2+O(d2)f(x_0+d)=f(x_0)+\frac{df(x_0)}{dx}d+\frac{1}{2!}\frac{d^2 f(x_0)}{d^2 x}d^2+\mathcal{O}(d^2)f(x0​+d)=f(x0​)+dxdf(x0​)​d+2!1​d2xd2f(x0​)​d2+O(d2)

多变量函数 f(x):Rn→Rf(\bm{x}):\mathbb{R}^n\to\mathbb{R}f(x):Rn→R 可以在 x0\bm{x_0}x0​ 点展开为
f(x0+d)=f(x0)+∇xf(x0)⊤d+12!d⊤∇x2(x0)d+O(∥d∥2)f(\bm{x_0+d})=f(\bm{x_0})+\nabla_{\bm{x}} f(x_0)^\top\bm{d}+\frac{1}{2!}\bm{d}^\top\nabla^2_{\bm{x}}(x_0)\bm{d} + \mathcal{O}(\|\bm{d}\|^2)f(x0​+d)=f(x0​)+∇x​f(x0​)⊤d+2!1​d⊤∇x2​(x0​)d+O(∥d∥2)

Convexity

这一节我们来引入一个比较强的条件,convexity.

Definition 1 (convex function): 函数 f:x→yf:\bm{x} \to yf:x→y is convex if

  1. The set of x\bm{x}x, 或者称为 domain of fff: dom(f)(f)(f) is convex;
  2. ∀λ∈[0,1]\forall\lambda\in [0,1]∀λ∈[0,1], f(λx1+(1−λ)x2)≤λf(x1)+(1−λ)f(x2)f\left(\lambda \bm{x_1}+(1-\lambda)\bm{x_2}\right) \leq \lambda f\left(\bm{x_1}\right)+(1-\lambda)f(\bm{x_2})f(λx1​+(1−λ)x2​)≤λf(x1​)+(1−λ)f(x2​), 即 Jensen’s inequality.

这个定义的几何意义是: ∣x∣+1|\bm{x}|+1∣x∣+1 维空间中,函数上任意两点连线上任取一点都在函数的上方.

Definition 1.1 (convex function 一阶等价条件) 若函数 fff differentiable, 则 fff 是凸函数的等价定义是

  1. dom(f)(f)(f) is convex;
  2. ∀x1,x2\forall \bm{x_1},\bm{x_2}∀x1​,x2​, f(x2)−f(x1)≥∇f(x1)⊤(x2−x1)f(\bm{x_2})-f(\bm{x_1}) \geq \nabla f(\bm{x_1})^\top (\bm{x_2}-\bm{x_1})f(x2​)−f(x1​)≥∇f(x1​)⊤(x2​−x1​).

一阶等价条件的几何意义是函数任意一点的切平面都在函数下方。
Proof. (充分性) 已知 ∀x1,x2\forall \bm{x_1},\bm{x_2}∀x1​,x2​, f(x2)−f(x1)≥∇f(x1)⊤(x2−x1)f(\bm{x_2})-f(\bm{x_1}) \geq \nabla f(\bm{x_1})^\top (\bm{x_2}-\bm{x_1})f(x2​)−f(x1​)≥∇f(x1​)⊤(x2​−x1​). 令 z=λx1+(1−λ)x2\bm{z}=\lambda\bm{x}_1+(1-\lambda)\bm{x}_2z=λx1​+(1−λ)x2​, λ∈[0,1]\lambda\in[0,1]λ∈[0,1], 则
f(x1)−f(z)≥∇f(z)⊤(x1−z)f(x2)−f(z)≥∇f(z)⊤(x2−z)f(\bm{x_1})-f(\bm{z}) \geq \nabla f(\bm{z})^\top (\bm{x_1}-\bm{z})\\ f(\bm{x_2})-f(\bm{z}) \geq \nabla f(\bm{z})^\top (\bm{x_2}-\bm{z})f(x1​)−f(z)≥∇f(z)⊤(x1​−z)f(x2​)−f(z)≥∇f(z)⊤(x2​−z)

将上两式加权和,有
λf(x1)+(1−λ)f(x2)−f(z)≥∇f(z)⊤(λx1+(1−λ)x2−z)=0\lambda f(\bm{x_1}) + (1-\lambda) f(\bm{x_2}) - f(\bm{z})\geq \nabla f(\bm{z})^\top(\lambda\bm{x_1}+(1-\lambda)\bm{x_2}-\bm{z})=0λf(x1​)+(1−λ)f(x2​)−f(z)≥∇f(z)⊤(λx1​+(1−λ)x2​−z)=0.

(必要性) 已知 f(λx1+(1−λ)x2)≤λf(x1)+(1−λ)f(x2)f\left(\lambda \bm{x_1}+(1-\lambda)\bm{x_2}\right) \leq \lambda f\left(\bm{x_1}\right)+(1-\lambda)f(\bm{x_2})f(λx1​+(1−λ)x2​)≤λf(x1​)+(1−λ)f(x2​), 则有
f(λ(x1−x2)+x2)≤λf(x1)+(1−λ)f(x2)f\left(\lambda (\bm{x_1-x_2})+ \bm{x_2}\right) \leq \lambda f\left(\bm{x_1}\right)+(1-\lambda)f(\bm{x_2})f(λ(x1​−x2​)+x2​)≤λf(x1​)+(1−λ)f(x2​)

两边同时减去 f(x2)f(\bm{x_2})f(x2​) 并同除 λ→0\lambda\to 0λ→0 有
lim⁡λ→0f(x2+λ(x1−x2))−f(x2)λ=∇f(x2)⊤(x1−x2)≤f(x1)−f(x2).\lim_{\lambda\to 0}\frac{f\left(\bm{x_2}+\lambda (\bm{x_1-x_2})\right)-f(\bm{x_2})}{\lambda} = \nabla f(\bm{x_2})^\top (\bm{x_1-x_2}) \leq f(\bm{x_1})-f(\bm{x_2}).λ→0lim​λf(x2​+λ(x1​−x2​))−f(x2​)​=∇f(x2​)⊤(x1​−x2​)≤f(x1​)−f(x2​).

Definition 1.2 (convex function 二阶等价条件) 若函数 fff twice differentiable, 则 fff 是凸函数的等价定义是

  1. dom(f)(f)(f) is convex;
  2. ∀x\forall \bm{x}∀x, ∇2f(x)⪰0\nabla^2 f(\bm{x}) \succeq 0∇2f(x)⪰0.

二阶等价条件是说,函数在任意点处的curvature都是非负的,或者说 Hessen matrix 半正定(所有eigenvalues非负)。用一维函数来理解,那么curvature是正的意思就是说,函数的导数沿着 xxx 增大的方向而增大,或者说每一点的二阶导数都是正的。

第二个条件也可以写为梯度的变化与自变量的变化之间的夹角不大于 90∘90^\circ90∘, 即
[∇f(x1)−∇f(x2)]⊤(x1−x2)≥0\left[\nabla f(\bm{x_1})-\nabla f(\bm{x_2})\right]^\top(\bm{x_1-x_2})\geq 0[∇f(x1​)−∇f(x2​)]⊤(x1​−x2​)≥0

Definition 2 (strictly convex) 函数 f:x→yf:\bm{x} \to yf:x→y is strictly convex if either of the following conditions holds

  1. f(λx1+(1−λ)x2)<λf(x1)+(1−λ)f(x2)f\left(\lambda \bm{x_1}+(1-\lambda)\bm{x_2}\right) < \lambda f\left(\bm{x_1}\right)+(1-\lambda)f(\bm{x_2})f(λx1​+(1−λ)x2​)<λf(x1​)+(1−λ)f(x2​);
  2. f(x2)−f(x1)>∇f(x1)⊤(x2−x1)f(\bm{x_2})-f(\bm{x_1})>\nabla f(\bm{x_1})^\top (\bm{x_2-x_1})f(x2​)−f(x1​)>∇f(x1​)⊤(x2​−x1​)
  3. ∇2f(x)≻0\nabla^2 f(\bm{x})\succ 0∇2f(x)≻0.

一般 strictly convex 的假设是为了保证最优解的唯一性。

Definition 3 (strongly convex) 函数 f(x)f(\bm{x})f(x) is μ\muμ-strongly convex if
f(x2)−f(x1)≥∇f(x1)⊤(x2−x1)+μ2∥x2−x1∥2f(\bm{x_2})-f(\bm{x_1})\geq \nabla f(\bm{x_1})^\top (\bm{x_2-x_1}) + \frac{\mu}{2}\|\bm{x_2-x_1}\|^2f(x2​)−f(x1​)≥∇f(x1​)⊤(x2​−x1​)+2μ​∥x2​−x1​∥2

实际上这个定义是在说 f(x)−μ2x⊤xf(\bm{x})-\frac{\mu}{2}\bm{x}^\top\bm{x}f(x)−2μ​x⊤x 是convex的,换句话说 f(x)f(\bm{x})f(x) 减掉一个二次函数还是convex的,说明他至少比一个二次函数要凸 (二次函数是他的下界)。

Definition 3.1 (strongly convex 等价条件) 函数 f(x)f(\bm{x})f(x) is μ\muμ-strongly convex 等价于以下几个条件

  1. f(x2)−f(x1)≥∇f(x1)⊤(x2−x1)+μ2∥x2−x1∥2f(\bm{x_2})-f(\bm{x_1})\geq \nabla f(\bm{x_1})^\top (\bm{x_2-x_1}) + \frac{\mu}{2}\|\bm{x_2-x_1}\|^2f(x2​)−f(x1​)≥∇f(x1​)⊤(x2​−x1​)+2μ​∥x2​−x1​∥2
  2. f(λx1+(1−λ)x2)≤λf(x1)+(1−λ)f(x2)−μλ(1−λ)2∥x1−x2∥2f(\lambda\bm{x_1}+(1-\lambda)\bm{x_2})\leq\lambda f(\bm{x_1})+(1-\lambda) f(\bm{x_2})-\frac{\mu\lambda(1-\lambda)}{2}\|\bm{x_1-x_2}\|^2f(λx1​+(1−λ)x2​)≤λf(x1​)+(1−λ)f(x2​)−2μλ(1−λ)​∥x1​−x2​∥2
  3. (∇f(x1)−∇f(x2))⊤(x1−x2)≥μ∥x1−x2∥2(\nabla f(\bm{x_1})-\nabla f(\bm{x_2}))^\top (\bm{x_1-x_2})\geq \mu\|\bm{x_1-x_2}\|^2(∇f(x1​)−∇f(x2​))⊤(x1​−x2​)≥μ∥x1​−x2​∥2
  4. ∇2f(x)−μ2I⪰0\nabla^2 f(\bm{x})-\frac{\mu}{2}\bm{I}\succeq 0∇2f(x)−2μ​I⪰0.

Lipschitz smooth

上一节的convexity我们希望函数的gradient越来越大,而这一节我们介绍的是一个相反的概念。即我们不希望函数短时间内变化的太剧烈,而是希望函数有某种smoothness.

Definition 4 (smooth function): 函数 f:x→yf:\bm{x} \to yf:x→y is LLL-smooth if
∥∇f(x1)−∇f(x2)∥≤L∥x1−x2∥\|\nabla f(\bm{x_1})-\nabla f(\bm{x_2})\|\leq L \|\bm{x_1-x_2}\|∥∇f(x1​)−∇f(x2​)∥≤L∥x1​−x2​∥

Definition 4.1 (smooth function 等价定义) 函数 f:x→yf:\bm{x} \to yf:x→y is LLL-smooth等价于

  1. (∇f(x1)−∇f(x2))⊤(x1−x2)≤L∥x1−x2∥2\left(\nabla f(\bm{x_1})-\nabla f(\bm{x_2}) \right)^\top (\bm{x_1-x_2}) \leq L\|\bm{x_1-x_2}\|^2(∇f(x1​)−∇f(x2​))⊤(x1​−x2​)≤L∥x1​−x2​∥2
  2. g(x)=L2x⊤x−f(x)g(x)=\frac{L}{2}\bm{x}^\top\bm{x}-f(\bm{x})g(x)=2L​x⊤x−f(x) 是convex.
  3. (quadratic upper bound) 0≤f(x2)−f(x1)−∇f(x1)⊤(x2−x1)≤L2∥x2−x1∥20\leq f(\bm{x}_2)-f(\bm{x_1})-\nabla f(\bm{x_1})^\top(\bm{x_2-x_1})\leq \frac{L}{2}\|\bm{x_2-x_1} \|^20≤f(x2​)−f(x1​)−∇f(x1​)⊤(x2​−x1​)≤2L​∥x2​−x1​∥2.
  4. f(x2)>f(x1)+∇f(x1)⊤(x2−x1)+12L∥∇f(x1)−∇f(x2)∥2f(\bm{x_2})>f(\bm{x_1})+\nabla f(\bm{x_1})^\top (\bm{x_2-x_1})+\frac{1}{2L}\|\nabla f(\bm{x_1})-\nabla f(\bm{x_2})\|^2f(x2​)>f(x1​)+∇f(x1​)⊤(x2​−x1​)+2L1​∥∇f(x1​)−∇f(x2​)∥2.
  5. (co-coercivity) (∇f(x1)−∇f(x2))2(x1−x2)≥1L∥f(x1)−∇f(x2)∥2\left(\nabla f(\bm{x_1})-\nabla f(\bm{x_2})\right)^2(\bm{x_1-x_2})\geq \frac{1}{L}\|f(\bm{x_1})-\nabla f(\bm{x_2}) \|^2(∇f(x1​)−∇f(x2​))2(x1​−x2​)≥L1​∥f(x1​)−∇f(x2​)∥2

Reference

  1. Lecture notes: Gradient method. EE236C - Optimization Methods for Large-Scale Systems (Spring 2016). Vandenberghe, UCLA.
  2. https://blog.fangzhou.me/posts/20190217-convex-function-lipschitz-smooth-strongly-convex/

函数的 smoothness 和 convexity相关推荐

  1. OpenCV-Python (官方)中文教程(部分一)

    官网链接(英文版):https://docs.opencv.org/4.1.1/d6/d00/tutorial_py_root.html 第一章. OpenCV简介 了解如何在计算机上设置OpenCV ...

  2. LazyBrush论文笔记(4):问题建模-平滑项与数据项

    版权声明:禁止转载.(更新时间:2020-07-13) 接上一篇,继续研究LazyBrush论文 .(系列笔记首页链接) 目录 6.2 Smoothness term(平滑项) 6.2.1 总体思想 ...

  3. 线性回归中“回归”的含义

    今天我就简单谈谈自己的一些新想法.我们从最基本的容易引起歧义的地方出发.很多人问我,回归(regression)和拟合(fitting)有什么不同?其实如果你想从数学的角度去区分它们,你就出不来了.知 ...

  4. halcon 相似度_Halcon分类函数,shape模型

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数013,shape模型 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化::: 用符号"**&quo ...

  5. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数013,shape模型

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数013,shape模型 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号"**&qu ...

  6. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数012,polygon,多边形

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数012,polygon,多边形 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号"* ...

  7. jQuery回调函数

    1.引言 今天在学习<jQuery基础教程>在学习编写插件的时候,书中说利用回调函数来当参数,会极大的提高程序的灵活性.对回调函数很陌生.研究了一下给的示例程序.感觉对回调函数有了基本的了 ...

  8. 轮廓处理函数详细(转)

    轮廓处理函数详细 ApproxChains 用多边形曲线逼近 Freeman 链 CvSeq* cvApproxChains( CvSeq* src_seq, CvMemStorage* storag ...

  9. 为什么a*算法采用哈密尔顿距离作为启发函数比不在位数为启发函数的性能要好?_【论文研读】路径规划中的Hybrid A*算法...

    本文目的 由于在carla-autoware的示例中使用了hybrid A* 算法,所以本文基于以下两篇文章对hybrid A* 算法过程进行整理:(文中挑选了一些个人认为便于理解算法的图片,均来自于 ...

  10. 【推荐算法】Knowledge-aware Graph Neural Networks with Label Smoothness Regularization(KGNN-LS)论文笔记

    题目:Knowledge-aware Graph Neural Networks with Label Smoothness Regularization for Recommender System ...

最新文章

  1. 用@Data注解的形式替代类中的setter、getter方法
  2. 用Xlib库进行基本图形编程
  3. Spring 的 BeanUtils 踩坑记,你是不是遇到过这些问题?
  4. 简单型的弱电机房工程汇报方案
  5. Species Tree(HashTable实现)
  6. Android之查看网络图片和网页HTML
  7. RuoYi-Cloud 部署篇_03(windows环境 mysql版本)
  8. 今日恐慌与贪婪指数为31 恐慌程度有所上升
  9. Flutter功能 之去除AppBar 阴影
  10. Prim POJ 2031 Building a Space Station
  11. python爬虫——爬取b站APP视频信息(通过fiddler抓包工具)
  12. 7、Lctech Pi(F1C200S)开启RNDIS,通过USB与电脑联网(CherryPi,Mangopi,F1C100S)
  13. Adreno Profiler分析任意安卓游戏特效+抓取资源
  14. 验证数据是否满足正态分布——Q-Q图和P-P图
  15. R-CNN文章详细解读
  16. HRSaaS系统和ERP系统有什么区别?
  17. 女生适合做软件开发工作吗?优势在哪里?
  18. 分享35套极其精美的高清桌面壁纸免费下载
  19. PHP+MYSQL 用户注册登录代码
  20. 爱立信也扛不住了?员工变外包,不接受拿N+1赔偿

热门文章

  1. vue3+tsx封装组件
  2. Linux服务部署-3构建nfs时间服务器
  3. 数组排序 向大佬低头 时间算法
  4. 面试经典必问:ReentrantLock 中CLH队列
  5. 温泉PHP网络授权系统,温泉PHP授权系统验证系统完整开源
  6. 安装软件时出现解析包出现问题是什么原因
  7. USB xHCI控制器使用总结
  8. 跨国族群布里亚特的特殊“年味儿”
  9. cura切片操作学习
  10. ExoPlayer播放器剖析(七)ExoPlayer对音频时间戳的处理