拉格朗日乘子法与KKT条件核心原理(小白都能看懂)

2023-10-17 07:40

本文主要是介绍拉格朗日乘子法与KKT条件核心原理(小白都能看懂),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 问题背景
  • 等式约束条件下的最优化
  • 不等式约束条件下的最优化问题
  • 多条件约束下的最优化问题
  • KKT条件

问题背景

假设有一座山,山上有一条路。我们只能走在这条路上,其他的地方无法到达。在此基础上,我想知道我始终在路上的情况下,可能达到的最高点及其高度。

拉格朗日乘子法和KKT条件解决的正是这么个问题。我们想知道在某个约束条件(山间小路)的限制下,所能达到的最值点(最大高度)。是一个限制条件下的最优化问题。

拉格朗日乘子法的应用十分广泛,它是SVM的理论基础,是凸优化的重要研究部分。所以,我们细致地分析一下这一方法的内核。

等式约束条件下的最优化

我们先从最简单的开始,假设这条盘山公路的宽度无限趋近于于0。如下图所示(图片来自知乎)

图片名称

其实把这个问题抽象起来,就是
m i n f ( x ) s . t . g ( x ) = 0 min f(x)    s.t.g(x)=0 minf(x)   s.t.g(x)=0 g ( x ) = 0 g(x)=0 g(x)=0确实并不意味着约束条件一定是一条线,但是我们就先这么做着,后面你会发现是不是线其实无所谓)
(我这里的 x x x是指一个多维向量,不是一个值,是从一维泛化到了任意的维度)

这个式子本身其实不太好解,因为求 f ( x ) f(x) f(x)最小值这个操作本身就蕴含着很多东西,是一个比较复杂的操作,而且还需要考虑 g ( x ) g(x) g(x)的限制。但是我们可以把它变得容易一些,具体方法如下:

我们以山为例,向外做等高线,每次等高线都一定是个闭合曲线(因为山上点的高度不可能出现不连续的情况),第一次所作等高线如下:

图片名称

图中这条绿线就是一条等高线。做完后,我们发现不对径,这条等高线上所有点都不在公路 g ( x ) = 0 g(x)=0 g(x)=0上,也就是说,这个高度的所有点都是不符合约束条件的。

那咋办呢?,继续向外扩大等高线呗。

图片名称

我们假设降低高度至 h 0 h_0 h0后,等高线扩大成了这样(画得很丑请不要介意)。此时我们惊奇地发现。这条等高线和 g ( x ) = 0 g(x)=0 g(x)=0的曲线相切了(对不起,画得不太像)。也就是说,这条等高线上有一个点满足了限制条件。换个角度,就是有一个满足限制 g ( x ) = 0 g(x)=0 g(x)=0的点,它的高度为 h 0 h_0 h0。进一步说,也就是说, f ( x ) f(x) f(x)在满足限制条件 g ( x ) = 0 g(x)=0 g(x)=0的情况下是有可能等于 h 0 h_0 h0

如果我们把刚才这个过程从离散的变成连续的,那么就可以理解为,在高度取值在 ( h 0 , h m a x ] (h_0,h_{max}] (h0,hmax]的这段时期,等高线始终没有与公路有任何一个交点,当我们取到 h = h 0 h=h_0 h=h0时,第一次出现了一个交点,也就是上面说的 f ( x ) f(x) f(x)可能在满足限制条件 g ( x ) = 0 g(x)=0 g(x)=0的情况下取 h 0 h_0 h0。那么既然比 h 0 h_0 h0高的高度肯定取不到点,即无法满足限制条件, h 0 h_0 h0当然就是限制条件下的最高高度啦。

