数值计算和SVM讲解(上)

来源:互联网 发布:微波炉品牌选择 知乎 编辑:程序博客网 时间:2024/06/06 10:38

今天我们聊聊数值计算(优化)和SVM,首先本篇的数值计算我觉着更适合用“优化”来代替,因为我们将会以优化问题作为本篇数学部分主要的介绍内容,或者不够严谨的说法是,你也可以理解为对高数知识的巩固(比较前面的线性代数和概率论)。后半部分我们会将知识代入SVM中去进行介绍,需要说明的是,我们的介绍是提纲挈领式的,因为SVM足够成熟,并且细致下去,很多人已经做出了很多了解释,比我粗鄙的语言要丰富得多。对于全文照搬我也实在没有兴趣,所以我会引入更多这些日子我看到的能够满足大家学习所需要的内容,例如July的《理解SVM的三层境界》等等。(当然,三层境界并不完善,我会拿出其他链接供读者参考);

其次,个人认为学习需要将知识点相互关联,并及时总结。所以本篇将会和前面两篇《PCA线性代数讲解》《概率论及logistic回归讲解》相呼应,同时也相当于是关于《深度学习》这本书中前五章的总结(数学基础和机器学习部分)。谈到后面机器学习实例时,我将更多的谈到数据维度和风险函数(代价函数)之类的思想,最后将PCA、logistic回归和SVM它们做个联系。(另外,因为近期可能要写导师的综述,所以针对信息论和贝叶斯的相关部分以后有空再写了)

1.1数值计算

大多数机器学习算法(这里更特指监督学习)都涉及某种形式的优化。优化指的是改变 x 以最小化或最大化某个函数 f(x) 的任务。我们通常以最小化 f(x) 指代大多数最优化问题。最大化可经由最小化算法最小化 −f(x) 来实现。我们把要最小化或最大化的函数称为目标函数(objective function)或准则(criterion)。当我们对其进行最小化时,我们也把它称为代价函数(cost function)、损失函数(loss function)或误差函数(error function)。在前面一篇《概率论及logistic回归讲解》中,我们采用了第二种机器学习的视角看待logistic回归时候,我们展示了常用的损失函数。

在这里我们继续深入,李航博士《统计学习方法》书中(好书,推荐。理由是每章会有例子进行展示),有过对“损失函数”的升级版“风险函数”的讨论,其中他认为“损失函数度量模型一次预测的好坏,风险函数度量平均意义下模型预测的好坏”。所以说,我们认为后者更有研究的意义,其实在我看来,这个“风险函数”就是对全体样本作代价函数(代价求和或者求平均)。特殊的,训练数据集的平均代价我们称为“经验风险”。

引入了“风险函数”,那么对于样本我们还需要考虑“过拟合”的问题。啥意思,当数据样本本身具有“不可信”的部分时,一旦样本量比较小,那么我们得出的模型可能是比较糟糕的(分类或者回归效果很差)。由此引出关于“风险函数”的两个策略:“经验风险最小化”和“结构风险最小化”。

通俗理解,“经验风险最小化”只是单纯的最小化“经验风险”,即最小化平均代价函数;“结构风险最小化”即正则化,在“经验风险函数”基础上考虑正则化项或者惩罚项,使原来的目标函数变得更为复杂,当然这样也就更加合理(现在基本都是这个策略)。

1.2最优化

上述中,我们已经建立了咱们的优化模型,接下来咱们需要求解这个目标函数得出最优解。所以我们的目标也就从建立目标函数过渡到如何求解最优解,而后者也就是这一节的主要内容。

通常我们需要求解的最优化问题有如下几类:
(i)无约束优化问题,具体而言1:

这里写图片描述
(ii) 有等式约束的优化问题,具体而言:
这里写图片描述
(iii) 有不等式约束的优化问题,具体而言:
这里写图片描述

对于第(i)类的求解,知识点在于导数(标量)、梯度(向量)和Hessian矩阵。举例而言,如果自变量为标量,求解min f(x)。其方法即为:对x关于f(x)求导令其为零得到候选点,再根据二阶导数判断是否为极值点。(高数中二阶导数与0的比较,其实是判断f(x)凹凸性的标志)。如果自变量为矢量,则牵扯到梯度(多维偏导数形态)和Hessian矩阵的知识。
工程上,我们往往采用迭代法来求解无限制优化问题4:
这里写图片描述

其中最重要的步骤为2,根据dk的不同计算方法,我们有梯度下降法、牛顿法(这两种方法证明与泰勒公式有关)等等优化方法。更多的,可以看此链接:http://www.cnblogs.com/zhangchaoyang/articles/2600491.html

对于第(ii)类的求解,知识点在于拉格朗日乘子(Lagrange Multiplier)。流程上把等式约束hi(x)用一个系数与f(x)写为一个式子,称为拉格朗日函数,而系数称为拉格朗日乘子。通过拉格朗日函数对各个变量求导,令其为零,可以求得候选值集合,然后验证求得最优值。

下面我们看Wikipedia上解释拉格朗日乘子法的合理性的,假设有等式约束优化问题如下5:

这里写图片描述

如下图所示6:

这里写图片描述

绿线标出的是约束g(x,y) = c的点的轨迹。蓝线是f(x,y)的等高线。箭头表示梯度,和等高线的法线平行。从图上可以直观地看到在最优解处,f和g的法线方向刚好相反(或者说叫梯度共线),即下列步骤7即为5的求解过程:
这里写图片描述

另外,上式7也为求解下面无约束优化问题8的候选解:

这里写图片描述

捋一捋逻辑,等式约束优化问题5的解由7得出,而求解无约束优化问题8的候选解与7等价,所以等式约束优化问题5和无约束优化问题8的求解步骤一致,换句话说,解问题5可以等价于求解问题8。

对于第(iii)类的优化问题,知识点为KKT条件。同样地,我们把所有的等式、不等式约束与f(x)写为一个式子,也叫拉格朗日函数,系数也称拉格朗日乘子,通过一些条件,可以求出最优值的必要条件,这个条件称为KKT条件。我们通过KKT条件求得极值点(候选点)。

KKT条件作为一般限制优化问题极值点的一阶必要条件,内容如下9:

工程上,遇到约束性优化问题,也多用KKT去尝试。但是毕竟不是充要条件(凸优化里才能升级为充要),所以怎么把问题变为凸优化问题,这样可以一取得全局最优,二KKT成为充要条件。

对于KKT如果究其根本,当然是Boyd的《Convex Optimization》,不过比较费时费力,数学功底扎实的可以一探究竟。对于不做要求的同学,可以看看第三个链接和这篇http://www.cnblogs.com/zhangchaoyang/articles/2726873.html。

tips:1第一篇博客讲的是拉格朗日对偶性,主要把KKT怎么来的,以及相关推导叙述一遍,可以作为主要;2.第二篇博客细化了对偶问题和原始问题的变换推导,主要以公式为主,可以作为辅助(文章略有瑕疵,可以看看评论自己琢磨一番)。

最后将第一部分稍作总结:这里引用《统计学习方法》书中1.3节的内容——方法=模型+策略+算法。对于一般的机器学习,尤其是监督学习,我们首先考虑模型的选取,条件概率分布或者决策函数,这就与概率论的知识结合在一起了;选取了模型之后,我们需要考虑按照什么样的准侧进行最优化,即为如何构建最优模型,引出代价函数和风险函数后,我们还有两个策略“经验风险最小化”“结构风险最小化”;最后,考虑如何求解,即为如何构建算法,这部分基本为纯数学优化知识。

原创粉丝点击