学习日志(六):梯度下降算法原理--- Gradient descent algorithm

  机器学习是从有限的观测数据中学习(或“猜测”)出具有一般性的规律,并可以将总结出来的规律推广应用到未观测样本上. 几乎所有的机器学习算法最后都归结为求解最优化问题,以达到我们想让算法达到的目标。机器学习方法可以粗略地分为三个基本要素:模型、学习准则、优化算法.在机器学习中,我们通常需要对问题进行建模,然后可以得到一个成本函数(cost function),通过对这个成本函数进行最小化,我们可以得到我们所需要的参数,从而得到具体的模型。然后再遇到类似的问题就可以通过该模型去解决。或者换一种类似的说法机器学习为了完成某一目标,需要构造出一个“目标函数”来,然后让该函数取极大值或极小值,从而得到机器学习算法的模型数。如何构造出一个合理的目标函数,是建立机器学习算法的关键,一旦目标函数确定,接下来就是求解最优化问题。

********************************** 补充:***********************************

问:可能有人看到成本函数会想到损失函数,那么二者是否相同?如果不一样,二者是说没关系?那二者和目标函数又是什么关系?(答案个人理解,欢迎指正)
答:

  • 个人理解代价函数,损失函数二者几乎可以看做同一个东西的,也就是说代价函数=损失函数。为什么这么说呢?先给出网上关于这俩个概念最多的解释:
    损失函数(Loss Function)是定义在单个样本上的,算的是一个样本的误差。
    代价函数(Cost Function )是定义在整个训练集上的,是所有样本误差的平均,也就是损失函数的平均
      注意红色部分的内容,它说代价函数是损失函数的平均,也就是说没有损失函数就没有代价函数,如此一来,我说二者是同一个东西应该没什么问题。
  • 还有就是它们和目标函数的联系与区别。目标函数我觉得和成本函数是一个意思。目标函数(Object Function)定义为:最终需要优化的函数。 等于经验风险+结构风险(也就是Cost Function + 正则化项)。经验损失(loss)就是传说中的损失函数或者代价函数。结构损失(Ω)就是正则项之类的来控制模型复杂程度的函数。也就是说Cost和Loss是目标函数的基础。

  根据这个逻辑关系不难看出损失函数是生活在社会最底层的卑微小角色。夸张点说没有它就没有代价函数和目标函数。那么三者之间到底是什么关系?
相同点: 从某种意义来说,三者都是对模型的优化,都是对模型好坏的一个侧写和反映
不同点: 虽然都是对模型的优化,都是对模型好坏的一个反映,但是涉及对象的层面来说是有所区别的,损失函数是一个样本,代价函数是整个训练集,而目标函数是对整个网络或者模型有影响的因素的一个整体表达。

******************************************************************************

  在机器学习训练网络的过程中,对算法的优化是必不可少的一步,最简单、常用的优化算法就是梯度下降法。可以这么说,机器学习的训练过程其实就是最优化问题的求解过程.梯度下降算法大致有一下三种:

  • stochastic gradient descent(随机梯度下降,SGD)
  • Batch gradient descent(批梯度下降,BGD)
  • Mini-batch gradient descent(小批量梯度下降,MBGD)

  在论文研读或者网络的训练优化过程中会涉及到参数与超参数这俩个概念: 参数与超参数在机器学习中,优化又可以分为参数优化和超参数优化. 模型 𝑓(𝒙; 𝜃)中的𝜃 称为模型的参数,可以通过优化算法进行学习. 除了可学习的参数 𝜃 之外,还有一类参数是用来定义模型结构或优化策略的,这类参数叫做超参数(Hyper-Parameter).
  常见的超参数包括:聚类算法中的类别个数、梯度下降法中的步长、正则化项的系数、神经网络的层数、支持向量机中的核函数等. 超参数的选取一般都是组合优化问题,很难通过优化算法来自动学习. 因此,超参数优化是机器学习的一个经验性很强的技术,通常是按照人的经验设定,或者通过搜索的方法对一组超参数组合进行不断试错调整.
  我在第一次读到这个词儿的时候一脸懵逼,二脸茫然,三脸疑惑,它是谁?它能干嘛?为什么要用它…因为当我听到梯度下降算法的时候我的注意力都在梯度俩个字,我在想,梯度不是只有数学才有吗?怎么这里也在说梯度?思索得出结论,它们应该不一样,然后这个问题就困扰了我很久,直到有一天,遇到了一位得到高僧…
  首先要知道,站在某种角度,你所了解的神经网络不管是整个网络亦或是网络的某个Block又或者某一层都可以看做一个函数,就是数学意义的函数。对网络的训练优化就可以看做对一个函数求解的过程。回想高中对一元二次函数求极大极小值的时候都会对函数进行求导,令导数为0,再进行求解。在神经网络中,对网络的优化就是对多元函数求解,通过微分实现。通常情况下对网络的优化是寻找函数的最小值。这时候就用到了上面说过的梯度下降算法,那么什么是梯度,梯度下降算法是怎么起作用的?接下来我们一起来看一下。
梯度: 梯度是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。
这是一个标准的解释,其实梯度你就可以理解为导数,切线的斜率都可以。

  我先用一元函数来解释梯度下降的原理。如上图,我们要想找到这个函数的最小值点(0,0),我们要先求在A点处的导数,经过计算发现A点处的导数(梯度)值小于0,要想求得最小值,x的值只有增大,然后依次类推,不断的根据导数(梯度)值求得函数的最小值。下面给出网络上关于梯度下降算法解释的图片和解释。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  其实第一张图是最形象准确的,因为描述网络的函数一定是多元函数,它在某一点的梯度方向是360°的,要想在最短的时间求得最小值就要找到相对于该位置而言下降最快的梯度方向,然后根据梯度不断更新最终求得函数的最小值,使得网络最优化。第三张图所描述的x的变化就很好的解释了x在更新过程中根据当前点的梯度进行的方向变化直到求得最优解。至于第二张图你可以把它当做一元函数也可以当做二元函数的某个视图,这里我用二元函数来解释。有人会有疑惑这个x为什么跨越幅度这么大,俩边跑?这里涉及到另外一个概念学习率。
学习率:也叫步长,是指在训练期间权重更新的量
第二张图就是学习率大的结果,它会左右跳动的更新,这样不利于网络最优化得到最优解。太小的话同样不利于网络的训练,因为学习率太小可能永远不会收敛等等其他结果。
参考文献:
1.邱锡鹏:神经网络与深度学习
2.机器学习中的目标函数、损失函数、代价函数有什么区别?
3.什么是梯度下降法?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值