约束优化技术:KKT条件的完整推导与应用
前言
本文隶属于专栏《机器学习数学通关指南》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!
本专栏目录结构和参考文献请见《机器学习数学通关指南》
ima 知识库
知识库广场搜索:
| 知识库 | 创建人 |
|---|---|
| 机器学习 | @Shockang |
| 机器学习数学基础 | @Shockang |
| 深度学习 | @Shockang |
正文

在约束优化的世界里,KKT条件就像是一把钥匙,为我们打开了复杂问题的解决之门 🔑
🔍 一、KKT条件概述
1.1 什么是KKT条件?
KKT条件(Karush-Kuhn-Tucker条件)是非线性约束优化问题的必要条件,尤其适用于含不等式约束的优化问题。它扩展了拉格朗日乘数法,成为现代优化理论和机器学习算法的基石。
1.2 问题形式化
考虑标准形式的约束优化问题:
min x f ( x ) s.t. g i ( x ) ≤ 0 , i = 1 , 2 , … , m h j ( x ) = 0 , j = 1 , 2 , … , p \begin{aligned} \min_{\boldsymbol{x}} \quad & f(\boldsymbol{x}) \\ \text{s.t.} \quad & g_i(\boldsymbol{x}) \leq 0, \quad i=1,2,\ldots,m \\ & h_j(\boldsymbol{x}) = 0, \quad j=1,2,\ldots,p \end{aligned} xmins.t.f(x)gi(x)≤0,i=1,2,…,mhj(x)=0,j=1,2,…,p
其中 f ( x ) f(\boldsymbol{x}) f(x) 是目标函数, g i ( x ) g_i(\boldsymbol{x}) gi(x) 是不等式约束, h j ( x ) h_j(\boldsymbol{x}) hj(x) 是等式约束。
🧩 二、KKT条件的完整推导
2.1 构建拉格朗日函数 ⚙️
首先构造拉格朗日函数,将约束优化问题转换为无约束形式:
L ( x , μ , λ ) = f ( x ) + ∑ i = 1 m μ i g i ( x ) + ∑ j = 1 p λ j h j ( x ) \mathcal{L}(\boldsymbol{x}, \boldsymbol{\mu}, \boldsymbol{\lambda}) = f(\boldsymbol{x}) + \sum_{i=1}^m \mu_i g_i(\boldsymbol{x}) + \sum_{j=1}^p \lambda_j h_j(\boldsymbol{x}) L(x,μ,λ)=f(x)+∑i=1mμigi(x)+∑j=1pλjhj(x)
其中:
- μ = ( μ 1 , μ 2 , . . . , μ m ) \boldsymbol{\mu} = (\mu_1, \mu_2, ..., \mu_m) μ=(μ1,μ2,...,μm) 是不等式约束的拉格朗日乘子
- λ = ( λ 1 , λ 2 , . . . , λ p ) \boldsymbol{\lambda} = (\lambda_1, \lambda_2, ..., \lambda_p) λ=(λ1,λ2,...,λp) 是等式约束的拉格朗日乘子
2.2 KKT条件的四个要素 📋
假设 x ∗ \boldsymbol{x}^* x∗ 是原问题的局部最优解,且满足约束规范条件(如LICQ),则存在唯一的拉格朗日乘子 μ ∗ \boldsymbol{\mu}^* μ∗ 和 λ ∗ \boldsymbol{\lambda}^* λ∗,使得以下KKT条件全部成立:
1️⃣ 稳定性条件(Stationarity)
拉格朗日函数对变量 x \boldsymbol{x} x 的梯度在最优点处为零:
∇ f ( x ∗ ) + ∑ i = 1 m μ i ∗ ∇ g i ( x ∗ ) + ∑ j = 1 p λ j ∗ ∇ h j ( x ∗ ) = 0 \nabla f(\boldsymbol{x}^*) + \sum_{i=1}^m \mu_i^* \nabla g_i(\boldsymbol{x}^*) + \sum_{j=1}^p \lambda_j^* \nabla h_j(\boldsymbol{x}^*) = \boldsymbol{0} ∇f(x∗)+∑i=1mμi∗∇gi(x∗)+∑j=1pλj∗∇hj(x∗)=0
2️⃣ 原始可行性(Primal Feasibility)
最优解必须满足所有原始约束:
g i ( x ∗ ) ≤ 0 , i = 1 , 2 , … , m g_i(\boldsymbol{x}^*) \leq 0, \quad i=1,2,\ldots,m gi(x∗)≤0,i=1,2,…,m
h j ( x ∗ ) = 0 , j = 1 , 2 , … , p h_j(\boldsymbol{x}^*) = 0, \quad j=1,2,\ldots,p hj(x∗)=0,j=1,2,…,p
3️⃣ 对偶可行性(Dual Feasibility)
不等式约束的拉格朗日乘子必须非负:
μ i ∗ ≥ 0 , i = 1 , 2 , … , m \mu_i^* \geq 0, \quad i=1,2,\ldots,m μi∗≥0,i=1,2,…,m
4️⃣ 互补松弛性(Complementary Slackness) 🔄
每个不等式约束与其对应的拉格朗日乘子的乘积必须为零:
μ i ∗ ⋅ g i ( x ∗ ) = 0 , i = 1 , 2 , … , m \mu_i^* \cdot g_i(\boldsymbol{x}^*) = 0, \quad i=1,2,\ldots,m μi∗⋅gi(x∗)=0,i=1,2,…,m
2.3 互补松弛条件的几何解释 🌈
互补松弛条件表明:
- 若 g i ( x ∗ ) < 0 g_i(\boldsymbol{x}^*) < 0 gi(x∗)<0(约束不活跃),则 μ i ∗ = 0 \mu_i^* = 0 μi∗=0
- 若 μ i ∗ > 0 \mu_i^* > 0 μi∗>0(约束"有价值"),则 g i ( x ∗ ) = 0 g_i(\boldsymbol{x}^*) = 0 gi(x∗)=0(约束边界)
这实际上意味着:只有活跃约束(达到边界的约束)才会对最优解产生影响。
🔬 三、KKT条件在机器学习中的应用
3.1 支持向量机(SVM)中的KKT条件 🤖
问题建模
线性硬间隔SVM的优化问题:
min w , b 1 2 ∥ w ∥ 2 s.t. y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , … , n \begin{aligned} \min_{\boldsymbol{w},b} \quad & \frac{1}{2}\|\boldsymbol{w}\|^2 \\ \text{s.t.} \quad & y_i(\boldsymbol{w}^T \boldsymbol{x}_i + b) \geq 1, \quad i=1,2,\ldots,n \end{aligned} w,bmins.t.21∥w∥2yi(wTxi+b)≥1,i=1,2,…,n
KKT条件分析
构造拉格朗日函数:
L ( w , b , α ) = 1 2 ∥ w ∥ 2 − ∑ i = 1 n α i [ y i ( w T x i + b ) − 1 ] \mathcal{L}(\boldsymbol{w}, b, \boldsymbol{\alpha}) = \frac{1}{2}\|\boldsymbol{w}\|^2 - \sum_{i=1}^n \alpha_i[y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b) - 1] L(w,b,α)=21∥w∥2−∑i=1nαi[yi(wTxi+b)−1]
应用KKT条件:
-
稳定性条件:
∂ L ∂ w = w − ∑ i = 1 n α i y i x i = 0 ⇒ w = ∑ i = 1 n α i y i x i \frac{\partial \mathcal{L}}{\partial \boldsymbol{w}} = \boldsymbol{w} - \sum_{i=1}^n \alpha_i y_i \boldsymbol{x}_i = \boldsymbol{0} \Rightarrow \boldsymbol{w} = \sum_{i=1}^n \alpha_i y_i \boldsymbol{x}_i ∂w∂L=w−∑i=1nαiyixi=0⇒w=∑i=1nαiyixi
∂ L ∂ b = − ∑ i = 1 n α i y i = 0 \frac{\partial \mathcal{L}}{\partial b} = -\sum_{i=1}^n \alpha_i y_i = 0 ∂b∂L=−∑i=1nαiyi=0 -
互补松弛条件:
α i [ y i ( w T x i + b ) − 1 ] = 0 , i = 1 , 2 , … , n \alpha_i [y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b) - 1] = 0, \quad i=1,2,\ldots,n αi[yi(wTxi+b)−1]=0,i=1,2,…,n
支持向量的选择 ✨
互补松弛条件揭示了SVM的核心特性:
- 只有当样本点位于间隔边界上( y i ( w T x i + b ) = 1 y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b) = 1 yi(wTxi+b)=1)时,才有 α i > 0 \alpha_i > 0 αi>0
- 这些点就是支持向量,仅占训练样本的一小部分
- 非支持向量的 α i = 0 \alpha_i = 0 αi=0,不影响决策函数
对偶形式
通过KKT条件,SVM优化转化为对偶问题:
max α ∑ i = 1 n α i − 1 2 ∑ i = 1 n ∑ j = 1 n α i α j y i y j x i T x j s.t. ∑ i = 1 n α i y i = 0 α i ≥ 0 , i = 1 , 2 , … , n \begin{aligned} \max_{\boldsymbol{\alpha}} \quad & \sum_{i=1}^n \alpha_i - \frac{1}{2}\sum_{i=1}^n\sum_{j=1}^n \alpha_i \alpha_j y_i y_j \boldsymbol{x}_i^T \boldsymbol{x}_j \\ \text{s.t.} \quad & \sum_{i=1}^n \alpha_i y_i = 0 \\ & \alpha_i \geq 0, \quad i=1,2,\ldots,n \end{aligned} αmaxs.t.i=1∑nαi−21i=1∑nj=1∑nαiαjyiyjxiTxji=1∑nαiyi=0αi≥0,i=1,2,…,n
决策函数为:
f ( x ) = ∑ i = 1 n α i y i x i T x + b f(\boldsymbol{x}) = \sum_{i=1}^n \alpha_i y_i \boldsymbol{x}_i^T \boldsymbol{x} + b f(x)=∑i=1nαiyixiTx+b
3.2 软间隔SVM与正则化 🔄
引入松弛变量 ξ i \xi_i ξi 后的优化问题:
min w , b , ξ 1 2 ∥ w ∥ 2 + C ∑ i = 1 n ξ i s.t. y i ( w T x i + b ) ≥ 1 − ξ i , i = 1 , 2 , … , n ξ i ≥ 0 , i = 1 , 2 , … , n \begin{aligned} \min_{\boldsymbol{w},b,\boldsymbol{\xi}} \quad & \frac{1}{2}\|\boldsymbol{w}\|^2 + C\sum_{i=1}^n \xi_i \\ \text{s.t.} \quad & y_i(\boldsymbol{w}^T \boldsymbol{x}_i + b) \geq 1 - \xi_i, \quad i=1,2,\ldots,n \\ & \xi_i \geq 0, \quad i=1,2,\ldots,n \end{aligned} w,b,ξmins.t.21∥w∥2+Ci=1∑nξiyi(wTxi+b)≥1−ξi,i=1,2,…,nξi≥0,i=1,2,…,n
KKT条件扩展:
- 互补松弛条件: α i [ y i ( w T x i + b ) − 1 + ξ i ] = 0 \alpha_i [y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b) - 1 + \xi_i] = 0 αi[yi(wTxi+b)−1+ξi]=0
- 附加条件: ( C − α i ) ξ i = 0 (C - \alpha_i)\xi_i = 0 (C−αi)ξi=0
该条件将样本分为三类:
- α i = 0 \alpha_i = 0 αi=0:非支持向量(远离间隔边界)
- 0 < α i < C 0 < \alpha_i < C 0<αi<C:支持向量,恰好在间隔边界上( ξ i = 0 \xi_i = 0 ξi=0)
- α i = C \alpha_i = C αi=C:支持向量,位于间隔内部或错误一侧( ξ i > 0 \xi_i > 0 ξi>0)
3.3 实现:SMO算法与KKT条件 🛠️
序列最小优化(SMO)算法是求解SVM的经典方法,其核心思想就是利用KKT条件:
- 选择变量对:寻找最违反KKT条件的两个样本作为工作集
- 优化步骤:固定其他变量,只优化选中的两个变量
- KKT违反度检查:
- 对于边界支持向量( 0 < α i < C 0 < \alpha_i < C 0<αi<C),应满足 y i f ( x i ) = 1 y_i f(\boldsymbol{x}_i) = 1 yif(xi)=1
- 对于非支持向量( α i = 0 \alpha_i = 0 αi=0),应满足 y i f ( x i ) > 1 y_i f(\boldsymbol{x}_i) > 1 yif(xi)>1
- 对于边界外支持向量( α i = C \alpha_i = C αi=C),应满足 y i f ( x i ) < 1 y_i f(\boldsymbol{x}_i) < 1 yif(xi)<1
# SMO算法中KKT条件检查的简化代码示例
def check_kkt_violation(alpha, y, C, kernel_matrix, b):f_pred = np.dot(kernel_matrix, alpha * y) + by_pred = y * f_pred# 检查KKT违反情况kkt_violation = np.zeros(len(alpha))# 情况1: 0 < alpha < C,应该在间隔边界上idx1 = np.where((alpha > 0) & (alpha < C))[0]kkt_violation[idx1] = np.abs(y_pred[idx1] - 1)# 情况2: alpha = 0,应该满足y*f >= 1idx2 = np.where(alpha == 0)[0]# 只有违反约束才计入违反度violation2 = 1 - y_pred[idx2]kkt_violation[idx2] = np.maximum(0, violation2)# 情况3: alpha = C,应该满足y*f <= 1idx3 = np.where(alpha == C)[0]violation3 = y_pred[idx3] - 1kkt_violation[idx3] = np.maximum(0, violation3)return kkt_violation
3.4 支持向量回归(SVR)中的KKT条件 📈
SVR优化问题形式:
min w , b , ξ , ξ ∗ 1 2 ∥ w ∥ 2 + C ∑ i = 1 n ( ξ i + ξ i ∗ ) s.t. y i − ( w T x i + b ) ≤ ε + ξ i ( w T x i + b ) − y i ≤ ε + ξ i ∗ ξ i , ξ i ∗ ≥ 0 \begin{aligned} \min_{\boldsymbol{w},b,\boldsymbol{\xi},\boldsymbol{\xi}^*} \quad & \frac{1}{2}\|\boldsymbol{w}\|^2 + C\sum_{i=1}^n (\xi_i + \xi_i^*) \\ \text{s.t.} \quad & y_i - (\boldsymbol{w}^T \boldsymbol{x}_i + b) \leq \varepsilon + \xi_i \\ & (\boldsymbol{w}^T \boldsymbol{x}_i + b) - y_i \leq \varepsilon + \xi_i^* \\ & \xi_i, \xi_i^* \geq 0 \end{aligned} w,b,ξ,ξ∗mins.t.21∥w∥2+Ci=1∑n(ξi+ξi∗)yi−(wTxi+b)≤ε+ξi(wTxi+b)−yi≤ε+ξi∗ξi,ξi∗≥0
关键KKT条件:
- 互补松弛: α i ( ε + ξ i − y i + w T x i + b ) = 0 \alpha_i(\varepsilon + \xi_i - y_i + \boldsymbol{w}^T \boldsymbol{x}_i + b) = 0 αi(ε+ξi−yi+wTxi+b)=0
- 互补松弛: α i ∗ ( ε + ξ i ∗ + y i − w T x i − b ) = 0 \alpha_i^*(\varepsilon + \xi_i^* + y_i - \boldsymbol{w}^T \boldsymbol{x}_i - b) = 0 αi∗(ε+ξi∗+yi−wTxi−b)=0
- 附加条件: ( C − α i ) ξ i = 0 (C - \alpha_i)\xi_i = 0 (C−αi)ξi=0, ( C − α i ∗ ) ξ i ∗ = 0 (C - \alpha_i^*)\xi_i^* = 0 (C−αi∗)ξi∗=0
SVR中的支持向量是那些不在ε-管道内部的样本点( α i > 0 \alpha_i > 0 αi>0 或 α i ∗ > 0 \alpha_i^* > 0 αi∗>0)。
🔮 四、深入理解:KKT条件的扩展与高级应用
4.1 KKT条件与凸优化的关系 🧠
对于凸优化问题(目标函数凸,不等式约束函数凸,等式约束线性),在满足Slater条件的情况下,KKT条件不仅是最优解的必要条件,还是充分条件。
Slater条件说明:存在至少一个严格可行点,即所有不等式约束都严格满足( g i ( x ) < 0 g_i(\boldsymbol{x}) < 0 gi(x)<0)。
4.2 内点法与障碍函数 🚧
现代凸优化求解器(如IPM)通过转换KKT条件实现高效求解:
- 引入对数障碍函数处理不等式约束: − μ ∑ i = 1 m log ( − g i ( x ) ) -\mu \sum_{i=1}^m \log(-g_i(\boldsymbol{x})) −μ∑i=1mlog(−gi(x))
- 求解一系列参数为 μ \mu μ 的近似KKT系统,逐渐减小 μ \mu μ 接近真实解
- 中心路径概念:不同 μ \mu μ 值下KKT点的轨迹
4.3 非凸问题中的KKT条件 ⚠️
在非凸优化中,KKT条件仅是局部最优的必要条件,可能存在多个满足KKT条件的点:
- 局部最小值:满足二阶充分条件的KKT点
- 局部最大值:满足对应的二阶条件的KKT点
- 鞍点:既不是局部最小也不是局部最大的KKT点
深度学习优化:梯度下降类算法本质上是寻找满足KKT条件的点(梯度为零)。
🧪 五、实践应用与技巧
5.1 检验KKT条件的数值方法 🔍
在实际优化过程中,检验KKT条件的满足程度是评估算法收敛性的重要指标:
def check_kkt_conditions(x, grad_f, constraints_g, constraints_h, grad_g, grad_h, mu, lambda_):"""检查KKT条件的满足程度"""# 1. 梯度条件grad_lagrangian = grad_f(x)for i in range(len(mu)):grad_lagrangian += mu[i] * grad_g[i](x)for j in range(len(lambda_)):grad_lagrangian += lambda_[j] * grad_h[j](x)stationarity_residual = np.linalg.norm(grad_lagrangian)# 2. 原始可行性primal_residual_g = np.maximum(0, constraints_g(x))primal_residual_h = np.abs(constraints_h(x))# 3. 对偶可行性dual_residual = np.minimum(0, mu)# 4. 互补松弛性comp_slack_residual = np.abs(mu * constraints_g(x))return {"stationarity": stationarity_residual,"primal_g": np.linalg.norm(primal_residual_g),"primal_h": np.linalg.norm(primal_residual_h),"dual": np.linalg.norm(dual_residual),"comp_slack": np.linalg.norm(comp_slack_residual)}
5.2 KKT条件在特征选择中的应用:LASSO 📊
L1正则化(LASSO)优化问题:
min w 1 2 ∥ X w − y ∥ 2 2 + λ ∥ w ∥ 1 \min_{\boldsymbol{w}} \frac{1}{2}\|\boldsymbol{X}\boldsymbol{w} - \boldsymbol{y}\|_2^2 + \lambda\|\boldsymbol{w}\|_1 minw21∥Xw−y∥22+λ∥w∥1
可以转化为带约束的形式:
min w , u , v 1 2 ∥ X w − y ∥ 2 2 + λ ∑ j = 1 p ( u j + v j ) s.t. w j = u j − v j , j = 1 , 2 , … , p u j , v j ≥ 0 , j = 1 , 2 , … , p \begin{aligned} \min_{\boldsymbol{w},\boldsymbol{u},\boldsymbol{v}} \quad & \frac{1}{2}\|\boldsymbol{X}\boldsymbol{w} - \boldsymbol{y}\|_2^2 + \lambda\sum_{j=1}^p (u_j + v_j) \\ \text{s.t.} \quad & w_j = u_j - v_j, \quad j=1,2,\ldots,p \\ & u_j, v_j \geq 0, \quad j=1,2,\ldots,p \end{aligned} w,u,vmins.t.21∥Xw−y∥22+λj=1∑p(uj+vj)wj=uj−vj,j=1,2,…,puj,vj≥0,j=1,2,…,p
KKT条件显示:
- 当 ∣ X j T ( X w − y ) ∣ < λ |X_j^T(Xw - y)| < \lambda ∣XjT(Xw−y)∣<λ 时, w j = 0 w_j = 0 wj=0
- 当 X j T ( X w − y ) = − λ X_j^T(Xw - y) = -\lambda XjT(Xw−y)=−λ 时, w j > 0 w_j > 0 wj>0
- 当 X j T ( X w − y ) = λ X_j^T(Xw - y) = \lambda XjT(Xw−y)=λ 时, w j < 0 w_j < 0 wj<0
这解释了LASSO如何自动执行特征选择,使权重稀疏化。
🏆 六、总结与拓展
6.1 KKT条件的核心意义 💡
- 理论工具:为约束优化问题提供了必要(在凸情况下也是充分)的最优性条件
- 算法设计:指导了诸如SMO等高效优化算法的设计
- 模型解释:解释了SVM、LASSO等模型的稀疏性特征
- 数值评估:提供了优化算法收敛性的判断标准
6.2 进阶学习方向 🚀
- 强对偶性与鞍点定理:更深入理解KKT条件的理论基础
- 非光滑优化:处理带L1正则化等非光滑问题的次梯度KKT条件
- 分布式优化:KKT条件在大规模分布式算法中的应用
- 近似KKT条件:实际计算中的近似判定策略
📘 学习建议:理解KKT条件不仅需要掌握数学推导,更要通过实际优化问题的求解来体会其应用。尝试手动推导简单问题的KKT条件,并验证结果。
🔗 延伸阅读:《Convex Optimization》by Boyd and Vandenberghe,这是理解KKT条件与凸优化关系的经典教材。
KKT条件作为约束优化中的关键工具,为我们提供了解决机器学习中众多复杂优化问题的理论框架和实用方法。深入理解KKT条件,不仅能帮助我们更好地掌握现有算法的工作原理,也能启发我们设计出更高效的优化方法。
相关文章:
约束优化技术:KKT条件的完整推导与应用
前言 本文隶属于专栏《机器学习数学通关指南》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见《机器学习数学通关指南》 ima 知识库 知识库广场搜索&#…...
大数据面试之路 (二) hive小文件合并优化方法
大量小文件容易在文件存储端造成瓶颈,影响处理效率。对此,您可以通过合并Map和Reduce的结果文件来处理。 一、合并小文件的常见场景 写入时产生小文件:Reduce任务过多或数据量过小,导致每个任务输出一个小文件。 动态分区插入&…...
对比文章相似度的余弦相似度算法的原理
近期不是项目遇到对比代码的相似度,来判断代码是否存在抄袭嘛。通过研究采用了余弦相似度来对比。既然接触的一个新的东西,怎么也得研究下吧。 一、什么是余弦相似度 利用余弦相似度对比文章相似度的原理,主要基于向量空间模型,通…...
使用vue的路由打开新标签页跳转
vue的路由只支持在本标签页跳转,要用vue的路由打开新标签页需要做处理再用window.open方法打开: // 在当前标签页中跳转 router.push({path: /new-page,query: {id: id.toString(),} });// 在新标签页中打开 const routeData router.resolve({path: /n…...
山东省新一代信息技术创新应用大赛-计算机网络管理赛项(样题)
目录 竞赛试题 网络拓扑 配置需求 虚拟局域网 IPv4地址部署 OSPF及路由部署 配置合适的静态路由组网 MSTP及VRRP链路聚合部署 IPSEC部署 路由选路部署 设备与网络管理部署 1.R1 2.R2 3.S1 4.S2 5.S3 竞赛试题 本竞赛使用HCL(华三云实验室)来进行网络设备选择…...
DeepSeek结合Mermaid绘图(流程图、时序图、类图、状态图、甘特图、饼图)转载
思维速览: 本文将详细介绍如何利用DeepSeek结合Mermaid语法绘制各类专业图表,帮助你提高工作效率和文档质量。 ▍DeepSeek入门使用请看:deepseek保姆级入门教程(网页端使用 本地客户端部署 使用技巧) DeepSeek官网…...
玩转云服务器——阿里云操作系统控制台体验测评
在云服务器日益普及的背景下,运维人员对操作系统管理工具的要求不断提高。我们需要一款既能直观展示系统状态,又能智能诊断问题,提供专业指导的控制台。阿里云操作系统管理平台正是基于API、SDK、CLI等多种管理方式,致力于提升操作…...
Linux 安装 Oh My Zsh
1. 简介 Zsh(Z Shell)是一款功能强大的 Shell,相比 Bash 提供了更强的 自动补全、命令高亮、插件支持 等功能。而 Oh My Zsh 是一个 Zsh 的增强管理工具,让你可以轻松安装插件和主题,极大提高开发效率。 本教程将详细…...
LuaJIT 学习(3)—— ffi.* API 函数
文章目录 GlossaryDeclaring and Accessing External Symbolsffi.cdef(def)ffi.Cclib ffi.load(name [,global])例子:ffi.load 函数的使用 Creating cdata Objectscdata ffi.new(ct [,nelem] [,init...]) cdata ctype([nelem,] [init...])例子:匿名 C…...
方差,协方差及协方差矩阵的计算
1.方差 方差是用来衡量一组数据的离散程度,数序表达式如下: σ 2 1 N ∑ i 1 N ( x i − μ ) 2 \sigma^2\frac1N\sum_{i1}^N(x_i-\mu)^2 σ2N1i1∑N(xi−μ)2 σ 2 σ^2 σ2表示样本的总体方差, N N N 表示样本总数, x i x _i xi…...
DeepSeek-R1思路训练多模态大模型-Vision-R1开源及实现方法思路
刚开始琢磨使用DeepSeek-R1风格训练多模态R1模型,就看到这个工作,本文一起看看,供参考。 先提出问题,仅靠 RL 是否足以激励 MLLM 的推理能力? 结论:不能,因为如果 RL 能有效激励推理能力&#…...
Unity 创建签名证书、获取签名证书信息,证书指纹
目录 一:创建签名证书 二:自动填写密码 编辑 三:获取签名证书的信息 后言 👑👑👑 一:创建签名证书 首先确保Unity是安卓打包,然后按图操作 会打开下图页面 选择你要创建到的…...
VIC模型率定验证
在气候变化问题日益严重的今天,水文模型在防洪规划,未来预测等方面发挥着不可替代的重要作用。目前,无论是工程实践或是科学研究中都存在很多著名的水文模型如SWAT/HSPF/HEC-HMS等。虽然,这些软件有各自的优点;但是&am…...
在AIStudio飞桨星河社区一键部署DeepSeek-r1:70b模型
随着DeepSeek的火热,市面上出现大量的第三方的API服务区,但是对于对安全、隐私、控制有一定需求的用户,还是会希望能够自主部署DeepSeek 。 实践下来,用自己的机器部署是一条解决之道,但是推理起来,cpu和内…...
机器学习算法分类及应用场景全解析
在机器学习的学习过程中,具备归类思想至关重要。机器学习涉及众多算法、数据类型及应用场景,归类能让我们清晰梳理知识体系。比如将算法按学习方式分为有监督、无监督等,按任务分类分为分类任务、回归任务和生成任务。通过归类,能…...
分布式架构下的RPC解决方案
在分布式架构下,RPC(远程过程调用)是服务间通信的重要技术。常见的 RPC 解决方案包括以下几种: 1. 传统 RPC 框架 1.1 gRPC 协议:基于 HTTP/2 和 Protocol Buffers(protobuf)特性:…...
MCU的工作原理:嵌入式系统的控制核心
MCU的工作原理可以概括为以下几个步骤: 1. 初始化 上电后,MCU从Flash存储器中加载程序代码,并初始化外设和寄存器。 2. 任务执行 根据程序逻辑,MCU执行数据处理、外设控制和通信等任务。通过中断系统实时响应外部事件。 3. 低…...
[资源分享]-web3/区块链/学习路线/资料/找工作方式/水龙头
记录个人学习web3整理的资料 后续如果有 了解/入坑 打算, 提前收藏一下. 1. 学习路线 登链社区-学习路线图 2. 学习资料 国内成系统的资料比较少,我整理的网盘的,关注私信我,资料互相学习 前言 | 区块链技术指南 学习web3-僵尸小游戏 web3.js文档 ethers.js官方文档 Hardhat文…...
GNU Nano编辑器中,怎样保存并退出
当出现git commit的提交内容需要修改时,使用git commit --amend进行解决。 但是在修改提交的内容时,弹出了GNU Nano的编辑器 修改完毕后,使用ctrlxd的组合键退出 输入Y后,将退出编辑器,操作完成...
个人居家 Web移动端 局域网 远程控制电脑 工具 PC遥控器拿去玩吧
想远程电脑 换个电影,切个歌,随有无线键鼠,但解决不了离屏幕较远 看不清鼠标指针和键入内容。 看似简单的事情,但对周末躺下沙发的码农来说,就再也起不了身了。 远程工具 TeamViewer、向日葵、Autodesk以及开源的RustD…...
cursor中使用prettier-code formatter插件方法
cursor的"扩展"中搜索"prettier-code formatter",然后安装 点击cursor编辑器右上角“更多操作”,然后打开“配置编辑器” 按照图片进行操作,进入到editor在editor中,找“格式化“,把Format On Sav…...
SpaceSync智能排班:重构未来办公空间的神经中枢
文心智能体平台可免费使用DeepSeek 满血版啦,使用DeepSeek模型创建并提交智能体,即有机会瓜分万元奖金!有这等好事还不快冲! 文心智能体官网:文心智能体平台AgentBuilder | 想象即现实 本片文章为作者参加文心智能体平…...
ToB公司找客户专用|大数据获客系统
对于ToB公司而言,找到并吸引合适的潜在客户并非易事。传统的获客手段如参加行业展会、电话推销以及直接拜访等,虽然在过去取得了一定成效,但如今却暴露出诸多问题。首先,这些方法往往成本高昂,无论是时间还是金钱上的投…...
Linux 文件权限类
目录 文件属性 从左到右的10个字符表示 rwx作用文件和目录的不同解释 图标: 案例实操 chmod 改变权限 基本语法 经验技巧 案例实操 拓展:可以通过一个命令查看用户列表 chown改变所有者 基本语法 选项说明 案例实操 chgrp 改变所属组 基…...
OpenWebUI项目调研对比
开源地址:https://github.com/open-webui/open-webui 官方文档:https://docs.openwebui.com/ OpenWebUI(以前称为Ollama WebUl)是一款面向大型语言模型(LLMs)的用户友好型Web界面,支持Ollama和兼容OpenAl的API运行。 通过一个直观的界面&a…...
在线Doc/Docx转换为PDF格式 超快速转换的一款办公软件 文档快速转换 在线转换免费转换办公软件
小白工具https://www.xiaobaitool.net/files/word-pdf/提供了一项非常实用的在线服务——将Doc或Docx格式的文档快速转换为PDF格式。这项服务不仅操作简单,而且转换效率高,非常适合需要频繁处理文档转换的用户。 服务特点: 批量转换&#x…...
LuaJIT 学习(1)—— LuaJIT介绍
文章目录 介绍Extensions Modulesbit.* — Bitwise operationsffi.* — FFI libraryjit.* — JIT compiler controlC API extensionsProfiler Enhanced Standard Library Functionsxpcall(f, err [,args...]) passes arguments例子: xpcall 的使用 load*() handle U…...
网络安全——SpringBoot配置文件明文加密
XTHS:第一步、XTHS:第二步、XTHS:第三步、XTHS:第四步 !就可以实现了。(但是前提,你要先对你的文本进行加密,然后按照ENC(加密文本),放到配置文件中) 一、前言…...
Docker安装Kafka(内含zookeeper)
因为kafka是基于zookeeper做的,所以必须要有zookeeper 一、Zookeeper 1.拉取镜像 docker pull zookeeper:3.7.02.运行 docker run --restartalways \--log-driver json-file \--log-opt max-size100m \--log-opt max-file2 \--name zookeeper -p 2181:2181 \-v…...
Netty启动源码NioEventLoop剖析accept剖析read剖析write剖析
学习链接 NIO&Netty - 专栏 Netty核心技术十–Netty 核心源码剖析Netty核心技术九–TCP 粘包和拆包及解决方案Netty核心技术七–Google ProtobufNetty核心技术六–Netty核心模块组件Netty核心技术五–Netty高性能架构设计 聊聊Netty那些事儿 - 专栏 一文搞懂Netty发送数…...