上面这个过程中,第一次有交点的时候是相切的切点,这是不是一个定论呢?答案是肯定的。因为假设交点不是二者的切点,说明 g ( x ) = 0 g(x)=0 g(x)=0在该点两侧一定分别在闭合曲面 f ( x ) = h f(x)=h f(x)=h外/内,而 f ( x ) = h f(x)=h f(x)=h又是一个闭合的曲线/面,那他们肯定还有另一个交点。(关于这一点,学过高斯定理的人应该也拿这个定理证明过通过任何闭合曲面的磁通量为0,具体为啥就当大家都能理解了)。我们以其中一个点 x 1 x_1 x1为例,设其梯度为 ▽ 1 \bigtriangledown_1 1,任何一个确定的梯度(除了这里根本考虑不到的一维)一定有无数个非全0线性组合 α \alpha α,可以使其在某个方向上导数为0。换言之, g ( x 1 + α ) = g ( x 1 ) + α ▽ 1 = 0 g(x1+\alpha)=g(x1)+\alpha \bigtriangledown_1=0 g(x1+α)=g(x1)+α1=0,但是既然不相切,那么 f ( x ) f(x) f(x)在该点的梯度 ▽ 2 \bigtriangledown_2 2一定满足 ∀ k ∈ R , ▽ 2 ≠ k ∗ ▽ 1 \forall k\in R, \bigtriangledown_2 \neq k*\bigtriangledown_1 kR,2=k1,那么这时候,如果 α ▽ 1 = α ▽ 2 = 0 \alpha\bigtriangledown_1=\alpha\bigtriangledown_2=0 α1=α2=0,我们假设有两个维度 i , j , s . t . ▽ 1 i ∗ ▽ 2 j ≠ ▽ 1 j ∗ ▽ 2 i i,j, s.t.\bigtriangledown_{1i}*\bigtriangledown_{2j}\neq\bigtriangledown_{1j}*\bigtriangledown_{2i} i,j,s.t.1i2j=1j2i,这个式子乍一看似乎有些难以理解,其实你把两边各除一个 ▽ 1 i ∗ ▽ 1 j \bigtriangledown_{1i}*\bigtriangledown_{1j} 1i1j会发现它表达的就是这两个维度上 ▽ 1 ▽ 2 \bigtriangledown_1\bigtriangledown_2 12不成相同的比例,只是多了一个对除0的保护。这个其实也很好证,如果每个维度二者比例都相同,那就意味着 ∃ k , ▽ 2 = k ▽ 1 \exist k, \bigtriangledown_2=k\bigtriangledown_1 k,2=k1,违背了我们一开始的假设。这个时候我们令 α ′ = α e x c e p t α i ′ = α i + δ / ▽ 1 i , α j ′ = α j − δ / ▽ 1 j \alpha'=\alpha  except  \alpha'_i=\alpha_i+\delta/\bigtriangledown_{1i}, \alpha'_j=\alpha_j-\delta/\bigtriangledown_{1j} α=α except αiαi+δ/1i,αj=αjδ/1j然后就会发现 ▽ 1 ∗ α i \bigtriangledown_1*\alpha_i 1αi的值没变,但是 ▽ 2 ∗ α \bigtriangledown_2*\alpha 2α增加了 δ ∗ ▽ 2 i ▽ 1 i − δ ∗ ▽ 2 j ▽ 1 j = δ ∗ ( ▽ 2 i ▽ 1 i − ▽ 2 j ▽ 1 j ) \frac{\delta*\bigtriangledown_{2i}}{\bigtriangledown_{1i}}-\frac{\delta*\bigtriangledown_{2j}}{\bigtriangledown_{1j}}=\delta*(\frac{\bigtriangledown_{2i}}{\bigtriangledown_{1i}}-\frac{\bigtriangledown_{2j}}{\bigtriangledown_{1j}}) 1iδ2i1jδ2j=δ(1i2i1j2j),由于我们前面说过 ▽ 1 i ∗ ▽ 2 j ≠ ▽ 1 j ∗ ▽ 2 i \bigtriangledown_{1i}*\bigtriangledown_{2j}\neq\bigtriangledown_{1j}*\bigtriangledown_{2i} 1i2j=1j2i,所以这个式子一定不是0。也就是说, ▽ 2 ∗ α i \bigtriangledown_2*\alpha_i 2αi一定改变了。

