请问这个函数里已经带了y的函数y=定积分e^t^2该怎么求导呢,想要详细过程,谢谢!

作者简介:SIGAI人工智能平台()
本文PDF版丅载地址:

XGBoost是当前炙手可热的算法适合抽象数据的分析问题,在Kaggle等比赛中率获佳绩市面上虽然有大量介绍XGBoost原理与使用的文章,但少有能清晰透彻的讲清其原理的本文的目标是对XGBoost的原理进行系统而深入的讲解,帮助大家真正理解算法的原理文章是对已经在清华达成出蝂社出版的,雷明著的补充在这本书里系统的讲解了集成学习、bagging与随机森林、boosting与各类AdaBoost算法的原理及其实现、应用。AdaBoost与梯度提升XGBoost的推导嘟需要使用广义加法模型,对此也有深入的介绍

理解XGBoost的原理需要决策树(尤其是分类与回归树),集成学习广义加法模型,牛顿法等基础知识其中,决策树在SIGAI之前的公众号文章“”中已经做了深入的讲解集成学习在之前的公众号文章“”, “”“”中已经做了讲解。牛顿法在之前的公众号文章“”“”,“”中已经进行了介绍如果读者对这些知识还不清楚,建议先阅读这些文章

决策树时机器学习中古老的算法,可以看做是一组嵌套的判定规则这组规则通过训练得到。从数学上看决策树是一个分段常数函数,每个叶子节點对应空间中的一片区域落入此区域的向量 x被预测为该叶子节点的值。

分类与回归树是二叉决策树的一种既可以用于分类问题,也可鉯用于回归问题训练时要解决的核心问题是寻找最佳分裂来确定内部节点,递归构建树为叶子节点赋予标签值。对于分类问题寻找朂佳分裂时的目标是最大化Gini纯度值,简化后的计算公式为

NL?是分裂之后左子节点的训练样本数 NL,i?是左子节点中第 NR?是分裂之后右子节点嘚训练样本数, NR,i?是右子节点中第 i类样本数对于回归问题,寻找最佳分裂时优化的目标是最大化回归误差的下降值

因为特征向量中有多個特征因此实现时需要为每个特征分量计算最佳分裂阈值,然后取其中最优的为单个特征计算最佳分裂阈值时,首先将该节点的所有訓练样本按照该特征分量从小到大排序然后依次以每个特征值作为阈值,将样本集分为左右两个子集然后计算上面的分裂指标,取其朂优值具体原理在一书中已经详细讲述。

第二个问题是叶子节点值的设定对于分类问题,将叶子节点的值设置成本节点的训练样本集Φ出现概率最大的那个类;对于回归树则设置为本节点训练样本标签值的均值。

集成学习是机器学习中的一大类算法它代表了一种朴素的思想:将多个机器学习模型组合起来使用,得到一个更强的模型被组合的模型称为弱学习器,组合之后的模型称为强学习器根据組合的策略不同,诞生了各种不同的算法其中最常用的是bagging与boosting。前者的代表作是随机森林后者的代表作是AdaBoost,梯度提升XGBoost。

在弱学习器的組合方案中如果使用加法,即将多个弱学习器的预测函数相加得到强学习器则称为广义加法模型。广义加法模型拟合的目标函数是多個基函数的线性组合

γi?为基函数的参数 βi?为基函数的权重系数。训练时要确定的是基函数的参数和权重值如果用决策树充当基函數,则参数为比较特征、比较阈值叶子节点值等。训练时的目标是最小化对所有样本的损失函数

训练算法采用了逐步求精的策略依次確定每个基函数的参数和权重,然后将其加入强学习器中使得强学习器的精度提升。实际实现时将当前已经得到的强学习器对训练样夲的输出值当做常数。然后采用分阶段优化策略先固定住权重值 βi?,优化弱学习器然后再将弱学习器当做常数,优化权重值

以AdaBoost算法為例强分类器对单个训练样本的损失为指数损失函数

将广义加法模型的预测函数代入上面的损失函数中,得到算法训练时要优化的目标函数为

这里将指数函数拆成了两部分已有的强分类器 Fj?1?,以及当前弱分类器 f对训练样本的损失函数前者在之前的迭代中已经求出,洇此 Fj?1?(xi?)可以看成常数这样目标函数可以简化为

它只和前面的迭代得到的强分类器有关,与当前的弱分类器、弱分类器权重无关这僦是AdaBoost算法的样本权重。这个问题可以分两步求解首先将 f(xi?);然后固定 β。由此得到了AdaBoost的训练算法

从广义加法模型可以推导出种AdaBoost算法,咜们的弱分类器不同训练时优化的目标函数也不同,分别是:

各种AdaBoost算法的原理以及广义加法模型在《机器学习与应用》一书中有详细的講述限于篇幅,在这里不过多介绍

除AdaBoost算法之外,boosting还有其他实现算法如梯度提升算法。梯度提升算法采用了不同的思路同样是使用廣义加法模型,但在求解时采用了最速下降法(梯度下降法的变种)同样是依次训练每个弱学习器,但训练弱学习器时没有为训练样本加上权重而是为其计算伪标签值,该伪标签值是损失函数对当前已经求得的强学习器对训练样本的预测值 Fj?1?(Xi?)的导数的负值:

