zoukankan      html  css  js  c++  java
  • 机器学习之常用损失函数和优化方法

    常见的损失函数有哪些?(这里的损失函数严格来说是目标函数,一般都称呼为损失函数)

    具体见:

    https://blog.csdn.net/iqqiqqiqqiqq/article/details/77413541

    1)0-1损失函数

    记录分类错误的次数。

    2)绝对值损失函数

    通常用于回归中

    3)平方损失函数

    即真实值与预测值之差的平方和。通常用于线性模型中,如线性回归模型。之所以采用平方的形式,而非绝对值或三次方的形式,是因为最大似然估计(求损失函数的极小值)与最小化平方损失是等价的。

    4)对数损失

    5)指数损失函数

    常用的优化方法有哪些?

    对损失函数的优化:

    当我们对分类的Loss进行改进的时候,我们要通过梯度下降,每次优化一个step大小的梯度,这个时候我们就要求Loss对每个权重矩阵的偏导,然后应用链式法则。

    最小二乘法(主要是说线性回归中的优化算法)梯度下降法、牛顿法、拟牛顿法、共轭梯度法

    详细说一下梯度下降法

    在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,梯度下降不一定能够找到全局的最优解,有可能是一个局部最优解。当然,如果损失函数是凸函数,梯度下降法得到的解就一定是全局最优解。

    1)梯度

    在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。

    那么这个梯度向量求出来有什么意义呢?他的意义从几何意义上讲,就是函数变化增加最快的地方。或者说,沿着梯度向量的方向,更加容易找到函数的最大值。反过来说,沿着梯度向量相反的方向,也就是 -(∂f/∂x0, ∂f/∂y0)T的方向,梯度减少最快,也就是更加容易找到函数的最小值。

    2)梯度下降与梯度上升

    在机器学习算法中,在最小化损失函数时,可以通过梯度下降法来一步步的迭代求解,通过启发式的方式一步步迭代求解函数的最小值,得到最小化的损失函数,和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。

      梯度下降法和梯度上升法是可以互相转化的。比如我们需要求解损失函数f(θ)的最小值,这时我们需要用梯度下降法来迭代求解。但是实际上,我们可以反过来求解损失函数 -f(θ)的最大值,这时梯度上升法就派上用场了。

    3)梯度下降的算法调优

    在使用梯度下降时,需要进行调优。

    第一、算法的步长选择。在前面的算法描述中,我提到取步长为1,但是实际上取值取决于数据样本,可以多取一些值,从大到小,分别运行算法,看看迭代效果,如果损失函数的值在变小,说明取值有效,否则要增大步长。前面说了。步长太大,会导致迭代过快,甚至有可能错过最优解。步长太小,迭代速度太慢,很长时间算法都不能结束。所以算法的步长需要多次运行后才能得到一个较为优的值。

    第二、算法参数的初始值选择。初始值不同,获得的最小值也有可能不同,因此梯度下降求得的只是局部最小值;当然如果损失函数是凸函数则一定是最优解。由于有局部最优解的风险,需要多次用不同初始值运行算法,观测损失函数的最小值,选择损失函数最小化的初值。

    第三、归一化。由于样本不同特征的取值范围不一样,可能导致迭代很慢,为了减少特征取值的影响,可以对特征数据归一化,也就是对于每个特征x,求出它的期望x¯和标准差std(x),然后转化为x−x¯¯¯std(x)x−x¯std(x)

    这样特征的新期望为0,新方差为1,迭代次数可以大大加快。

    4)梯度下降的种类

    第一、批量梯度下降法。每次对参数的更新都需要用到整个训练数据集,能够得到全局最优解,但是当数据量很大时训练速度会很慢。

    第二、随机梯度下降法。他是每次 只选用一个样本进行迭代,训练速度固然得到很大提升,但是准确度下降了,得到的很可能不是最优解。容易陷入到局部最优解中。一直不会收敛,只是在最小值附近波动

    第三、小批量(部分)梯度下降法,它是以上两者的结合。

    对于损失函数与模型训练的理解

    损失函数(loss function)是用来估量你模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好。损失函数是经验风险函数的核心部分,也是结构风险函数重要组成部分。模型的结构风险函数包括了经验风险项和正则项,通常可以表示成如下式子:

                        

      通常损失函数(严格来说是目标函数)由上面公式的两部分组成,前部分就是计算算法预测的值和训练样本真实标签之间的距离,不同的距离计算方式代表了不同的计算损失函数的方法。第二部分J(f)代表了正则化选项,当训练的出函数过于复杂时,可能会导致训练的参数过拟合了,这时需要引入正则化因子来控制模型的复杂度。防止过拟合的产生。

     介绍完损失函数我们介绍一下参数学习的方式,

            ωj = ωj - λ ∂L(ωj) / ∂ωj

    通过计算损失函数关于w参数的梯度来逐步调整w参数,使损失函数越来越小,完成模型的训练,参数达到收敛。

  • 相关阅读:
    MS CRM 2011的自定义和开发(10)——CRM web服务介绍(第一部分)——IDiscoveryService
    MS CRM 2011的自定义和开发(7)——视图编辑器(第二部分)
    MS CRM 2011 SDK 5.06版本已经发布
    MS CRM 2011的自定义和开发(11)——插件(plugin)开发(一)
    近来遇到的MS CRM 2011方面的几个问题
    MS CRM 2011的自定义与开发(6)——表单编辑器(第二部分)
    Microsoft Dynamics CRM 2011中,Lookup字段的赋值
    MS CRM 2011的自定义和开发(6)——表单编辑器(第三部分)
    Visual Studio 目标框架造成 命名空间“Microsoft”中不存在类型或命名空间名称“Crm”。是否缺少程序集引用中错误的处理
    一步步学习Reporting Services(二) 在报表中使用简单的参数作为查询条件
  • 原文地址:https://www.cnblogs.com/dyl222/p/11020068.html
Copyright © 2011-2022 走看看