一、优化算法简介
1、机器学习的本质
就是模型表征 + 模型评估 + 优化算法
2、优化算法的作用
优化算法所做的事情就是在模型表征空间中找到模型评估指标最好的模型
-- 不同的优化算法对应的模型表征和评估指标不尽相同
-- 比如经典的支持向量机对应的模型表征和评估指标分别为线性分类模型和最大间隔
-- 逻辑回归对应的模型表征和评估指标则分别为线性分类模型和交叉熵"
3、凸优化与非凸优化
凸:指的是顺着梯度方向走到底就一定是最优解。
-- 大部分传统机器学习问题都是凸的。
非凸:指的是顺着梯度方向走到底只能保证是局部最优,不能保证是全局最优
二、有监督学习涉及的损失函数
1、二分类问题一般会选择0-1损失函数
-- 0-1损失函数的一个代理损失函数是Hinge损失函数
2、Hinge损失函数的缺陷
-- Hinge损失在fy=1处不可导,因此不能用梯度下降法进行优化,而是用次梯 度下降法(Subgradient Descent Method)。
3、Logistic损失函数
0-1损失的另一个代理损失函数是 Logistic损失函数
-- Logistic损失函数也是0-1损失函数的凸上界,且该函数处处光滑,因此可以用梯度 下降法进行优化。
-- 但是,该损失函数对所有的样本点都有所惩罚,因此对异常值 相对更敏感一些。
4、交叉熵损失函数
当预测值是[-1,1]时,另一个常用的代理损失函数是交叉熵 (Cross Entropy)损失函数
5、四种损失函数的曲线如图
这四种损失函数的解释:
-- 即是以0为分界点
-- 分别考虑其y值靠近-1时损失值的变化趋势,靠近1时损失值的变化趋势
-- 交叉熵损失在y取值[-1,1]时效果最好,因为曲线平滑,处处可导
-- 罗彻斯特损失的缺点是对每一个取值的样本都有惩罚,对异常值敏感
-- hinge损失类似,但hinge损失更适用于SVM,其他分类器中并不适用,因为fy = 1时不可导,导致并不通用"
5、平方损失函数
6、绝对值损失函数
综合考虑可导性和对异常点的鲁棒性
7、Huber损失函数
绝对损失函数相当于是在做中值回归,相比做均值回归的平方损失函数,绝对损 失函数对异常点更鲁棒一些
-- 但是,绝对损失函数在f=y处无法求导数
-- 可以采用Huber损失函数
8、这三种损失函数的曲线如图
三、机器学习中的优化问题
机器学习模型不同,损失函数不同,对应的优化问题也各不相同,了解优化问题的形式和特点, 能帮助我们更有效地求解问题,得到模型参数,从而达到学习的目的。
1、凸优化问题的例子
所有的局部极小值都是全局极小值
凸函数曲面上任意两点连接而成的线段,其上的任 意一点都不会处于该函数曲面的下方
-- 其他凸优化问题的例子包括支持向量机、线性回归等 线性模型"
2、非凸优化问题
主成分分析的优化问题即是典型的非凸优化问题
-- 非凸优化问题的例子包括低秩模型(如矩阵分解)、深度神经网络模 型等" 非凸优化问题被认为是比较难求解的问题,但主成分分析是一个特例,我们 可以借助SVD直接得到主成分分析的全局极小值
四、经典优化算法
1、直接法
顾名思义,就是能够直接给出优化问题最优解的方法
-- 直接法要求目标函数需要满足两个条件
-- 第一个条件是,L(·)是凸函数
-- 第二个条件是,上式有闭式解
-- 同时满足这两个条件的经典例子是岭回归
2、迭代法
迭代法就是迭代地修正对最优解的估计
一阶法
一阶法一般称为梯度下降
-- 俄罗斯著名数学家Yurii Nesterov于1983年提出了一阶法的加速算法[10],该算法的收敛速率能够达到一阶法收敛速率的理论界。
二阶法
-- 对函数L(θt+δ)做二阶泰勒展开,得到近似式
-- 二阶法一般称为牛顿法
-- Hessian矩阵就是目标函数的二阶信息。二阶法的收敛 速度一般要远快于一阶法,但是在高维情况下,Hessian矩阵求逆的计算复杂度很 大,而且当目标函数非凸时,二阶法有可能会收敛到鞍点(Saddle Point)
梯度验证
-- 针对二阶法矩阵求逆的计算复 杂度过高的问题,Charles George Broyden,Roger Fletcher,Donald Goldfarb和 David Shanno于1970年独立提出了后来被称为BFGS的算法 [11—14],1989年扩展为低 存储的L-BFGS算法 [15]。
五、如何验证求目标函数梯度功能的正确性
1、数值梯度
-- 以导数定义求出的导数
-- 其中ei是单位向量,维度与θ相同,仅在第i个位置取值为1,其余位置取值为0
2、解析梯度
-- 求导求出的近似梯度