总的来说这个过程就是, ▽ 1 ∗ α i = 0 \bigtriangledown_1*\alpha_i=0 1αi=0,即 g ( x ) = 0 g(x)=0 g(x)=0,但是 ▽ 2 ∗ α i ≠ 0 \bigtriangledown_2*\alpha_i\neq 0 2αi=0,即 f ( x ) ≠ h f(x)\neq h f(x)=h。如果 f ( x ) < h f(x)<h f(x)<h我们就把 α \alpha α去取个相反数,总的来说,一定有办法取到更大的 f ( x ) f(x) f(x)。所以说,相交时一定不是 h h h的最值。进而得到,最值一定是相切时的切点取到

既然相切,那么 f ( x ) 和 g ( x ) f(x)和g(x) f(x)g(x)在这一点的梯度一定是成比例的(具体理解起来就是法向量一定成比例)。那么我们就得到了一个等式 ▽ f = λ ∗ ▽ g , λ ∈ R \bigtriangledown_f=\lambda*\bigtriangledown_g, \lambda\in R f=λg,λR这个式子有什么用呢?用处可大了。我们之前说过, m i n f ( x ) minf(x) minf(x)求起来是一个比较复杂的过程,但是这个方程求解起来就很容易,加上一开始的限制条件 g ( x ) = 0 g(x)=0 g(x)=0。我们就得到了一个方程组
{ ▽ f = λ ∗ ▽ g g ( x ) = 0 \left\{ \begin{aligned} \bigtriangledown_f=\lambda*\bigtriangledown_g \\ g(x)=0 \end{aligned} \right. {f=λgg(x)=0
假设 x x x是n维向量,这个方程组总共包含 n + 1 n+1 n+1个方程(梯度是一个向量,梯度等于0必须每一维都为0),恰好可以解出所有的 λ 和 x i \lambda和x_i λxi

我们注意到第二式子中的 g ( x ) g(x) g(x)其实满足 g ( x ) = − ∂ ( f ( x ) − λ g ( x ) ) ∂ λ g(x)=-\frac{\partial (f(x)-\lambda g(x))}{\partial \lambda} g(x)=λ(f(x)λg(x)),也就是说 g ( x ) = 0 ⇔ ∂ ( f ( x ) − λ g ( x ) ) ∂ λ = 0 g(x)=0 \Leftrightarrow \frac{\partial (f(x)-\lambda g(x))}{\partial \lambda}=0 g(x)=0λ(f(x)λg(x))=0,而第一个式子中每一维的式子都可以写成 ∂ ( f ( x ) − λ g ( x ) ) ∂ x i = 0 \frac{\partial (f(x)-\lambda g(x))}{\partial x_i}=0 xi(f(x)λg(x))=0。所以整合一下,整个方程组其实就是 ▽ ( f ( x ) − λ g ( x ) ) = 0 \bigtriangledown (f(x)-\lambda g(x))=0 (f(x)λg(x))=0。左边被求梯度的这个函数其实就是 L ( x , λ ) L(x,\lambda) L(x,λ),也就是我们的拉格朗日乘子。

换而言之,整个问题从一开始的求解 m i n f ( x ) s . t . g ( x ) = 0 min f(x)    s.t.g(x)=0 minf(x)   s.t.g(x)=0转换成了求解 ▽ L ( x , λ ) = 0 \bigtriangledown L(x,\lambda)=0 L(x,λ)=0这么做的意义在于新的问题其实就是一个解方程而已,处理难度远低于本来求限制最值的处理难度。而这,正是拉格朗日乘子法的神来之笔。

不等式约束条件下的最优化问题

接下来我们考虑限制条件从 g ( x ) = 0 g(x) = 0 g(x)=0变成 g ( x ) ≤ 0 g(x)\leq 0 g(x)0,现在我们的道路从一条线变成了一个有宽度的段(还是那句话,并不一定,但是我们先按一般情况这么算着)

图片名称

我们这里就假设两个红线之间的段是限制条件 g ( x ) < = 0 g(x)<=0 g(x)<=0的所在区间。我们要在这个段内寻找极值。(至于边界是不是 g ( x ) = 0 g(x)=0 g(x)=0这个就不一定了)

寻找极值时分为两种情况: g ( x ) = 0 g(x)=0 g(x)=0 g ( x ) < 0 g(x)<0 g(x)<0

  1. 首先考虑 g ( x ) = 0 g(x)=0 g(x)=0的情况,这种情况实际上就是我们一开始在模块一中提到的问题, m i n f ( x ) s . t . g ( x ) = 0 minf(x) s.t. g(x)=0 minf(x)s.t.g(x)=0。此时我们可以直接沿用前面的结论,即把问题转换为求 m i n x L ( x , λ ) min_xL(x,\lambda) minxL(x,λ)且其解满足 ▽ L ( x , λ ) = 0 \bigtriangledown L(x,\lambda)=0 L(x,λ)=0
  2. 其次是 g ( x ) < 0 g(x)<0 g(x)<0,我们首先给出结论:这种情况下的极值满足 ▽ f ( x ) = 0 \bigtriangledown f(x)=0 f(x)=0。现在我们给出证明。

我们采取反证法,假设最值点一个满足 g ( x ) < 0 g(x)<0 g(x)<0的约束条件且 ▽ f ( x ) ≠ 0 \bigtriangledown f(x)\neq 0 f(x)=0的点。既然 ▽ f ( x ) ≠ 0 \bigtriangledown f(x)\neq 0 f(x)=0,那么至少有一个方向上的梯度不为0。我们不妨假设这个维度叫 x i x_i xi。那么令 x ′ = x e x c e p t x i ′ = x i + δ ( δ > 0 ) x'=x  except x'_i=x_i+\delta(\delta>0) x=x except xi=xi+δ(δ>0) x ′ ′ = x e x c e p t x i ′ ′ = x i − δ ( δ > 0 ) x''=x except x''_i=x_i-\delta(\delta > 0) x=x except xi=xiδ(δ>0)那么就有 f ( x ′ ) = f ( x ) + ∂ f ( x ) ∂ x i ∗ δ f(x')=f(x)+\frac{\partial f(x)}{\partial x_i}*\delta f(x)=f(x)+xif(x)δ f ( x ′ ′ ) = f ( x ) − ∂ f ( x ) ∂ x i ∗ δ f(x'')=f(x)-\frac{\partial f(x)}{\partial x_i}*\delta f(x)=f(x)xif(x)δ我们之前提过, ∂ f ( x ) ∂ x i ≠ 0 \frac{\partial f(x)}{\partial x_i}\neq 0 xif(x)=0,所以说 ∂ f ( x ) ∂ x i ∗ δ \frac{\partial f(x)}{\partial x_i}*\delta xif(x)δ一定也是一个非零量。所以说 f ( x ′ ) 、 f ( x ′ ′ ) f(x')、f(x'') f(x)f(x)必定有一个大/小于 f ( x ) f(x) f(x)。这就说明 f ( x ) f(x) f(x)其实并非最值点,还有更大/小的。违背了初始题设,所以假设不成立。

这样我们就说明了 g ( x ) < 0 g(x)<0 g(x)<0约束下的极值点一定满足 ▽ f ( x ) = 0 \bigtriangledown f(x)=0 f(x)=0

现在我们把这两种情况结合起来。首先我们得明白,无论是 g ( x ) = 0 g(x)=0 g(x)=0还是 g ( x ) < 0 g(x)<0 g(x)<0,最值的取值点一定还是相切的,具体证明和上面一模一样。只不过从 g ( x ) = 0 g(x)=0 g(x)=0变成了 g ( x ) + b = 0 ( b > = 0 ) g(x)+b=0(b>=0) g(x)+b=0(b>=0)而已。本质上还是同一个函数。

那么就有前面得到的那个结论:梯度成比例。即 ▽ f = λ ▽ g , λ ≤ 0 \bigtriangledown_f=\lambda \bigtriangledown_g, \lambda \leq 0 f=λg,λ0。不过这一次的约束条件不再是等式了,而是不等式 g ( x ≤ 0 g(x\leq 0 g(x0,这样对我们的求解来说还是有困难,怎么办呢?

我们注意到, g ( x ) = 0 g(x)=0 g(x)=0 g ( x ) < 0 g(x)<0 g(x)<0的限制条件分别是 g ( x ) = 0 g(x)=0 g(x)=0 ▽ f ( x ) = 0 \bigtriangledown f(x)=0 f(x)=0,这两个限制条件都是等于0的等式,它们的结合很简单 g ( x ) ⋅ ▽ f ( x ) = 0 g(x)\cdot \bigtriangledown f(x)=0 g(x)f(x)=0

至此,我们得到了不等式约束条件下的拉格朗日乘子和求解条件。

原问题 m i n f ( x ) s . t . g ( x ) ≤ 0 minf(x) s.t.g(x)\leq0 minf(x) s.t.g(x)0转换为 m i n x , λ L ( x , λ ) s . t . g ( x ) ≤ 0 min_{x,\lambda}L(x,\lambda) s.t.g(x)\leq 0 minx,λL(x,λ) s.t.g(x)0解的条件满足

{ ▽ f = λ ∗ ▽ g g ( x ) ⋅ ▽ f ( x ) = 0 \left\{ \begin{aligned} \bigtriangledown_f=\lambda*\bigtriangledown_g \\ g(x)\cdot \bigtriangledown f(x)=0 \end{aligned} \right. {f=λgg(x)f(x)=0

多条件约束下的最优化问题

现在我们更进一步,现在需要满足的约束条件不再是一个,而是两个。比如山上有一条溪流和一条粮道,如果我们不在这其中的任意一条上都会饿/渴死。所以我们只能保证自己在它们的交集处。

问题抽象出来就是 m i n x f ( x ) s . t . g ( x ) = 0 a n d h ( x ) = 0 min_xf(x) s.t.g(x)=0  and  h(x)=0 minxf(x) s.t.g(x)=0 and h(x)=0

图片如下所示(图片来自知乎)

图片名称

这个是平面图,所以大家看到的两个约束条件的交集是一个点,这可能对我们对最优化过程的理解带来障碍。所以大家将就着拿这个图想象一下,假装它是一个三维的,这是它在 ( x , y ) (x,y) (x,y)上的投影。这样约束条件的交集就是一条线了。

这时候我们在扩大等值线的时候就不能简单地使其和一条线有交点了,我们需要保证它和两个约束条件都有交点。

老规矩,第一次有交点的时候必然是相切的,这一点依然不变。虽然这一次的限制条件是两个限制条件的交集,但没有办法否认它依然是连续的域,脱离了两个限制条件,它仍然是一般性的连续曲线/面/超平面。所以原来的条件依然有效。

▽ f \bigtriangledown_f f依然是本来的求法,这个没啥问题,但是 ▽ g \bigtriangledown_g g就不太一样了。因为这次我们不知道曲线本身的公式,我们只知道它是两个面的交集。

关于原约束条件

{ g ( x ) = 0 h ( x ) = 0 \left\{ \begin{aligned} g(x)=0 \\ h(x)=0 \end{aligned} \right. {g(x)=0h(x)=0

我们设其交集区域方程为 γ = γ ( t ) = ( x 1 ( t ) , x 2 ( t ) . . . . . . x n ( t ) ) \gamma=\gamma(t)=(x_1(t), x_2(t)......x_n(t)) γ=γ(t)=(x1(t),x2(t)......xn(t)),所以 g ( x ) = g ( γ ( t ) ) g(x)=g(\gamma (t)) g(x)=g(γ(t))

随后我们可以得到 0 = ∂ g ∂ t = ∂ g ∂ γ d γ d t 0=\frac{\partial g}{\partial t}=\frac{\partial g}{\partial \gamma}\frac{d\gamma}{dt} 0=tg=γgdtdγ

这其中 ∂ g ∂ γ = ( ∂ g ∂ x 1 , ∂ g ∂ x 2 , . . . . . . , ∂ g ∂ x n ) , d γ d t = ( d x 1 d t , d x 2 d t , . . . . . . , d x n d t ) \frac{\partial g}{\partial \gamma}=(\frac{\partial g}{\partial x_1}, \frac{\partial g}{\partial x_2}, ......, \frac{\partial g}{\partial x_n}), \frac{d\gamma}{dt}=(\frac{dx_1}{dt}, \frac{dx_2}{dt},......, \frac{dx_n}{dt}) γg=(x1g,x2g,......,xng),dtdγ=(dtdx1,dtdx2,......,dtdxn)

前者是 g ( x ) g(x) g(x)的梯度,后者是 γ ( t ) \gamma(t) γ(t)的切向量。

换言之, γ ( t ) \gamma(t) γ(t)的切向量肯定与 g ( x ) g(x) g(x)的梯度垂直,同理, γ ( t ) \gamma(t) γ(t)的切向量还与 h ( x ) h(x) h(x)的梯度垂直。

这也就意味着, γ ( t ) \gamma(t) γ(t)的切向量在 g ( x ) g(x) g(x) h ( x ) h(x) h(x)梯度组成的超平面内。所以说, γ ( t ) \gamma(t) γ(t)的切向量一定可以用 a ∗ g ( x ) + b ∗ h ( x ) , a ∈ R , b ∈ R a*g(x)+b*h(x), a\in R, b\in R ag(x)+bh(x),aR,bR来线性表示。

所以说,这一次我们能得到的梯度关系是 ▽ f = a ▽ g + b ▽ h , a ∈ R , b ∈ R \bigtriangledown_f=a\bigtriangledown_g+b\bigtriangledown_h, a\in R, b\in R f=ag+bh,aR,bR

所以,我们得到的式子是 L ( x , a , b ) = f ( x ) + a ∗ g ( x ) + b ∗ h ( x ) L(x, a, b) = f(x)+a*g(x)+b*h(x) L(x,a,b)=f(x)+ag(x)+bh(x)这个式子加上约束条件,就是我们的KKT条件。

KKT条件

所谓的KKT条件,是指对一类符合条件的所有拉格朗日乘子法问题进行公式化求解的过程。具体指的是满足 m i n / m a x x f ( x ) min/max_xf(x) min/maxxf(x) s . t . g i ( x ) ≤ 0 i = 1 , 2 , . . . . . . , m s.t. g_i(x)\leq0 i=1,2,......,m s.t. gi(x)0 i=1,2,......,m h j ( x ) = 0 j = 1 , 2 , . . . . . . , p h_j(x)=0 j=1,2,......,p hj(x)=0 j=1,2,......,p的一类问题。

其实整个求解过程就是把我们上面三种情况综合起来。因为每一步都是我们上面三种问题的其中一种。具体来说,KKT条件就是给出了上面的问题求解等价于求解 m i n / m a x x , α , β L ( x , α , β ) = f ( x ) + ∑ i = 1 m α i g i ( x ) + ∑ j = 1 p β j h j ( x ) min/max_{x, \alpha, \beta}L(x,\alpha, \beta)=f(x)+\sum^m_{i=1}\alpha_ig_i(x)+\sum^p_{j=1}\beta_jh_j(x) min/maxx,α,βL(x,α,β)=f(x)+i=1mαigi(x)+j=1pβjhj(x) s . t . α i g i ( x ) = 0 s.t. \alpha_ig_i(x)=0 s.t. αigi(x)=0 h j ( x ) = 0 h_j(x)=0 hj(x)=0 α i ≥ 0 \alpha_i\geq0 αi0 g i ( x ) ≤ 0 g_i(x)\leq0 gi(x)0 i = 1 , 2 , . . . . . . , m j = 1 , 2 , . . . . . . , p i=1,2,......,m j=1,2,......,p i=1,2,......,m j=1,2,......,p是不是每个式子你都在上面三种问题中见过。而且每个式子我们都证明过。所以这里不再赘述。

这么一看,是不是无论是拉格朗日乘子法还是KKT条件都是如此的自然而直观。愿本文能对你有所帮助。

这篇关于拉格朗日乘子法与KKT条件核心原理(小白都能看懂)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/223941

相关文章

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

Python按条件批量删除TXT文件行工具

《Python按条件批量删除TXT文件行工具》这篇文章主要为大家详细介绍了Python如何实现按条件批量删除TXT文件中行的工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.简介2.运行效果3.相关源码1.简介一个由python编写android的可根据TXT文件按条件批

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

hdu4407容斥原理

题意: 有一个元素为 1~n 的数列{An},有2种操作(1000次): 1、求某段区间 [a,b] 中与 p 互质的数的和。 2、将数列中某个位置元素的值改变。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.Inpu