做网站的入门书籍,辽宁工程建设信息网诚信库,宿松网站建设,深圳网站制作问前言
对于几乎所有机器学习算法#xff0c;无论是有监督学习、无监督学习#xff0c;还是强化学习#xff0c;最后一般都归结为求解最优化问题。因此#xff0c;最优化方法在机器学习算法的推导与实现中占据中心地位。在这篇文章中#xff0c;小编将对机器学习中所使用的…前言
对于几乎所有机器学习算法无论是有监督学习、无监督学习还是强化学习最后一般都归结为求解最优化问题。因此最优化方法在机器学习算法的推导与实现中占据中心地位。在这篇文章中小编将对机器学习中所使用的优化算法做一个全面的总结并理清它们直接的脉络关系帮你从全局的高度来理解这一部分知识。 机器学习要求解的数学模型
几乎所有的机器学习算法最后都归结为求一个目标函数的极值即最优化问题例如对于有监督学习我们要找到一个最佳的映射函数f (x)使得对训练样本的损失函数最小化最小化经验风险或结构风险 在这里N为训练样本数L是对单个样本的损失函数w是要求解的模型参数是映射函数的参数xi为样本的特征向量yi为样本的标签值。
或是找到一个最优的概率密度函数p(x)使得对训练样本的对数似然函数极大化最大似然估计 在这里θ是要求解的模型参数是概率密度函数的参数。
对于无监督学习以聚类算法为例算法要是的每个类的样本离类中心的距离之和最小化 在这里k为类型数x为样本向量μi为类中心向量Si为第i个类的样本集合。
对于强化学习我们要找到一个最优的策略即状态s到动作a的映射函数确定性策略对于非确定性策略是执行每个动作的概率 使得任意给定一个状态执行这个策略函数所确定的动作a之后得到的累计回报最大化 这里使用的是状态价值函数。
总体来看机器学习的核心目标是给出一个模型一般是映射函数然后定义对这个模型好坏的评价函数目标函数求解目标函数的极大值或者极小值以确定模型的参数从而得到我们想要的模型。在这三个关键步骤中前两个是机器学习要研究的问题建立数学模型。第三个问题是纯数学问题即最优化方法为本文所讲述的核心。 最优化算法的分类
对于形式和特点各异的机器学习算法优化目标函数我们找到了适合它们的各种求解算法。除了极少数问题可以用暴力搜索来得到最优解之外我们将机器学习中使用的优化算法分成两种类型本文不考虑随机优化算法如模拟退火、遗传算法等
公式求解 数值优化 前者给出一个最优化问题精确的公式解也称为解析解一般是理论结果。后者是在要给出极值点的精确计算公式非常困难的情况下用数值计算方法近似求解得到最优点。除此之外还有其他一些求解思想如分治法动态规划等。我们在后面单独列出。一个好的优化算法需要满足
能正确的找到各种情况下的极值点速度快
下图给出了这些算法的分类与它们之间的关系 接下来我们将按照这张图来展开进行讲解。 费马定理
对于一个可导函数寻找其极值的统一做法是寻找导数为0的点即费马定理。微积分中的这一定理指出对于可导函数在极值点处导数必定为0 对于多元函数则是梯度为0 导数为0的点称为驻点。需要注意的是导数为0只是函数取得极值的必要条件而不是充分条件它只是疑似极值点。是不是极值是极大值还是极小值还需要看更高阶导数。对于一元函数假设x是驻点 如果f(x)0则在该点处去极小值 如果f(x)0则在该点处去极大值 如果f(x)0还要看更高阶导数
对于多元函数假设x是驻点 如果Hessian矩阵正定函数在该点有极小值 如果Hessian矩阵负定函数在该点有极大值 如果Hessian矩阵不定还需要看更此处误
在导数为0的点处函数可能不取极值这称为鞍点下图是鞍点的一个例子来自SIGAI云端实验室 除鞍点外最优化算法可能还会遇到另外一个问题局部极值问题即一个驻点是极值点但不是全局极值。如果我们对最优化问题加以限定可以有效的避免这两种问题。典型的是凸优化它要求优化变量的可行域是凸集目标函数是凸函数。
虽然驻点只是函数取得极值的必要条件而不是充分条件但如果我们找到了驻点再判断和筛选它们是不是极值点比之前要容易多了。无论是理论结果还是数值优化算法一般都以找驻点作为找极值点的目标。对于一元函数先求导数然后解导数为0的方程即可找到所有驻点。对于多元函数对各个自变量求偏导数令它们为0解方程组即可达到所有驻点。这都是微积分中所讲授的基础方法。幸运的是在机器学习中很多目标函数都是可导的因此我们可以使用这套方法。 拉格朗日乘数法
费马定理给出的不带约束条件下的函数极值的必要条件。对于一些实际应用问题一般还带有等式或者不等式约束条件。对于带等式约束的极值问题经典的解决方案是拉格朗日乘数法。
对于如下问题 构造拉格朗日乘子函数 在最优点处对x和乘子变量λi的导数都必须为0 解这个方程即可得到最优解。对拉格朗日乘数法更详细的讲解可以阅读任何一本高等数学教材。机器学习中用到拉格朗日乘数法的地方有 主成分分析 线性判别分析 流形学习中的拉普拉斯特征映射 隐马尔可夫模型 KKT条件
KKT条件是拉格朗日乘数法的推广用于求解既带有等式约束又带有不等式约束的函数极值。对于如下优化问题 和拉格朗日对偶的做法类似KKT条件构如下乘子函数 λ和μ称为KKT乘子。在最优解处x*应该满足如下条件 等式约束hj (x*)0和不等式约束gk (x*)0是本身应该满足的约束▽xL(x*)0和之前的拉格朗日乘数法一样。唯一多了关于gi (x)的条件 KKT条件只是取得极值的必要条件而不是充分条件。在机器学习中用到KKT条件的地方有 支持向量机SVM 数值优化算法
前面讲述的三种方法在理论推导、某些可以得到方程组的求根公式的情况如线性函数正态分布的最大似然估计中可以使用但对绝大多数函数来说梯度等于0的方程组是没法直接解出来的如方程里面含有指数函数、对数函数之类的超越函数。对于这种无法直接求解的方程组我们只能采用近似的算法来求解即数值优化算法。这些数值优化算法一般都利用了目标函数的导数信息如一阶导数和二阶导数。如果采用一阶导数则称为一阶优化算法。如果使用了二阶导数则称为二阶优化算法。
工程上实现时通常采用的是迭代法它从一个初始点x0开始反复使用某种规则从xk移动到下一个点xk1构造这样一个数列直到收敛到梯度为0的点处。即有下面的极限成立 这些规则一般会利用一阶导数信息即梯度或者二阶导数信息即Hessian矩阵。这样迭代法的核心是得到这样的由上一个点确定下一个点的迭代公式 梯度下降法 梯度下降法沿着梯度的反方向进行搜索利用了函数的一阶导数信息。梯度下降法的迭代公式为 根据函数的一阶泰勒展开在负梯度方向函数值是下降的。只要学习率设置的足够小并且没有到达梯度为0的点处每次迭代时函数值一定会下降。需要设置学习率为一个非常小的正数的原因是要保证迭代之后的xk1位于迭代之前的值xk的邻域内从而可以忽略泰勒展开中的高次项保证迭代时函数值下降。
梯度下降法及其变种在机器学习中应用广泛尤其是在深度学习中。 动量项
为了加快梯度下降法的收敛速度减少震荡引入了动量项。动量项累积了之前迭代时的梯度值加上此项之后的参数更新公式为 其中Vt1是动量项它取代了之前的梯度项。动量项的计算公式为 它是上一时刻的动量项与本次梯度值的加权平均值其中α是学习率μ是动量项系数。如果按照时间t进行展开则第t次迭代时使用了从1到t次迭代时的所有梯度值且老的梯度值安μt的系数指数级衰减 动量项累积了之前迭代时的梯度值使得本次迭代时沿着之前的惯性方向向前走。 AdaGrad算法
AdaGrad算法是梯度下降法最直接的改进。梯度下降法依赖于人工设定的学习率如果设置过小收敛太慢而如果设置太大可能导致算法那不收敛为这个学习率设置一个合适的值非常困难。
AdaGrad算法根据前几轮迭代时的历史梯度值动态调整学习率且优化变量向量X的每一个分量xi都有自己的学习率。参数更新公式为 其中α是学习因子gt是第t次迭代时参数的梯度向量ε是一个很小的正数为了避免除0操作下标i表示向量的分量。和标准梯度下降法唯一不同的是多了分母中的这一项它累积了到本次迭代为止梯度的历史值信息用于生成梯度下降的系数值。根据上式历史导数值的绝对值越大分量学习率越小反之越大。虽然实现了自适应学习率但这种算法还是存在问题需要人工设置一个全局的学习率α随着时间的累积上式中的分母会越来越大导致学习率趋向于0参数无法有效更新。 RMSProp算法
RMSProp算法是对AdaGrad的改进避免了长期累积梯度值所导致的学习率趋向于0的问题。具体做法是由梯度值构造一个向量RMS初始化为0按照衰减系数累积了历史的梯度平方值。更新公式为 AdaGrad直接累加所有历史梯度的平方和而这里将历史梯度平方值按照δt衰减之后再累加。参数更新公式为 其中δ是人工设定的参数与AdaGrad一样这里也需要人工指定的全局学习率α。 AdaDelta算法
AdaDelta算法也是对AdaGrad的改进避免了长期累积梯度值所导致的学习率趋向于0的问题另外还去掉了对人工设置的全局学习率的依赖。假设要优化的参数为x梯度下降法第t次迭代时计算出来的参数梯度值为gt。算法首先初始化如下两个向量为0向量 其中E[g2]是梯度平方对每个分量分别平分的累计值更新公式为 在这里g2是向量每个元素分别计算平方后面所有的计算公式都是对向量的每个分量进行。接下来计算如下RMS量 这也是一个向量计算时分别对向量的每个分量进行。然后计算参数的更新值 RMS[Δx]t-1的计算公式和这个类似。这个更新值同样通过梯度来构造只不过学习率是通过梯度的历史值确定的。更新公式为 参数更新的迭代公式为 Adam算法
Adam算法整合了自适应学习率与动量项。算法用梯度构造了两个向量m和v前者为动量项后者累积了梯度的平方和用于构造自适应学习率。它们的初始值为0更新公式为 其中β1,β2是人工指定的参数i为向量的分量下标。依靠这两个值构造参数的更新值参数的更新公式为 在这里m类似于动量项用v来构造学习率。 随机梯度下降法
假设训练样本集有N个样本有监督学习算法训练时优化的目标是这个数据集上的平均损失函数 其中L(w,xi,yi )是对单个训练样本(xi,yi )的损失函数w是需要学习的参数r(w)是正则化项λ是正则化项的权重。在训练样本数很大时如果训练时每次迭代都用所有样本计算成本太高作为改进可以在每次迭代时选取一批样本将损失函数定义在这些样本上。
批量随机梯度下降法在每次迭代中使用上面目标函数的随机逼近值即只使用M《N个随机选择的样本来近似计算损失函数。在每次迭代时要优化的目标函数变为 随机梯度下降法在概率意义下收敛。 牛顿法
牛顿法是二阶优化技术利用了函数的一阶和二阶导数信息直接寻找梯度为0的点。牛顿法的迭代公式为 其中H为Hessian矩阵g为梯度向量。牛顿法不能保证每次迭代时函数值下降也不能保证收敛到极小值点。在实现时也需要设置学习率原因和梯度下降法相同是为了能够忽略泰勒展开中的高阶项。学习率的设置通常采用直线搜索line search技术。
在实现时一般不直接求Hessian矩阵的逆矩阵而是求解下面的线性方程组 其解d称为牛顿方向。迭代终止的判定依据是梯度值充分接近于0或者达到最大指定迭代次数。
牛顿法比梯度下降法有更快的收敛速度但每次迭代时需要计算Hessian矩阵并求解一个线性方程组运算量大。另外如果Hessian矩阵不可逆则这种方法失效。
牛顿法在logistic回归AdaBoost算法等机器学习算法中有实际应用。 拟牛顿法
牛顿法在每次迭代时需要计算出Hessian矩阵并且求解一个以该矩阵为系数矩阵的线性方程组Hessian矩阵可能不可逆。为此提出了一些改进的方法典型的代表是拟牛顿法。拟牛顿法的思路是不计算目标函数的Hessian矩阵然后求逆矩阵而是通过其他手段得到一个近似Hessian矩阵逆的矩阵。具体做法是构造一个近似Hessian矩阵或其逆矩阵的正定对称矩阵用该矩阵进行牛顿法的迭代。
所有这些主要的数值优化算法都可以在SIGAI云端实验室上免费完成实验 www.sigai.cn 通过构造目标函数指定优化算法的参数与初始化迭代值可以可视化的显示出算法的运行过程并对不同参数时的求解结果进行比较。 可信域牛顿法
标准牛顿法可能不会收敛到一个最优解也不能保证函数值会按照迭代序列递减。解决这个问题可以通过调整牛顿方向的步长来实现目前常用的方法有两种直线搜索和可信区域法。可信域牛顿法是截断牛顿法的一个变种用于求解带界限约束的最优化问题。在可信域牛顿法的每一步迭代中有一个迭代序列xk一个可信域的大小Δk以及一个二次目标函数 这个式子可以通过泰勒展开得到忽略二次以上的项这是对函数下降值 的近似。算法寻找一个sk在满足约束条件||S||Δk下近似最小化qk(S)。接下来检查如下比值以更新wk和Δk 这是函数值的实际减少量和二次近似模型预测方向导致的函数减少量的比值。根据之前的计算结果再动态调整可信域的大小。
可信域牛顿法在logistic回归线性支持向量的求解时有实际的应用具体可以阅读liblinear开源库。 分治法
分治法是一种算法设计思想它将一个大的问题分解成子问题进行求解。根据子问题解构造出整个问题的解。在最优化方法中具体做法是每次迭代时只调整优化向量的一部分分量其他的分量固定住不动。 坐标下降法
坐标下降法的基本思想是每次对一个变量进行优化这是一种分治法。假设要求解的优化问题为; 坐标下降法求解流程为每次选择一个分量xi进行优化将其他分量固定住不动这样将一个多元函数的极值问题转换为一元函数的极值问题。如果要求解的问题规模很大这种做法能有效的加快速度。
坐标下降法在logistic回归线性支持向量的求解时有实际的应用具体可以阅读liblinear开源库。 SMO算法
SMO算法也是一种分治法用于求解支持向量机的对偶问题。加上松弛变量和核函数后的对偶问题为 SMO算法的核心思想是每次在优化变量中挑出两个分量αi 和 αj进行优化让其他分量固定这样能保证满足等式约束条件。之所以要选择两个变量进行优化而不是选择一个变量是因为这里有等式约束如果只调整一个变量的值将会破坏等式约束。
假设选取的两个分量为αi 和 αj其他分量都固定即当成常数。对这两个变量的目标函数是一个二元二次函数。这个问题还带有等式和不等式约束条件。对这个子问题可以直接求得公式解就是某一区间内的一元二次函数的极值。 分阶段优化
分阶段优化的做法是在每次迭代时先固定住优化变量X一部分分量a不动对另外一部分变量b进行优化然后再固定住b不动对b进行优化。如此反复直至收敛到最优解处。
AdaBoost算法是这种方法的典型代表。AdaBoost算法在训练时采用了指数损失函数 由于强分类器是多个弱分类器的加权和代入上面的损失函数中得到算法训练时要优化的目标函数为 这里将指数损伤函数拆成了两部分已有的强分类器Fj−1以及当前弱分类器f对训练样本的损失函数前者在之前的迭代中已经求出因此可以看成常数。这样目标函数可以简化为 其中 这个问题可以分两步求解首先将弱分类器权重β看成常数得到最优的弱分类器f。得到弱分类器之后再优化它的权重系数β。 动态规划算法
动态规划也是一种求解思想它将一个问题分解成子问题求解如果整个问题的某个解是最优的则这个解的任意一部分也是子问题的最优解。这样通过求解子问题得到最优解逐步扩展最后得到整个问题的最优解。
隐马尔可夫模型的解码算法维特比算法强化学习中的动态规划算法是这类方法的典型代表此类算法一般是离散变量的优化而且是组合优化问题。前面讲述的基于导数的优化算法都无法使用。动态规划算法能高效的求解此类问题其基础是贝尔曼最优化原理。一旦写成了递归形式的最优化方程就可以构造算法进行求解。