ML问题 = 模型 + 优化

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

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

优化-标准写法

\(Minimize \ f_0 = (x) \\ s.t. \\ f_i(x) <= 0, \ i = (1,2,...k) \\ g_j(x) = 0, \ j = (1,2,....l)\)

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

常见ML的目标函数

  • 线性回归: \(\sum_{i=1}^{n}(w^tx_i - y_i)^2 + ||w||^2_2\) 或矩阵形式 \(||Xw-y||^2_2 + ||w||^2_2\)

  • 逻辑回归: \(\sum _{i=1}^{n}y_i \ log(\sigma(w^tx+b)) + (1-y_i)log(1-\sigma(w^tx-b))\)

  • 支持向量机: \(min_{w,b} = \frac {1}{2} ||w||^2_2,\ s.t \ \ y_i(w^tx+b)>=1, \ i=1,2,...\)

  • 协同过滤: \(\sum _{i,j->\Omega} (u_i^tv_j-r_ij)^2 + \lambda||u||^2_F + \gamma ||v||_F^2\)

  • k-means: \(min \sum _{i=1} ^n \sum _{k=1}^k \gamma_{i,k} ||x_i -\mu_k||^2 \ ,s.t. \, \gamma_{i,k} = 1 \ if 样本属于k-cluster, otherwise 0\)

优化分类

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

  • 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,y \in C\) 且任意参数 \(\alpha \in [0,1], 满足 \alpha x + (1-\alpha)y \in C\), 则该集合为凸集.

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

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

常见的凸集

  • 所有的\(R^n\)

    • 证明by定义: $\forall x, y \in R^n, ax + (1-a)y \in R^n $
  • 范数\(||x||<=1\)
    • \(\forall x, y, ||x||<=1, ||y||<=1\),
    • \(||ax + (1-a)y|| <= ||ax|| + ||(1-a)y|| = ||x|| + (1-a)||y|| <= a + (1-a) = 1\)
  • 线性方程组\(Ax=b\)的所有解
    • \(Ax=b, Ay=b \rightarrow A(ax+(1-a)y) = b\)
  • 不等式\(Ax <= b\)的所有解

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

凸函数(convex function)

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

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

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

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

  • L1-norm: \(||w|| = w_1+w_2+w_3+...w_n\)
  • L2-norm: \(||w||^2_2 = w_1 ^2 + w_2 ^2 + ...w_n ^2\)
  • \(||w||_p = (w_1^p + w_2 ^p + w_3 ^p + ...w_n ^p) ^{\frac {1}{p}}\) (标准写法)
  • 常用来看, L1范数表示向量各分量之和; L2范数表示向量的欧式距离的平方..

convex 一阶导

假设\(f: R^n \rightarrow R\) 是可微的(differentiable), f 为凸函数, 当且仅当 \(f(y) >= f(x) +\nabla (x)^T (y-x)\), 对于任意的\(x,y\).

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

convex 二阶导

假设\(f: R^n \rightarrow R\) 是二次可微的(twice differentiable), f 为凸函数, 当且仅当

\(\nabla ^2 (x) \succ 0, 对于任意的x \in domf\)

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

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

凸函数案例

case 1: 线性函数: \(f(x) = b^Tx + c\)

\(\forall x_1,x_2, \\ f(x_1) = b^Tx_1+c \\ f(x_2)=b^Tx_2 +c\)

用定义做判断证明:

