ML-凸优化初识

ML问题 = 模型 + 优化

  • 类似于, 程序 = 数据结构 + 算法
  • 模型(objective): DL, LR, SCV, Tree, XGBoost.....
  • 优化(train): GD/SGD, Adagrand/ Adam, Coordinate Descent, EM ....

确定问题的性质, 是否为凸优化问题, 然后再确定相应的优化方式和算法去解决.

优化-标准写法

Minimize f0=(x)s.t.fi(x)<=0, i=(1,2,...k)gj(x)=0, j=(1,2,....l)

  • 一般都是min的, 如果是max的, 即 -min = max , 大于/小于亦如此
  • f0(x) 是关于x的目标函数
  • s.t. 部分表示约束条件(subject to), 满足约束条件的 x 称为可行解.

常见ML的目标函数

  • 线性回归: i=1n(wtxiyi)2+||w||22 或矩阵形式 ||Xwy||22+||w||22

  • 逻辑回归: i=1nyi log(σ(wtx+b))+(1yi)log(1σ(wtxb))

  • 支持向量机: minw,b=12||w||22, s.t  yi(wtx+b)>=1, i=1,2,...

  • 协同过滤: i,j>Ω(uitvjrij)2+λ||u||F2+γ||v||F2

  • k-means: mini=1nk=1kγi,k||xiμk||2 ,s.t.γi,k=1 ifkcluster,otherwise0

优化分类

将优化问题划分为标准型后, 紧接着需要判断是属于哪个类型的优化问题.

  • convex or non-convex 是否为凸函数?
  • continuous or discrete 连续还是离散?
  • constraint or non-constraint 是否有约束?
  • smooth or non-smooth 是否为平滑函数?

首先对于convex (凸函数 "U" 这个形状的, 当然其实我们最希望的是构造的目标函数是convex, 就是咱平时见到的"U"形状的(ps, 即二阶导的Hessian Matrix 是半正定), 这样的好处是它有一个Global optimum (全局最优解), 比如逻辑回归就是一个典型的例子. 而与之对一的是non-convex 最经典的例子是神经网络, 它的目标函数一般是"unuu.." 这样形状的, 求解时只是通过不断迭代求 Local optimum. 对于非凸函数我们追求的是Better local optimum. 尤其在深度学习中, 做预训练时非常重要的, 目的也是为了找到到更好的初始化的解. 在NLP领域, 也是会通过词向量的方式, 用别人训练好的数据来进行更好的初始化过程.同时在深度学习领域,也是比较注重优化器的调整. 当然, 最为重要的还是关注convex了呀.

就我自己而言, 工作涉及的大都是convex, 基本上我是不会用深度学习的, 原因在于,

  • 我自己都不知道里面有多少function及其运行机制 (不可控制)
  • 很难跟老板解释参数的实际意义 (很难解释)

第二是关于函数是离散还是连续. 当然绝大多数都是假设是连续, 可微可导, 当然也有离散, 离散处理起来有些麻烦了.

第三 是关于目标函数是否有约束条件, 没有约束条件,像线性回归这种, 就可以直接通过梯度下降或最小二乘的方式就可轻易求解了. 然而对于带约束条件的, 比如smv这类, 处理方式通常是将约束条件"带入"目标函数, 比如通过拉格朗日乘子等方式.然后用到的底层知识其实是duality(对偶), 如KKT conditon

第四是关于函数smooth. 对于smooth的函数, 我们可以求出在每个点的梯度(偏导数的函数值组成的向量), 而对于non-smooth, 有可能存在不可微的情况哦, 最常见的应该是L1正则了吧.

Convex Set (凸集)

定义假设对任意的 x,yC 且任意参数 α[0,1],αx+(1α)yC, 则该集合为凸集.

通俗理解就是定义域形状是"连续封闭且外张"的呗.

哎呀,其实数学的东西有些很难"形象", 超出3维就在几何上就画不出来了, 而理解的关键并不是"想象力" 而是从"定义和规则", 比如理解"维度", "对加法和数乘封闭"...这样的, 理解定义和规则, 而非"举个栗子", 很多是不太能"举个栗子的".

常见的凸集

  • 所有的Rn

    • 证明by定义: x,yRn,ax+(1a)yRn
  • 范数||x||<=1

    • x,y,||x||<=1,||y||<=1,
    • ||ax+(1a)y||<=||ax||+||(1a)y||=||x||+(1a)||y||<=a+(1a)=1
  • 线性方程组Ax=b的所有解

    • Ax=b,Ay=bA(ax+(1a)y)=b
  • 不等式Ax<=b的所有解

有个很明显的定理: 两个凸集的交集也是凸集

凸函数(convex function)

定义 函数的定义域dom为凸集, 对于定义域内任意x,y, 满足f(θx+(1θ)y)<=θf(x)+(1θ)f(y),θ[0,1]

画一个二维的"U" 就可以比较直观认识了, 但还是觉得逐步去理解定义吧

  • 取一段区间 [x, θx+(1θ)y,y] .. 当时比较直观

范数 Norm: 用来类似衡量向量/矩阵的"大小"的一个量

  • L1-norm: ||w||=w1+w2+w3+...wn
  • L2-norm: ||w||22=w12+w22+...wn2
  • ||w||p=(w1p+w2p+w3p+...wnp)1p (标准写法)
  • 常用来看, L1范数表示向量各分量之和; L2范数表示向量的欧式距离的平方..

convex 一阶导

假设f:RnR 是可微的(differentiable), f 为凸函数, 当且仅当 f(y)>=f(x)+(x)T(yx), 对于任意的x,y.

在写代码会用, 如在编写梯度下降的code时会作为循环的break条件

convex 二阶导

假设f:RnR 是二次可微的(twice differentiable), f 为凸函数, 当且仅当

2(x)0,xdomf

就是二阶导数值"大于0", 需要回顾一波大一的内容. 主要用来证明吧, 比如证明逻辑回归的sujective function是凸函数等.

  • 一元函数求二阶导, 得到一个变量, 即是一个值
  • 二元函数求二阶导, 得到一个偏导混合的2x2 海塞矩阵
  • n元函数求二阶导, 也是得到一个偏导混合 海塞矩阵
  • 对于多元" 0" 表示该 Hessian Matrix 是一个半正定矩阵(PSD)

凸函数案例

case 1: 线性函数: f(x)=bTx+c

x1,x2,f(x1)=bTx1+cf(x2)=bTx2+c

用定义做判断证明:

bT(θx1+(1θ)x2+c<=θ(bTx1)+(1θ)(bTx2+c)

bTθx1+(1θ)bTx2+c<=θbTx1+(1θ)(bTx2)+(1c)θ

c<=c,

case 2: 二次方函数f(x)=12xtAx+btx+c, A是半正定矩阵

这里用二阶导来证明即可

f(x)f(x)=Ax+b

2xf(x)=AA0,

矩阵求导: http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=3274

posted @   致于数据科学家的小陈  阅读(586)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示

目录导航