当前位置: 首页 > news >正文

机器学习笔记之最优化理论与方法(三)凸集的简单认识(下)

机器学习笔记之最优化理论与方法——凸集的简单认识[下]

  • 引言
    • 回顾:基本定义——凸集
    • 关于保持集合凸性的运算
      • 仿射变换
    • 凸集基本性质:投影定理
    • 点与凸集的分离
    • 支撑超平面定理

引言

继续凸集的简单认识(上)进行介绍,本节将介绍凸集的基本性质以及相关定理

回顾:基本定义——凸集

关于凸集 ( Convex Set ) (\text{Convex Set}) (Convex Set)定义可简单表述为:可行域 C \mathcal C C中任意两点间的连线,其连线上的任意一点仍在可行域 C \mathcal C C范围内。对应数学符号表示如下:
∀ x , y ∈ C ; ∀ λ ∈ [ 0 , 1 ] ⇒ λ ⋅ x + ( 1 − λ ) ⋅ y ∈ C \forall x,y \in \mathcal C;\forall \lambda \in [0,1] \Rightarrow \lambda \cdot x + (1 - \lambda) \cdot y \in \mathcal C x,yC;λ[0,1]λx+(1λ)yC
如果记线性规划 min ⁡ { c T x ∣ A x = b , x ≥ 0 } \min \{c^T x \mid \mathcal A x = b,x \geq 0\} min{cTxAx=b,x0}最优解组成的集合为 S \mathcal S S,那么 S \mathcal S S是否为凸集 ? ? ?

自然是凸集

  • 最优解集合 S \mathcal S S中任取两点 x 1 , x 2 ∈ S x_1,x_2 \in \mathcal S x1,x2S,必然有:
    其中这里 v ∗ v^* v记作可行域范围内,使 c T x c^Tx cTx达到最小的最优解。
    c T x 1 = c T x 2 = v ∗ c^Tx_1 = c^Tx_2 = v^* cTx1=cTx2=v
  • 根据凸集定义 ∀ λ ∈ [ 0 , 1 ] \forall \lambda \in [0,1] λ[0,1],观察 λ ⋅ x 1 + ( 1 − λ ) ⋅ x 2 \lambda \cdot x_1 + (1 - \lambda) \cdot x_2 λx1+(1λ)x2是否也在最优解集合 S \mathcal S S内即可。将该点代入有:
    c T [ λ ⋅ x 1 + ( 1 − λ ) ⋅ x 2 ] = λ ⋅ c T x 1 ⏟ v ∗ + ( 1 − λ ) ⋅ c T x 2 ⏟ v ∗ = v ∗ \begin{aligned} & \quad c^T[\lambda \cdot x_1 + (1 - \lambda) \cdot x_2] \\ & = \lambda \cdot \underbrace{c^Tx_1}_{v^*} + (1 - \lambda) \cdot \underbrace{c^Tx_2}_{v^*} \\ & = v^* \end{aligned} cT[λx1+(1λ)x2]=λv cTx1+(1λ)v cTx2=v
    可以看出: c T [ λ ⋅ x 1 + ( 1 − λ ) ⋅ x 2 ] c^T[\lambda \cdot x_1 + (1 - \lambda) \cdot x_2] cT[λx1+(1λ)x2]依然是最优解。也就是说: λ ⋅ x 1 + ( 1 − λ ) ⋅ x 2 ∈ S \lambda \cdot x_1 + (1 - \lambda) \cdot x_2 \in \mathcal S λx1+(1λ)x2S S \mathcal S S是凸集得证。

关于保持集合凸性的运算

所谓保持集合凸性的运算,即凸集执行一系列运算后,其结果是凸集的性质不发生变化

C 1 , C 2 ∈ R n \mathcal C_1,\mathcal C_2 \in \mathbb R^n C1,C2Rn,并且是凸集。则有:

  • 交集 C 1 ∩ C 2 = { x ∣ x ∈ C 1 , x ∈ C 2 } \mathcal C_1 \cap \mathcal C_2 = \{x \mid x \in \mathcal C_1,x \in \mathcal C_2\} C1C2={xxC1,xC2}同样是凸集
    相反,并集 C 1 ∪ C 2 \mathcal C_1 \cup \mathcal C_2 C1C2未必是凸集~
  • 关于集合的加减运算 C 1 ± C 2 = { x ± y ∣ x ∈ C 1 , y ∈ C 2 } \mathcal C_1 \pm \mathcal C_2 = \{x \pm y \mid x \in \mathcal C_1,y \in \mathcal C_2\} C1±C2={x±yxC1,yC2}同样是凸集

