精华内容
下载资源
问答
  • 代价函数

    万次阅读 多人点赞 2016-10-19 21:09:30
    我在网上找了很长时间代价函数的定义,但是准确定义并没有,我理解的代价函数就是用于找到最优解的目的函数,这也是代价函数的作用。二,代价函数作用原理 对于回归问题,我们需要求出代价函数来求解最优解,常用的...

    一,什么是代价函数
    我在网上找了很长时间代价函数的定义,但是准确定义并没有,我理解的代价函数就是用于找到最优解的目的函数,这也是代价函数的作用。

    二,代价函数作用原理
    对于回归问题,我们需要求出代价函数来求解最优解,常用的是平方误差代价函数。

    比如,对于下面的假设函数:
    这里写图片描述

    里面有θ0和θ1两个参数,参数的改变将会导致假设函数的变化,比如:
    这里写图片描述

    现实的例子中,数据会以很多点的形式给我们,我们想要解决回归问题,就需要将这些点拟合成一条直线,找到最优的θ0和θ1来使这条直线更能代表所有数据。
    这里写图片描述

    而如何找到最优解呢,这就需要使用代价函数来求解了,以平方误差代价函数为例。
    从最简单的单一参数来看,假设函数为:
    这里写图片描述

    平方误差代价函数的主要思想就是将实际数据给出的值与我们拟合出的线的对应值做差,这样就能求出我们拟合出的直线与实际的差距了。

    这里写图片描述

    而在前面乘以1/2,是因为后面求导会有2,为了简便计算。这样,就产生了代价函数:
    这里写图片描述

    而最优解即为代价函数的最小值,根据以上公式多次计算可得到
    代价函数的图像:
    这里写图片描述

    可以看到该代价函数的确有最小值,这里恰好是横坐标为1的时候。

    如果更多参数的话,就会更为复杂,两个参数的时候就已经是三维图像了:
    这里写图片描述

    高度即为代价函数的值,可以看到它仍然有着最小值的,而到达更多的参数的时候就无法像这样可视化了,但是原理都是相似的。
    因此,对于回归问题,我们就可以归结为得到代价函数的最小值:
    这里写图片描述


    这是我在学习ng的机器学习课程的基础上,经过自己的一些思考,写下学习笔记,重点是对于一些细节的思考和逻辑的理清。
    以上很多都是个人见解,如果有不对的地方还请大家指点。

    展开全文
  • 交叉熵代价函数与二次代价函数         交叉熵代价函数(Cross-entropy cost function)是用来衡量人工神经网络(ANN)的预测值与实际值的一种方式。与二次代价函数相比,它能更有效地促进ANN...

    转自:https://blog.csdn.net/u014313009/article/details/51043064。感谢!

    交叉熵代价函数与二次代价函数

            交叉熵代价函数(Cross-entropy cost function)是用来衡量人工神经网络(ANN)的预测值与实际值的一种方式。与二次代价函数相比,它能更有效地促进ANN的训练。在介绍交叉熵代价函数之前,本文先简要介绍二次代价函数,以及其存在的不足。

    1. 二次代价函数的不足

            ANN的设计目的之一是为了使机器可以像人一样学习知识。人在学习分析新事物时,当发现自己犯的错误越大时,改正的力度就越大。比如投篮:当运动员发现自己的投篮方向离正确方向越远,那么他调整的投篮角度就应该越大,篮球就更容易投进篮筐。同理,我们希望:ANN在训练时,如果预测值与实际值的误差越大,那么在反向传播训练的过程中,各种参数调整的幅度就要更大,从而使训练更快收敛。然而,如果使用二次代价函数训练ANN,看到的实际效果是,如果误差越大,参数调整的幅度可能更小,训练更缓慢。

            以一个神经元的二类分类训练为例,进行两次实验(ANN常用的激活函数为sigmoid函数,该实验也采用该函数):输入一个相同的样本数据x=1.0(该样本对应的实际分类y=0);两次实验各自随机初始化参数,从而在各自的第一次前向传播后得到不同的输出值,形成不同的代价(误差):

                            实验1:第一次输出值为0.82

         

                            实验2:第一次输出值为0.98        

            在实验1中,随机初始化参数,使得第一次输出值为0.82(该样本对应的实际值为0);经过300次迭代训练后,输出值由0.82降到0.09,逼近实际值。而在实验2中,第一次输出值为0.98,同样经过300迭代训练,输出值只降到了0.20。

            从两次实验的代价曲线中可以看出:实验1的代价随着训练次数增加而快速降低,但实验2的代价在一开始下降得非常缓慢;直观上看,初始的误差越大,收敛得越缓慢。

            其实,误差大导致训练缓慢的原因在于使用了二次代价函数。二次代价函数的公式如下:

                            

            其中,C表示代价,x表示样本,y表示实际值,a表示输出值,n表示样本的总数。为简单起见,同样一个样本为例进行说明,此时二次代价函数为:

                            

            目前训练ANN最有效的算法是反向传播算法。简而言之,训练ANN就是通过反向传播代价,以减少代价为导向,调整参数。参数主要有:神经元之间的连接权重w,以及每个神经元本身的偏置b。调参的方式是采用梯度下降算法(Gradient descent),沿着梯度方向调整参数大小。w和b的梯度推导如下:

                          

            其中,z表示神经元的输入,表示激活函数。从以上公式可以看出,w和b的梯度跟激活函数的梯度成正比,激活函数的梯度越大,w和b的大小调整得越快,训练收敛得就越快。而神经网络常用的激活函数为sigmoid函数,该函数的曲线如下所示:

                      

            如图所示,实验2的初始输出值(0.98)对应的梯度明显小于实验1的输出值(0.82),因此实验2的参数梯度下降得比实验1慢。这就是初始的代价(误差)越大,导致训练越慢的原因。与我们的期望不符,即:不能像人一样,错误越大,改正的幅度越大,从而学习得越快。

            可能有人会说,那就选择一个梯度不变化或变化不明显的激活函数不就解决问题了吗?图样图森破,那样虽然简单粗暴地解决了这个问题,但可能会引起其他更多更麻烦的问题。而且,类似sigmoid这样的函数(比如tanh函数)有很多优点,非常适合用来做激活函数,具体请自行google之。

    2. 交叉熵代价函数

            换个思路,我们不换激活函数,而是换掉二次代价函数,改用交叉熵代价函数:

                

            其中,x表示样本,n表示样本的总数。那么,重新计算参数w的梯度:

                

            其中(具体证明见附录):

                

            因此,w的梯度公式中原来的被消掉了;另外,该梯度公式中的表示输出值与实际值之间的误差。所以,当误差越大,梯度就越大,参数w调整得越快,训练速度也就越快。同理可得,b的梯度为:

                

            实际情况证明,交叉熵代价函数带来的训练效果往往比二次代价函数要好。

    3. 交叉熵代价函数是如何产生的?

            以偏置b的梯度计算为例,推导出交叉熵代价函数:

        

            在第1小节中,由二次代价函数推导出来的b的梯度公式为:

        

            为了消掉该公式中的,我们想找到一个代价函数使得:

        

            即:

        

            对两侧求积分,可得:

            而这就是前面介绍的交叉熵代价函数。

    附录:

            sigmoid函数为:

            可证:

    展开全文
  • 二次代价函数的局限性 首先来说一下二次代价函数的局限性,看下面这张图: 假设现在使用的激活函数是sigmoid,并且代价函数是二次代价函数,我们收敛得目标是1,那么A点的梯度比较大,B点由于离目标比较近梯度小,...
    二次代价函数的局限性

    首先来说一下二次代价函数的局限性,看下面这张图:
    在这里插入图片描述
    假设现在使用的激活函数是sigmoid,并且代价函数是二次代价函数,我们收敛得目标是1,那么A点的梯度比较大,B点由于离目标比较近梯度小,所以是合理的;但是如果我们的收敛目标是0,那么A点离目标比较近,所以梯度应该要小于B点,但是图中明明是A点的梯度大于B点,这是不合理的。

    交叉熵

    正式由于二次大家函数的这个局限性,我们需要引入交叉熵。看下面这张图:
    在这里插入图片描述

    上面这张图中,C=12[ylna+(1y)ln(1a)]C=-\frac{1}{2}\sum[ylna+(1-y)ln(1-a)]代表的是交叉熵代价函数,对w和b进行求导后得到下面的式子:
    在这里插入图片描述
    现在我们发现w和b的调整已经跟 激活函数的导数(注意是导数哦) 无关了,而是跟输出值和真实值的误差有关,他们的误差越大,梯度也就越大,w和b的收敛速度越快。

    总结

    虽然二次代价函数有自身的局限性,但是我们也不能因此而丢弃它不用,因为在线性回归问题中它依然用后很大的价值,因此要根据实际需要选择代价函数。底下是一个小结,大家可以在实际中根据需要进行选择:

    • 二次代价函数:输出神经元是线性的就选用该代价函数
    • 交叉熵代价函数:输出神经元是S型的就选用该代价函数,例如sigmoid激活函数中(tf.nn.sigmoid_cross_entropy_with_logits())
    • 对数似然代价函数:输出神经元是softmax的时候选用(tf.nn.softmax_cross_entropy_with_logits())

    结束线/

    欢迎大家加入Q群讨论:463255841

    结束线/

    展开全文
  • 二次代价函数和交叉熵代价函数

    千次阅读 2018-02-28 00:44:10
    交叉熵代价函数(Cross-entropy cost function)是用来衡量人工神经网络(ANN)的预测值与实际值的一种方式。与二次代价函数相比,它能更有效地促进ANN的训练。在介绍交叉熵代价函数之前,本文先简要介绍二次代价...

      交叉熵代价函数(Cross-entropy cost function)是用来衡量人工神经网络(ANN)的预测值与实际值的一种方式。与二次代价函数相比,它能更有效地促进ANN的训练。在介绍交叉熵代价函数之前,本文先简要介绍二次代价函数,以及其存在的不足。


    1. 二次代价函数的不足

            ANN的设计目的之一是为了使机器可以像人一样学习知识。人在学习分析新事物时,当发现自己犯的错误越大时,改正的力度就越大。比如投篮:当运动员发现自己的投篮方向离正确方向越远,那么他调整的投篮角度就应该越大,篮球就更容易投进篮筐。同理,我们希望:ANN在训练时,如果预测值与实际值的误差越大,那么在反向传播训练的过程中,各种参数调整的幅度就要更大,从而使训练更快收敛。然而,如果使用二次代价函数训练ANN,看到的实际效果是,如果误差越大,参数调整的幅度可能更小,训练更缓慢。

            以一个神经元的二类分类训练为例,进行两次实验(ANN常用的激活函数为sigmoid函数,该实验也采用该函数):输入一个相同的样本数据x=1.0(该样本对应的实际分类y=0);两次实验各自随机初始化参数,从而在各自的第一次前向传播后得到不同的输出值,形成不同的代价(误差):

    实验1:第一次输出值为0.82

         

    实验2:第一次输出值为0.98

            

            在实验1中,随机初始化参数,使得第一次输出值为0.82(该样本对应的实际值为0);经过300次迭代训练后,输出值由0.82降到0.09,逼近实际值。而在实验2中,第一次输出值为0.98,同样经过300迭代训练,输出值只降到了0.20。

            从两次实验的代价曲线中可以看出:实验1的代价随着训练次数增加而快速降低,但实验2的代价在一开始下降得非常缓慢;直观上看,初始的误差越大,收敛得越缓慢

            其实,误差大导致训练缓慢的原因在于使用了二次代价函数。二次代价函数的公式如下:



            其中,C表示代价,x表示样本,y表示实际值,a表示输出值,n表示样本的总数。为简单起见,同样一个样本为例进行说明,此时二次代价函数为:



            目前训练ANN最有效的算法是反向传播算法。简而言之,训练ANN就是通过反向传播代价,以减少代价为导向,调整参数。参数主要有:神经元之间的连接权重w,以及每个神经元本身的偏置b。调参的方式是采用梯度下降算法(Gradient descent),沿着梯度方向调整参数大小。w和b的梯度推导如下:



            其中,z表示神经元的输入,表示激活函数。从以上公式可以看出,w和b的梯度跟激活函数的梯度成正比,激活函数的梯度越大,w和b的大小调整得越快,训练收敛得就越快。而神经网络常用的激活函数为sigmoid函数,该函数的曲线如下所示:



            如图所示,实验2的初始输出值(0.98)对应的梯度明显小于实验1的输出值(0.82),因此实验2的参数梯度下降得比实验1慢。这就是初始的代价(误差)越大,导致训练越慢的原因。与我们的期望不符,即:不能像人一样,错误越大,改正的幅度越大,从而学习得越快。

            可能有人会说,那就选择一个梯度不变化或变化不明显的激活函数不就解决问题了吗?图样图森破,那样虽然简单粗暴地解决了这个问题,但可能会引起其他更多更麻烦的问题。而且,类似sigmoid这样的函数(比如tanh函数)有很多优点,非常适合用来做激活函数,具体请自行google之。



    2. 交叉熵代价函数

            换个思路,我们不换激活函数,而是换掉二次代价函数,改用交叉熵代价函数:



            其中,x表示样本,n表示样本的总数。那么,重新计算参数w的梯度:



            其中(具体证明见附录):


            因此,w的梯度公式中原来的被消掉了;另外,该梯度公式中的表示输出值与实际值之间的误差。所以,当误差越大,梯度就越大,参数w调整得越快,训练速度也就越快。同理可得,b的梯度为:



            实际情况证明,交叉熵代价函数带来的训练效果往往比二次代价函数要好。



    3. 交叉熵代价函数是如何产生的?

            以偏置b的梯度计算为例,推导出交叉熵代价函数:



            在第1小节中,由二次代价函数推导出来的b的梯度公式为:



            为了消掉该公式中的,我们想找到一个代价函数使得:



            即:



            对两侧求积分,可得:



            而这就是前面介绍的交叉熵代价函数。




    附录:

            sigmoid函数为:


            可证:

    展开全文
  • 代价函数与损失函数

    2021-03-15 18:13:57
    代价函数(cost function) 为了得到训练逻辑回归模型的参数,需要一个代价函数,通过训练代价函数来得到参数。 在回归问题中,通过代价函数来求解最优解,常用的是平方误差代价函数。 常见代价函数 (1)二次代价函数...
  • 交叉熵代价函数(Cross-entropy cost function)是用来衡量人工神经网络(ANN)的预测值与实际值的一种方式。与二次代价函数相比,它能更有效地促进ANN的训练。在介绍交叉熵代价函数之前,本文先简要介绍二次代价...
  • 损失函数(代价函数)2.1 L1范数损失函数2.2 L2范数损失函数2.3 二次代价函数2.4 交叉熵代价函数2.5 对数释然代价函数(log-likelihood cost)3.演示代码 1.激活函数 激活函数的想法来自对人脑中神经元工作机理的分析...
  • 损失函数:计算的是一个样本的误差代价函数:是整个训练集上所有样本误差的平均目标函数:代价函数 + 正则化项
  • 理解代价函数

    2020-08-14 21:42:40
    理解代价函数 Q:为什么会提及关于代价函数的理解? A:在 ML 中线性回归、逻辑回归等总都是绕不开代价函数。 理解代价函数:是什么?作用原理?为什么代价函数是这个? 1、代价函数是什么? 代价函数就是用于找到最...
  • 损失函数、代价函数与目标函数
  • 交叉熵代价函数 machine learning算法中用得很多的交叉熵代价函数。 1.从方差代价函数说起 代价函数经常用方差代价函数(即采用均方误差MSE),比如对于一个神经元(单输入单输出,sigmoid函数),定义其代价...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,681
精华内容 3,472
关键字:

代价函数