牛顿法昰求解函数极值的数值优化(近似求解)算法根据微积分中的Fermat定理,函数在点 x?处取得极值的必要条件是导数(对于多元函数是梯度)為 0 0

0 x?为函数的驻点因此可以通过寻找函数的驻点求解函数的极值。直接计算函数的梯度然后解上面的方程组一般来是非常困难的如果函数是一个复杂的非线性函数,这个方程组是一个非线性方程组不易求解。因此大多采用迭代法近似计算它从一个初始点 0 x0?开始,反複使用某种规则从 xk+1?直至到达函数的极值点。这些规则一般会利用一阶导数信息即梯度;或者二阶导数信息即Hessian矩阵牛顿法采用了一阶導数与二阶导数信息。

0

x0?处作二阶泰勒展开有:

0 0 0 0 0 0 0 忽略二次及以上的项,将函数近似成二次函数并对上式两边同时对求梯度,得到函数嘚梯度为:

0 0 0 HessianH$令函数的梯度为 0 0

0 0 0 0 解这个线性方程组可以得到:

0 0 0 由于在泰勒展开中忽略了高阶项,因此这个解并不一定是函数的驻点需要反复用这个公式进行迭代。从初始点 0 x0?处开始反复计算函数在处的Hessian矩阵和梯度向量,然后用下面的公式进行迭代:

最终会到达函數的驻点处其中 ?H?1g称为牛顿方向。迭代终止的条件是梯度的模接近于 0 0 0或者函数值下降小于指定阈值。对于一元函数Hessian矩阵即为二阶導数,梯度向量即为一阶导数迭代公式为

在XGBoost的推导中将会使用此方法。

XGBoost是对梯度提升算法的改进求解损失函数极值时使用了牛顿法,將损失函数泰勒展开到二阶另外在损失函数中加入了正则化项。训练时的目标函数由两部分构成第一部分为梯度提升算法损失,第二蔀分为正则化项XGBoost的损失函数定义为

l是对单个样本的损失, yi?为样本真实标签值 ?为模型的参数。正则化项定义了模型的复杂程度

w为决筞树所有叶子节点值形成的向量 T为叶子节点数。正则化项由叶子节点数叶子节点值向量的模平方两项构成,第一项体现了决策树结构嘚复杂程度第二项体现了决策树预测值的复杂程度。定义 x到决策树叶子节点编号的映射即根据输入向量确定用决策树的第几个叶子节點值来预测它的输出值

d为特征向量的维数。因此 w定义了树的输出值决策树的映射函数可以写成

与梯度提升算法相同,采用加法模型表示強学习器假设 t次迭代时的强学习器预测值,训练时依次确定每一个弱学习器函数 ft?加到强学习器预测函数中,即最小化如下目标函数

ft?加入到模型中以最小化目标函数值。注意在这里 yi,t?1?+ft?(xi?)是损失函数的自变量,而也是常数对于一般的损失函数无法求得上面優化问题的公式解。采用牛顿法近似求解对目标函数在点处作二阶泰勒展开后得到

与梯度提升算法相同,是将之前已经训练得到的强学習器对样本的预测值当做变量求导这一点一定要理解,很多读者困惑的地方在于不知道这个导数是对谁求导损失函数的二阶导数为

ft?(xi?)与无关的常数项,可以得到化简后的损失函数为

j个叶子节点的训练样本集合(样本下标集合)由于每个训练样本只属于某一个叶子节點,目标函数可以拆分成对所有叶子节点损失函数的和

首先介绍叶子节点的值如何确定如果决策树的结构即 q(x)确定,根据牛顿法可以得到苐 j个叶子节点的最优值为

这是单个叶子节点的损失函数对 0 0 0后解方程的结果前面已经假定对单个样本的损失函数是凸函数,因此必定是极尛值单个叶子节点的损失函数对

令其为0,即可得到上面的结果


最近用tensorflow写了个OCR的程序在实现的過程中,发现自己还是跳了不少坑在这里做一个记录,便于以后回忆主要的内容有lstm+ctc具体的输入输出,以及TF中的和百度开源的在具体使鼡中的区别

因为我最后要最小化的目标函数就是ctc_loss,所以下面就从如何构造输入输出说起

先从TF自带的说起,官方给的定义洳下因此我们需要做的就是将图片的label(需要OCR出的结果),图片以及图片的长度转换为label,input和sequence_length。

 

由于OCR的结果是不定长的所以label实际上是┅个稀疏矩阵,


对于warpCTC需要注意几点

  • 输入格式:有四个输入与标准CTC的三个输入不同
  • class_label问题,标准CTC的情况下如果自己使用的数据有N中类别,汾别是0~N-1,那么标准CTC会把默认的blank类别作为第N类而warpCTC中0被用作了默认的blank标签

我要回帖

更多关于 函数y=定积分e^t^2 的文章

 

随机推荐