如果存在一个由 n n n维向量组成的集合 S \mathcal S S
{ S = { x ∈ R n ∣ ∣ P ( t ) ∣ ≤ 1 , ∣ t ∣ ≤ π 3 } P ( t ) = ∑ i = 1 n x i ⋅ cos ⁡ ( i ⋅ t ) \begin{cases} \begin{aligned} & \mathcal S = \left\{x \in \mathbb R^n \mid |\mathcal P(t)| \leq 1, |t| \leq \frac{\pi}{3} \right\} \\ & \mathcal P(t) = \sum_{i=1}^n x_i \cdot \cos (i \cdot t) \end{aligned} \end{cases} S={xRnP(t)1,t3π}P(t)=i=1nxicos(it)
那么集合 S \mathcal S S是否为凸集 ? ? ?

  • 首先,由于 S \mathcal S S是关于 x x x的集合,因而 P ( t ) \mathcal P(t) P(t)可看作是一个关于 x x x线性表达式。并且有:
    − 1 ≤ ∑ i = 1 n x i ⋅ cos ⁡ ( i ⋅ t ) ≤ 1 -1 \leq \sum_{i=1}^n x_i \cdot \cos (i \cdot t) \leq 1 1i=1nxicos(it)1
  • 如果 t t t给定,那么可以将上式视作: { ∑ i = 1 n x i ⋅ cos ⁡ ( i ⋅ t ) ≤ 1 ∑ i = 1 n x i ⋅ cos ⁡ ( i ⋅ t ) ≥ − 1 \begin{cases} \sum_{i=1}^n x_i \cdot \cos(i \cdot t) \leq 1 \\ \sum_{i=1}^n x_i \cdot \cos(i \cdot t) \geq -1 \\ \end{cases} {i=1nxicos(it)1i=1nxicos(it)1所描述的一对半空间的交集
  • 由于 − π 3 ≤ t ≤ π 3 \begin{aligned}-\frac{\pi}{3}\leq t \leq \frac{\pi}{3}\end{aligned} 3πt3π,是一个连续的范围,那么:可以在该范围内取出无穷个 t t t,从而得到无穷对半空间的交集。而半空间自身是凸集,那么无穷对半空间的交集同样是凸集。因而 S \mathcal S S是凸集。
    准确的说, S \mathcal S S是一个多面体。

如果 n = 2 n = 2 n=2,此时仅包含两个变量 x 1 , x 2 x_1,x_2 x1,x2。可以通过 2 2 2维图像的方式观察这个多面体凸集描述的范围。具体代码如下:
t t t固定的情况下,函数 ∣ P ( t ) ∣ = 1 ⇒ P ( t ) = ± 1 |\mathcal P(t)| = 1 \Rightarrow \mathcal P(t) = \pm1 P(t)=1P(t)=±1可看做是 ϕ ( x 1 , x 2 ) \phi(x_1,x_2) ϕ(x1,x2)的表示。令 ϕ ( x 1 , x 2 ) = P ( t ) ∓ 1 ≜ 0 \phi(x_1,x_2) = \mathcal P(t) \mp 1 \triangleq 0 ϕ(x1,x2)=P(t)10,从而得到 x 1 , x 2 x_1,x_2 x1,x2之间的函数关系:
x 1 ⋅ cos ⁡ t + x 2 ⋅ cos ⁡ ( 2 ⋅ t ) = ± 1 ⇒ x 1 = ± 1 − x 2 ⋅ cos ⁡ ( 2 ⋅ t ) cos ⁡ t \begin{aligned} & \quad x_1 \cdot \cos t + x_2 \cdot \cos (2 \cdot t) = \pm1 \\ & \Rightarrow x_1 = \pm\frac{1 - x_2 \cdot \cos (2 \cdot t)}{\cos t} \end{aligned} x1cost+x2cos(2t)=±1x1=±cost1x2cos(2t)

import numpy as np
import matplotlib.pyplot as plt
import mathx = np.linspace(-2.5,2,100)
tChoice = np.linspace(-1 * (math.pi / 3),math.pi / 3,30)def phi(x1,t):return (1 - x1 * math.cos(2 * t)) / math.cos(t)def phiTrans(x1,t):return (x1 * math.cos(2 * t) - 1) / math.cos(t)for t in tChoice:y = list()y2 = list()for x1 in x:y.append(phi(x1,t))y2.append(phiTrans(x1,t))plt.plot(x,y,c="tab:red")plt.plot(x,y2,c="tab:red")
plt.show()

对应图像结果表示如下:
中间围成的区域就是 n = 2 n=2 n=2条件下的多面体凸集 S \mathcal S S
多面体凸集示例

仿射变换

仿射变换 ( Affine Transformation ) (\text{Affine Transformation}) (Affine Transformation)同样是保持集合凸性的一种运算。具体描述如下:
需要注意的是:线性变换是特殊的仿射变换

假设函数 f ( ⋅ ) : R n ↦ R m f(\cdot):\mathbb R^n \mapsto \mathbb R^m f():RnRm仿射函数,即 f ( x ) = A x + b f(x) = \mathcal Ax + b f(x)=Ax+b。其中 A ∈ R m × n , b ∈ R m \mathcal A \in \mathbb R^{m \times n},b \in \mathbb R^{m} ARm×n,bRm,则有如下结论:
其中 f − 1 ( ⋅ ) f^{-1}(\cdot) f1()表示仿射函数 f ( ⋅ ) f(\cdot) f()的逆

  • 如果 C \mathcal C C凸集 ⇒ f ( C ) = { f ( x ) ∣ x ∈ C } \Rightarrow f(\mathcal C) = \{f(x) \mid x \in \mathcal C\} f(C)={f(x)xC}也是凸集
  • 如果 C \mathcal C C凸集 ⇒ f − 1 ( C ) = { x ∣ f ( x ) ∈ C } \Rightarrow f^{-1}(\mathcal C) = \{x \mid f(x) \in \mathcal C\} f1(C)={xf(x)C}也是凸集

以第一项为例:对于 ∀ y 1 , y 2 ∈ f ( C ) \forall y_1,y_2 \in f(\mathcal C) y1,y2f(C),必然有:
{ y 1 = A x 1 + b y 2 = A x 2 + b x 1 , x 2 ∈ C \begin{cases} y_1 = \mathcal Ax_1 + b \\ y_2 = \mathcal Ax_2 + b \end{cases}\quad x_1,x_2 \in \mathcal C {y1=Ax1+by2=Ax2+bx1,x2C
根据凸集的定义,对 ∀ λ ∈ [ 0 , 1 ] \forall \lambda \in [0,1] λ[0,1],将 λ ⋅ y 1 + ( 1 − λ ) ⋅ y 2 \lambda \cdot y_1 + (1 - \lambda) \cdot y_2 λy1+(1λ)y2展开,有:
λ ⋅ y 1 + ( 1 − λ ) ⋅ y 2 = λ ( A x 1 + b ) + ( 1 − λ ) ⋅ ( A x 2 + b ) = A [ λ ⋅ x 1 + ( 1 − λ ) ⋅ x 2 ] + b \begin{aligned} \lambda \cdot y_1 + (1 - \lambda) \cdot y_2 & = \lambda (\mathcal Ax_1 + b) + (1 - \lambda) \cdot(\mathcal Ax_2 + b) \\ & = \mathcal A [\lambda \cdot x_1 + (1 - \lambda) \cdot x_2] + b \end{aligned} λy1+(1λ)y2=λ(Ax1+b)+(1λ)(Ax2+b)=A[λx1+(1λ)x2]+b
由于 x 1 , x 2 ∈ C x_1,x_2 \in \mathcal C x1,x2C,且 C \mathcal C C凸集,必然有:
∀ λ ∈ [ 0 , 1 ] ⇒ λ ⋅ x 1 + ( 1 − λ ) ⋅ x 2 ∈ C \forall \lambda \in [0,1] \Rightarrow \lambda \cdot x_1 + (1 - \lambda) \cdot x_2 \in \mathcal C λ[0,1]λx1+(1λ)x2C
从而有:
λ ⋅ y 1 + ( 1 − λ ) ⋅ y 2 ∈ f ( C ) \lambda \cdot y_1 + (1 - \lambda) \cdot y_2 \in f(\mathcal C) λy1+(1λ)y2f(C)
因而 f ( C ) f(\mathcal C) f(C)也是凸集

一些特殊的仿射变换有:
其中 α , β \alpha,\beta α,β是常数。

  • 放缩 ( Scaling ) (\text{Scaling}) (Scaling)
    α ⋅ C = { α ⋅ x ∣ x ∈ C } \alpha \cdot \mathcal C = \{\alpha \cdot x \mid x \in \mathcal C\} αC={αxxC}
  • 平移 ( Translation ) (\text{Translation}) (Translation)
    β + C = { β + x ∣ x ∈ C } \beta+ \mathcal C = \{\beta+ x \mid x \in \mathcal C\} β+C={β+xxC}
  • 投影 ( Projection ) (\text{Projection}) (Projection)
    { x 1 ∣ ( x 1 x 2 ) ∈ C } \left\{x^1 \mid \begin{pmatrix}x^1 \\ x^2\end{pmatrix} \in \mathcal C\right\} {x1(x1x2)C}

对应示例图像表示如下:
特殊仿射变化示例

凸集基本性质:投影定理

投影定理描述如下:
假设 C ⊂ R n \mathcal C \subset \mathbb R^n CRn,是一个非空闭凸集 y ∈ R n y \in \mathbb R^n yRn y ∉ C y \notin \mathcal C y/C,有:

  • 存在唯一的点 x ˉ ∈ C \bar{x} \in \mathcal C xˉC,使得 x ˉ \bar{x} xˉ y y y C \mathcal C C的距离最小的点,且有:
    距离最小的点即投影点
    ∥ x ˉ − y ∥ = inf ⁡ { ∥ x − y ∥ ∣ x ∈ C } > 0 \|\bar {x} - y\| = \inf\{\|x - y\| \mid x \in \mathcal C\} > 0 xˉy=inf{xyxC}>0
  • x ˉ \bar{x} xˉ y y y C \mathcal C C最小距离点充要条件是:
    ( x − x ˉ ) T ( x ˉ − y ) ≤ 0 ∀ x ∈ C (x - \bar{x})^T (\bar{x} - y) \leq 0 \quad \forall x \in \mathcal C (xxˉ)T(xˉy)0xC

证明过程:

  • 存在性
    关于 y y y C \mathcal C C的距离,本质上是描述 y y y与凸集 C \mathcal C C中点的距离,假设 x ′ ∈ C x' \in \mathcal C xC,对应目标函数表示如下:
    这里使用二范数表示 x ′ x' x y y y之间的距离。
    min ⁡ f ( x ) = ∥ y − x ′ ∥ 2 2 \min f(x) = \|y - x'\|_2^2 minf(x)=yx22
    但我们要找的是距离最小的点,而这个 x ′ x' x可能并不是那个点。因而我们要找的距离最小点的可行域表示为:
    s.t.  x ∈ C ∩ N d ( y ) \text{s.t. } x \in \mathcal C \cap \mathcal N_d(y) s.t. xCNd(y)
    其中 d = ∣ ∣ y − x ′ ∣ ∣ 2 2 d = ||y - x'||_2^2 d=∣∣yx22;而 N d ( y ) \mathcal N_d(y) Nd(y)表示 y y y为圆心,半径为 d d d的圆所描述的范围。也就是说:如果 x ′ x' x不是距离最小点,并不需要重新从范围 C \mathcal C C中寻找点,只需要在交集内寻找距离最小点即可。对应图像表示如下:
    投影定理存在性示例
    由于 C \mathcal C C非空闭凸集,说明这个交集有界。在连续函数(距离函数)在有界空间内求最小值,那么该值必然可达

  • 唯一性(反证):
    对应图像表示如下~
    投影定理唯一性示例
    不妨设 x ′ , x ˉ ( x ˉ ≠ x ′ ) x',\bar{x}(\bar x \neq x') x,xˉ(xˉ=x)均是投影点,从而有:
    d = ∥ y − x ˉ ∥ 2 2 = ∥ y − x ′ ∥ 2 2 d = \|y - \bar{x}\|_2^2 = \|y - x'\|_2^2 d=yxˉ22=yx22
    由于 x ˉ ≠ x ′ \bar{x} \neq x' xˉ=x,连接两点,根据凸集合的定义:两点连线上的点必然也 ∈ C \in \mathcal C C。此时, x ′ , x ˉ , y x',\bar{x},y x,xˉ,y三个点构成一个等腰三角形,从而有:线段 x ˉ x ′ \bar{x}x' xˉx上的点到 y y y的距离必然小于 d d d。从而得出: x ˉ , x ′ \bar{x},x' xˉ,x不是投影点,这与假设冲突。因而 x ′ , x ˉ x',\bar{x} x,xˉ两点重合,投影点具有唯一性

  • 充要条件:观察下面图像:
    充要条件示例
    假设此时已经找到了投影点 x ˉ \bar{x} xˉ,必然有:

    • 向量 y − x ˉ y - \bar{x} yxˉ x ˉ \bar{x} xˉ在凸集 C \mathcal C C的切线垂直;
    • 并且凸集 C \mathcal C C中除去 x ˉ \bar{x} xˉ之外的其他点均与 y − x ˉ y - \bar{x} yxˉ处在由切线划分的不同的半空间

    从而有:向量 y − x ˉ y - \bar{x} yxˉ x − x ˉ ( ∀ x ∈ C ) x - \bar{x}(\forall x \in \mathcal C) xxˉ(xC)之间的夹角总是大于等于 9 0 。 90^。 90。即:
    等于 9 0 。 90^。 90 x , x ˉ x,\bar{x} x,xˉ重合~
    ( y − x ˉ ) T ( x − x ˉ ) = ∥ y − x ˉ ∥ ⋅ ∥ x − x ˉ ∥ cos ⁡ θ ≤ 0 (y - \bar{x})^T (x - \bar{x}) = \|y - \bar{x}\| \cdot \|x - \bar{x}\| \cos \theta \leq 0 (yxˉ)T(xxˉ)=yxˉxxˉcosθ0
    反之同理。

点与凸集的分离

定理描述如下:
假设 C 1 , C 2 \mathcal C_1,\mathcal C_2 C1,C2是两个非空凸集,若存在非零 α ∈ R n \alpha \in \mathbb R^n αRn b ∈ R b \in \mathbb R bR使得
或者写作: α T z ≤ α T x ∀ x ∈ C 1 , ∀ z ∈ C 2 \alpha^T z \leq \alpha^Tx \quad \forall x \in \mathcal C_1,\forall z \in \mathcal C_2 αTzαTxxC1,zC2
{ α T x ≥ b ∀ x ∈ C 1 α T z ≤ b ∀ z ∈ C 2 \begin{cases} \alpha^T x \geq b \quad \forall x \in \mathcal C_1 \\ \alpha^T z \leq b \quad \forall z \in \mathcal C_2 \end{cases} {αTxbxC1αTzbzC2
则称超平面 H = { x ∣ α T x = b } \mathcal H = \{x \mid \alpha^T x = b\} H={xαTx=b}分离集合 C 1 , C 2 \mathcal C_1,\mathcal C_2 C1,C2

严格分离
观察上述的分离定义,由于超平面可以取等,使得凸集 C 1 , C 2 \mathcal C_1,\mathcal C_2 C1,C2与超平面 H \mathcal H H之间可能存在交集。而严格分离定义在上述分离定义的基础上, C 1 , C 2 \mathcal C_1,\mathcal C_2 C1,C2均不与超平面 H \mathcal H H之间存在交集。即:
{ α T x > b ∀ x ∈ C 1 α T z < b ∀ z ∈ C 2 \begin{cases} \alpha^T x > b \quad \forall x \in \mathcal C_1 \\ \alpha^T z < b \quad \forall z \in \mathcal C_2 \end{cases} {αTx>bxC1αTz<bzC2
基于上述定义,从而有如下推论:

  • 两个不相交的非空凸集,它们一定能分离
    相反,如果存在集合不是凸集,那就不一定了~
  • 假设 C ⊂ R n \mathcal C \subset \mathbb R^n CRn非空闭凸集,点 y ∉ C y \notin \mathcal C y/C,必然存在超平面 H \mathcal H H y y y C \mathcal C C分离
    例如上面描述投影定理充要条件中的红色虚线。实际上:垂直于 y − x ˉ y - \bar{x} yxˉ并且经过线段 x ˉ y \bar{x}y xˉy上的超平面都是满足要求的
    { α = y − x ˉ α T ( y − x ) ≥ 0 ⇒ α T y ≥ α T x ∀ x ∈ C \begin{cases} \alpha = y - \bar{x} \\ \alpha^T(y - x) \geq 0 \Rightarrow \alpha^Ty \geq \alpha^T x \quad \forall x \in \mathcal C \end{cases} {α=yxˉαT(yx)0αTyαTxxC
    上面式子描述的向量 y − x y-x yx描述的是从凸集 C \mathcal C C中的任意一点指向 y y y的向量,而该向量和向量 y − x ˉ y - \bar{x} yxˉ之间的夹角必然是锐角

支撑超平面定理

定理描述如下:
假设 C ∈ R n \mathcal C \in \mathbb R^n CRn非空闭凸集,其中 x ˉ \bar{x} xˉ C \mathcal C C边界点 x ˉ ∈ ∂ C \bar{x} \in \partial \mathcal C xˉC,则存在非零向量 α ∈ R n \alpha \in \mathbb R^n αRn使得:
其中 ∂ C \partial \mathcal C C表示集合 C \mathcal C C边界点 int C \text{int} \mathcal C intC表示集合 C \mathcal C C不包含边界点的所有内点 c l C cl\mathcal C clC表示由内点、边界点构成的集合(闭包) ⇒ \Rightarrow 非空的闭凸集合
α T x ≤ α T x ˉ ∀ x ∈ c l C \alpha^T x \leq \alpha^T \bar{x} \quad \forall x \in \mathcal clC αTxαTxˉxclC
此时,也称超平面 H = { x ∈ R n ∣ α T x = α T x ˉ } \mathcal H = \{x \in \mathbb R^n \mid \alpha^T x = \alpha^T \bar{x}\} H={xRnαTx=αTxˉ}凸集 C \mathcal C C x ˉ \bar{x} xˉ处的支撑超平面。对应图像表示如下:
支撑超平面定理示例
证明过程
已知 x ˉ ∈ ∂ C \bar{x} \in \partial \mathcal C xˉC,要证: ∃ α ≠ 0 \exist \alpha \neq 0 α=0使得 α T x ≤ α T x ˉ ∀ x ∈ c l C \alpha^T x \leq \alpha^T \bar{x} \quad \forall x \in cl\mathcal C αTxαTxˉxclC

由于 x ˉ ∈ ∂ C \bar{x} \in \partial \mathcal C xˉC,则必然可以找到收敛于 x ˉ \bar{x} xˉ的点序列 { x k } ↦ x ˉ \{x_k\} \mapsto \bar{x} {xk}xˉ并且 { x k } ∉ c l C \{x_k\} \notin cl\mathcal C {xk}/clC
也就是说:这个点序列 { x k } \{x_k\} {xk}并不是从凸集 C \mathcal C C内找的,而是从集合之外找的

由于 x k ∉ c l C x_k \notin cl\mathcal C xk/clC,根据分离定理,存在超平面/非零法向量 α k \alpha_k αk,有:
也就是说:每一次迭代,总会找到相应的超平面 α k \alpha_k αk C \mathcal C C x k x_k xk做分离
α k T x ≤ α k T x k x ∈ c l C \alpha_k^T x \leq \alpha_k^T x_k \quad x \in cl\mathcal C αkTxαkTxkxclC
由于 α k \alpha_k αk法向量,我们更关注它的方向性而不是大小。因而不妨设 ∥ α k ∥ = 1 \|\alpha_k\| = 1 αk=1,则有:法向量序列 { α k } \{\alpha_k\} {αk}随着 { x k } \{x_k\} {xk}的迭代过程收敛到某位置。当 k ⇒ ∞ k \Rightarrow \infty k时,有:
α T x ˉ = lim ⁡ k ⇒ ∞ α k T ⋅ x k ≥ α T x x ∈ c l C \alpha^T \bar{x} = \mathop{\lim}\limits_{k \Rightarrow \infty} \alpha_k^T \cdot x_k \geq \alpha^T x \quad x \in cl\mathcal C αTxˉ=klimαkTxkαTxxclC
证毕。使用图像表示如下:
支撑超平面定理证明
相关参考:
最优化理论与方法-第二讲-凸集

相关文章:

机器学习笔记之最优化理论与方法(三)凸集的简单认识(下)

机器学习笔记之最优化理论与方法——凸集的简单认识[下] 引言回顾&#xff1a;基本定义——凸集关于保持集合凸性的运算仿射变换 凸集基本性质&#xff1a;投影定理点与凸集的分离支撑超平面定理 引言 继续凸集的简单认识(上)进行介绍&#xff0c;本节将介绍凸集的基本性质以及…...

Apipost:API文档、调试、Mock与测试的一体化协作平台

随着数字化转型的加速&#xff0c;API&#xff08;应用程序接口&#xff09;已经成为企业间沟通和数据交换的关键。而在API开发和管理过程中&#xff0c;API文档、调试、Mock和测试的协作显得尤为重要。Apipost正是这样一款一体化协作平台&#xff0c;旨在解决这些问题&#xf…...

Homebrew下载安装及使用教程

Homebrew是什么&#xff1f; 简单来说&#xff0c;就是用命令行的形式去管理mac系统的包或软件。 安装命令 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"国内请使用镜像源进行下载 执行上述命令后会要求输入…...

【Codeforces】CF193D Two Segments

题目链接 CF方向 Luogu方向 题目解法 考虑在值域上的问题&#xff1a;有多少段区间&#xff0c;对应在排列上不超过 2 2 2 段 肯定需要枚举一个端点&#xff0c;另一个快速算出&#xff0c;考虑枚举值域区间右端点 r r r&#xff0c;计算 l l l 可以发现&#xff0c;新增…...

内存管理概述

前言 在学习计算机科学时&#xff0c;内存管理是一个非常重要的概念。简单地说&#xff0c;内存是计算机用来存储和访问数据的地方。而内存管理是计算机系统如何分配、使用和管理内存的过程。 为什么要学习内存管理&#xff1f; 1. 高效性&#xff1a;内存管理能够帮助计算机更…...

Spring的重试机制-SpringRetry

在我们的日常开发中&#xff0c;经查会遇到调用接口失败的情况&#xff0c;这时候就需要通过一些方法来进行重试&#xff0c;比如通过while循环手动重复调用或&#xff0c;或者通过记录错误接口url和参数到数据库&#xff0c;然后手动调用接口&#xff0c;或者通过JDK/CGLib动态…...

水稻叶病害数据集(目标检测,yolo使用)

1.数据集文件夹 train文件夹&#xff08;44229张&#xff09;&#xff0c;test文件夹&#xff08;4741张&#xff09;&#xff0c;valid文件夹&#xff08;6000张&#xff09; 2.train文件夹展示 labels展示 标签txt展示 data.yaml文件展示 对数据集感兴趣的可以关注最后一行…...

鸿蒙系列-如何使用好 ArkUI 的 @Reusable?

如何使用好 ArkUI 的 Reusable&#xff1f; OpenHarmony 组件复用机制 在ArkUI中&#xff0c;UI显示的内容均为组件&#xff0c;由框架直接提供的称为 系统组件&#xff0c;由开发者定义的称为 自定义组件。 在进行 UI 界面开发时&#xff0c;通常不是简单的将系统组件进行组合…...

展锐平台音频框架

Audio DT介绍 1.概述 DT&#xff08;Device Tree&#xff09;是一种描述硬件的数据结构&#xff0c;DTS即设备树源码。 2.Audio DTS 文件架构 \bsp\kernel\kernel.4.14\arch\arm64\boot\sprd ums512.dts //SOC级相关节点 ——sc2730.dtsi //Codec ——sharkl5Pro.dts…...

webpack loader和plugins的区别

在Webpack中&#xff0c;Loader和Plugin是两个不同的概念&#xff0c;用于不同的目的。 Loader是用于处理非JavaScript模块的文件的转换工具。它们将文件作为输入&#xff0c;并将其转换为Webpack可以处理的模块。例如&#xff0c;当您在Webpack配置中使用Babel Loader时&…...

适配器模式:接口的平滑过渡

欢迎来到设计模式系列的第七篇文章&#xff01;在前面的几篇文章中&#xff0c;我们已经学习了一些常见的设计模式&#xff0c;今天我们将继续探讨另一个重要的设计模式——适配器模式。 适配器模式简介 适配器模式是一种结构型设计模式&#xff0c;它主要用于将一个类的接口…...

vscode搭建springboot开发环境

前言 idea好用到但是收money&#xff0c;eclipse免费但是界面有点丑&#xff0c;所以尝试使用vscode开发springboot 提前准备 安装jdk&#xff0c;jdk需要大于11 安装vscode 安装maven 安装插件 主要是下面的插件 Extension Pack for JavaSpring Boot Extension PackDepe…...

SpringMVC-学习笔记

文章目录 1.概述1.1 SpringMVC快速入门 2. 请求2.1 加载控制2.2 请求的映射路径2.3 get和post请求发送2.4 五种请求参数种类2.5 传递JSON数据2.6 日期类型参数传递 3.响应3.1 响应格式 4.REST风格4.1 介绍4.2 RESTful快速入门4.3 简化操作 1.概述 SpringMVC是一个基于Java的Web…...

【STM32】学习笔记(TIM定时器)

TIM&#xff08;Timer&#xff09;定时器 定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元&#xff0c;在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能&#xff0c;而且…...

Jdk8 动态编译 Java 源码为 Class 文件(三)

Jdk8 动态编译 Java 源码为 Class 文件 一.JDK版本二.工程介绍1.依赖2.启动类3.配置类&#xff08;用于测试依赖注入&#xff09;4.工具类1.Java 源码文件读取类2.SpringBoot 容器实例管理类 5.测试类1.抽象类2.接口类3.默认抽象实现4.默认接口实现 6.接口类1.测试接口2.类重载…...

Shell自动化日志维护脚本

简介&#xff1a; 系统日志对于了解操作系统的运行状况、故障排除和性能分析至关重要。然而&#xff0c;长期积累的日志文件可能变得庞大&#xff0c;影响系统性能。在这篇文章中&#xff0c;我们将介绍一个自动化的解决方案&#xff0c;使用 Bash 脚本来监控和维护系统日志文件…...

设计模式入门笔记

1 设计模式简介 在IT这个行业&#xff0c;技术日新月异&#xff0c;可能你今年刚弄懂一个编程框架&#xff0c;明年它就不流行了。 然而即使在易变的IT世界也有很多几乎不变的知识&#xff0c;他们晦涩而重要&#xff0c;默默的将程序员划分为卓越与平庸两类。比如说&#xff…...

存储成本降低85%,携程历史库场景的降本实践

携程&#xff0c;一家中国领先的在线票务服务公司&#xff0c;从 1999 年创立至今&#xff0c;数据库系统历经三次替换。在移动互联网时代&#xff0c;面对云计算卷积而来的海量数据&#xff0c;携程通过新的数据库方案实现存储成本降低 85% 左右&#xff0c;性能提升数倍。本文…...

如何精确掌握函数防抖和函数节流的使用?

前序 函数防抖&#xff08;Debouncing&#xff09;和函数节流&#xff08;Throttling&#xff09;都是用于控制函数执行频率的技术&#xff0c;通常在处理高频率触发的事件&#xff08;如窗口滚动、鼠标移动、输入框输入等&#xff09;时非常有用 一、核心概念 函数防抖 函…...

【Linux系列】离线安装openjdk17的rpm包

首发博客地址 首发博客地址[1] 系列文章地址[2] 视频地址[3] 准备 RPM 包 请从官网下载&#xff1a;https://www.oracle.com/java/technologies/downloads/#java17[4] 如需不限速下载&#xff0c;请关注【程序员朱永胜】并回复 1020 获取。 安装 yum localinstall jdk-17_linux…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...