\(b^T(\theta x_1 + (1- \theta)x2 + c <= \theta (b^Tx_1) + (1-\theta)(b^Tx_2+c)\)

\(b^T \theta x_1 +(1-\theta) b^Tx_2 + c <= \theta b^Tx_1 + (1-\theta)(b^Tx_2) + (1-c)\theta\)

\(c <= c, 证毕\)

case 2: 二次方函数\(f(x) = \frac {1}{2}x^tAx + b^tx +c\), A是半正定矩阵

这里用二阶导来证明即可

$\frac {\partial f(x)} {f(x)} = Ax + b $

\(\frac {\partial ^2 x}{f(x)} = A \\ 由条件A \succ 0, 证毕\)

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

ML-凸优化初识的更多相关文章

  1. (邹博ML)凸优化

    目录 凸集的基本概念 凸函数的基本概念 凸优化的一般提法 凸集基本概念 思考两个不能式 两个正数的算术平均数大于等于几何平均数 给定可逆对称阵Q,对于任意向量x,y,有: 思考凸集和凸函数 在机器学习 ...

  2. zz姚班天才少年鬲融凭非凸优化研究成果获得斯隆研究奖

    姚班天才少年鬲融凭非凸优化研究成果获得斯隆研究奖 近日,美国艾尔弗·斯隆基金会(The Alfred P. Sloan Foundation)公布了2019年斯隆研究奖(Sloan Research ...

  3. 机器学习&数据挖掘笔记_15(关于凸优化的一些简单概念)

    没有系统学过数学优化,但是机器学习中又常用到这些工具和技巧,机器学习中最常见的优化当属凸优化了,这些可以参考Ng的教学资料:http://cs229.stanford.edu/section/cs22 ...

  4. paper 110:凸优化和非凸优化

    数学中最优化问题的一般表述是求取,使,其中是n维向量,是的可行域,是上的实值函数.凸优化问题是指是闭合的凸集且是上的凸函数的最优化问题,这两个条件任一不满足则该问题即为非凸的最优化问题. 其中,是 凸 ...

  5. 凸优化简介 Convex Optimization Overview

    最近的看的一些内容好多涉及到凸优化,没时间系统看了,简单的了解一下,凸优化的两个基本元素分别是凸函数与凸包 凸集 凸集定义如下: 也就是说在凸集内任取两点,其连线上的所有点仍在凸集之内. 凸函数 凸函 ...

  6. 【Codeforces 321E / BZOJ 5311】【DP凸优化】【单调队列】贞鱼

    目录 题意: 输入格式 输出格式 思路: DP凸优化的部分 单调队列转移的部分 坑点 代码 题意: 有n条超级大佬贞鱼站成一行,现在你需要使用恰好k辆车把它们全都运走.要求每辆车上的贞鱼在序列中都是连 ...

  7. 2019.03.12 codeforces739E. Gosha is hunting(dp凸优化)

    传送门 题意:nnn个物品,有aaa个XXX道具和bbb个YYY道具,XXX道具移走第iii个物品概率为pip_ipi​,YYY道具移走第iii个道具概率为uiu_iui​. 对于每个物品每种道具最多 ...

  8. murongxixi的凸优化笔记

    http://www.cnblogs.com/murongxixi/p/3598645.html 在前两节里已经涉及到集合的相对内部与闭包的概念,这一节我们深入研究它们的性质和计算,之后介绍凸函数的连 ...

  9. 在线学习和在线凸优化(online learning and online convex optimization)—FTL算法5

    最自然的学习规则是使用任何在过去回合中损失最小的向量. 这与Consistent算法的精神相同,它在在线凸优化中通常被称为Follow-The-Leader,最小化累积损失. 对于任何t: 我们谈到了 ...

随机推荐

  1. chrome-解决该扩展程序未列在 Chrome 网上应用店中

    1.win10添加策略组 复制以下内容到.bat文件中,右键-以管理员身份运行,即可添加策略组 pushd "%~dp0" dir /b C:\Windows\servicing\ ...

  2. ESA2GJK1DH1K基础篇: 购买云服务器

    我选择的是购买阿里云的服务器 如果是学生,可以选择 因为我用学生账户买过了,所以过程没法写了,下面我就写不用学生账户买的过程,其实应该配置过程和学生买差不多 选择购买的配置 选择系统 不需要配置直接下 ...

  3. 为什么两个一样的对象,用===打印是false

    对象的地址(变量名)存在栈中,对象的引用指向堆中,比较对象的时候,是比较对象的引用是否相等.obj和obj1的引用地址分别指向堆中的两块数据,所以不相等.

  4. 第02组 Alpha冲刺(2/4)

    队名:十一个憨批 组长博客 作业博客 组长黄智 过去两天完成的任务:写博客,复习C语言 GitHub签入记录 接下来的计划:构思游戏实现 还剩下哪些任务:敲代码 燃尽图 遇到的困难:Alpha冲刺时间 ...

  5. react-native 设置启动模拟器

    react-native 设置启动模拟器 查看iOS可选设备: xcrun simctl list devices iPhone7 Plus启动(下次启动会默认使用最后一次选择设备,直接启动npx r ...

  6. gcc 在c代码中内嵌汇编调用c函数: 只是证明曾经我来过

    我怕我不写下来,将来我都不记得我还在 c 中嵌套过汇编语言,用汇编代码调用一个c函数的过程. 折腾了一下午,在网上查看相关的资料,然后照葫芦画瓢地在c代码中嵌套汇编,希望解决我所遇到的问题,可最后发现 ...

  7. CUDA 到底什么玩意

    * CUDA与cuDNN * 什么是CUDA * CUDA(ComputeUnified Device Architecture),是显卡厂商NVIDIA推出的运算平台. CUDA是一种由NVIDIA ...

  8. C语言字节对齐分析

    1.前言 什么是字节对齐呢?现代计算机中的内存空间都是按字节(byte)划分的,从理论上讲似乎任何类型的变量的访问都可以从任何地址开始,但是实际情况是在访问特定变量的时候经常需要在特定的内存地址进行访 ...

  9. [转帖]【mount】Linux根目录空间不足

    [mount]Linux根目录空间不足 2019.04.15 21:30:47字数 1094阅读 107 一.问题背景 一台数据库服务器,突然监控告警,报根目录空间不足(no space left o ...

  10. Windows和Linux简单命令的总结

    MS-DOS 命令提示符(cmd) 启动:                      Win+R,输入cmd回车 切换盘符            盘符名称: 进入文件夹              cd ...