精华内容
下载资源
问答
  • 2020-10-07 15:51:20

    参考文章:
    什么是代价函数?
    简单来说,代价指的就是预测值(估计值)与实际值之间的差,代价函数J就是让这个差趋于0,当代价函数J等于0的时候,这时候的预测值就和实际值是完全相等的,也就是说明此时我们已经对实际情况进行了完美的估计了。
    代价函数也常常用在信道估计上。

    更多相关内容
  • 信息论与编码理论实验
  • 代价函数

    千次阅读 2017-04-02 02:14:42
    注:代价函数(有的地方也叫损失函数,Loss Function)在机器学习中的每一种算法中都很重要,因为训练模型的过程就是优化代价函数的过程,代价函数对每个参数的偏导数就是梯度下降中提到的梯度,防止过拟合时添加的...

    http://www.cnblogs.com/Belter/p/6653773.html

    :代价函数(有的地方也叫损失函数,Loss Function)在机器学习中的每一种算法中都很重要,因为训练模型的过程就是优化代价函数的过程,代价函数对每个参数的偏导数就是梯度下降中提到的梯度,防止过拟合时添加的正则化项也是加在代价函数后面的。在学习相关算法的过程中,对代价函数的理解也在不断的加深,在此做一个小结。

     

    什么是代价函数?


    假设有训练样本(x, y),模型为h,参数为θ。h(θ) = θTx(θT表示θ的转置)。

    (1)概况来讲,任何能够衡量模型预测出来的值h(θ)与真实值y之间的差异的函数都可以叫做代价函数C(θ),如果有多个样本,则可以将所有代价函数的取值求均值,记做J(θ)。因此很容易就可以得出以下关于代价函数的性质:

    • 对于每种算法来说,代价函数不是唯一的;
    • 代价函数是参数θ的函数;
    • 总的代价函数J(θ)可以用来评价模型的好坏,代价函数越小说明模型和参数越符合训练样本(x, y);
    • J(θ)是一个标量;

    (2)当我们确定了模型h,后面做的所有事情就是训练模型的参数θ。那么什么时候模型的训练才能结束呢?这时候也涉及到代价函数,由于代价函数是用来衡量模型好坏的,我们的目标当然是得到最好的模型(也就是最符合训练样本(x, y)的模型)。因此训练参数的过程就是不断改变θ,从而得到更小的J(θ)的过程。理想情况下,当我们取到代价函数J的最小值时,就得到了最优的参数θ,记为:

    minθJ(θ) minθJ(θ)

    例如,J(θ) = 0,表示我们的模型完美的拟合了观察的数据,没有任何误差。

    (3)在优化参数θ的过程中,最常用的方法是梯度下降,这里的梯度就是代价函数J(θ)对θ1, θ2, ..., θn的偏导数。由于需要求偏导,我们可以得到另一个关于代价函数的性质:

    • 选择代价函数时,最好挑选对参数θ可微的函数(全微分存在,偏导数一定存在)

     

    代价函数的常见形式


    经过上面的描述,一个好的代价函数需要满足两个最基本的要求:能够评价模型的准确性,对参数θ可微。 

    (1)在线性回归中,最常用的是均方误差(Mean squared error),即

    J(θ0,θ1)=12mi=1m(y^(i)y(i))2=12mi=1m(hθ(x(i))y(i))2 J(θ0,θ1)=12m∑i=1m(y^(i)−y(i))2=12m∑i=1m(hθ(x(i))−y(i))2

    m:训练样本的个数;

    hθ(x):用参数θ和x预测出来的y值;

    y:原训练样本中的y值,也就是标准答案

    上角标(i):第i个样本

    (2)在逻辑回归中,最常用的是代价函数是交叉熵(Cross Entropy),交叉熵是一个常见的代价函数,在神经网络中也会用到。下面是《神经网络与深度学习》一书对交叉熵的解释:

     交叉熵是对「出乎意料」(译者注:原文使用suprise)的度量。神经元的目标是去计算函数xy=y(x)。但是我们让它取而代之计算函数xa=a(x)假设我们把a当作y等于1的概率,1ay等于0的概率。那么,交叉熵衡量的是我们在知道y的真实值时的平均「出乎意料」程度。当输出是我们期望的值,我们的「出乎意料」程度比较低;当输出不是我们期望的,我们的「出乎意料」程度就比较高。

    在1948年,克劳德·艾尔伍德·香农将热力学的熵,引入到信息论,因此它又被称为香农熵(Shannon Entropy),它是香农信息量(Shannon Information Content, SIC)的期望。香农信息量用来度量不确定性的大小:一个事件的香农信息量等于0,表示该事件的发生不会给我们提供任何新的信息,例如确定性的事件,发生的概率是1,发生了也不会引起任何惊讶;当不可能事件发生时,香农信息量为无穷大,这表示给我们提供了无穷多的新信息,并且使我们无限的惊讶。更多解释可以看这里

    J(θ)=1m[i=1m(y(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))] J(θ)=−1m[∑i=1m(y(i)log⁡hθ(x(i))+(1−y(i))log⁡(1−hθ(x(i)))]

    符号说明同上 

    (3)学习过神经网络后,发现逻辑回归其实是神经网络的一种特例(没有隐藏层的神经网络)。因此神经网络中的代价函数与逻辑回归中的代价函数非常相似:

    J(θ)=1m[i=1mk=1K(y(i)kloghθ(x(i))+(1y(i)k)log(1(hθ(x(i)))k)] J(θ)=−1m[∑i=1m∑k=1K(yk(i)log⁡hθ(x(i))+(1−yk(i))log⁡(1−(hθ(x(i)))k)]

    这里之所以多了一层求和项,是因为神经网络的输出一般都不是单一的值,K表示在多分类中的类型数。

    例如在数字识别中,K=10,表示分了10类。此时对于某一个样本来说,输出的结果如下:

    复制代码
      1.1266e-004
      1.7413e-003
      2.5270e-003
      1.8403e-005
      9.3626e-003
      3.9927e-003
      5.5152e-003
      4.0147e-004
      6.4807e-003
      9.9573e-001
    复制代码

    一个10维的列向量,预测的结果表示输入的数字是0~9中的某一个的概率,概率最大的就被当做是预测结果。例如上面的预测结果是9。理想情况下的预测结果应该如下(9的概率是1,其他都是0):

    复制代码
       0
       0
       0
       0
       0
       0
       0
       0
       0
       1
    复制代码

    比较预测结果和理想情况下的结果,可以看到这两个向量的对应元素之间都存在差异,共有10组,这里的10就表示代价函数里的K,相当于把每一种类型的差异都累加起来了。

     

    代价函数与参数


    代价函数衡量的是模型预测值h(θ) 与标准答案y之间的差异,所以总的代价函数J是h(θ)和y的函数,即,J=f(h(θ), y)。又因为y都是训练样本中给定的,h(θ)有θ决定,所以,最终还是模型参数θ的改变导致了J的改变。对于不同的θ,对应不同的预测值h(θ),也就对应着不同的代价函数J的取值。变化过程为:

    θ>h(θ),y>J(θ) θ−>h(θ),y−>J(θ)

    为了更直观的看到参数对代价函数的影响,举个简单的例子:

    有训练样本{(0, 0), (1, 1), (2, 2), (4, 4)},即4对训练样本,每个样本中第1个是x的值,第2个是y的值。这几个点很明显都是y=x这条直线上的点。如下图:

    abc

    复制代码
    """
    Spyder Editor
    
    Python 3.6, Belter, 20170401
    """
    
    import matplotlib.pyplot as plt
    import numpy as np
    X = np.array([[0, 1, 2, 4]]).T  # 都转换成列向量
    y = np.array([[0, 1, 2, 4]]).T
    theta1 = np.array([[0, 0]]).T  # 三个不同的theta_1值
    theta2 = np.array([[0, 0.5]]).T
    theta3 = np.array([[0, 1]]).T
    X_size = X.shape
    X_0 = np.ones((X_size[0],1))  # 添加x_0
    X_with_x0 = np.concatenate((X_0, X), axis=1)
    h1 = np.dot(X_with_x0, theta1)
    h2 = np.dot(X_with_x0, theta2)
    h3 = np.dot(X_with_x0, theta3)
    plt.plot(X, y, 'rx', label='y')
    plt.plot(X, h1, 'b', label='h1, theta_1=0')
    plt.plot(X, h2, 'm', label='h2, theta_1=0.5')
    plt.plot(X, h3, 'g', label='h3, theta_1=1')
    plt.xlabel('X')
    plt.ylabel('y/h')
    plt.axis([-0.1, 4.5, -0.1, 4.5])
    plt.legend(loc='upper left')
    plt.savefig('liner_gression_error.png', dpi=200)
    复制代码

    常数项为0,所以可以取θ0=0,然后取不同的θ1,可以得到不同的拟合直线。当θ1=0时,拟合的直线是y=0,即蓝色线段,此时距离样本点最远,代价函数的值(误差)也最大;当θ1=1时,拟合的直线是y=x,即绿色线段,此时拟合的直线经过每一个样本点,代价函数的值为0。

    通过下图可以查看随着θ1的变化,J(θ)的变化情况:

    复制代码
    """
    Spyder Editor
    
    Python 3.6, Belter, 20170401
    """
    
    # 计算代价函数的值
    def calcu_cost(theta, X, y):
        m = X.shape[0]  # sample size
        X_0 = np.ones((m,1))
        X_with_x0 = np.concatenate((X_0, X), axis=1)
        h = np.dot(X_with_x0, theta)
        return(np.dot((h-y).T, (h-y))/(2*m))
        
    X = np.array([[0, 1, 2, 4]]).T
    y = np.array([[0, 1, 2, 4]]).T
    theta_0 = np.zeros((101, 1))
    theta_1 = np.array([np.linspace(-2, 4, 101)]).T
    theta = np.concatenate((theta_0, theta_1), axis=1)  # 101组不同的参数
    J_list = []
    for i in range(101):
        current_theta = theta[i:i+1].T
        cost = calcu_cost(current_theta, X, y)
        J_list.append(cost[0,0])
    plt.plot(theta_1, J_list)
    plt.xlabel('theta_1')
    plt.ylabel('J(theta)')
    plt.savefig('cost_theta.png', dpi=200)
    复制代码

    从图中可以很直观的看到θ对代价函数的影响,当θ1=1时,代价函数J(θ)取到最小值。因为线性回归模型的代价函数(均方误差)的性质非常好,因此也可以直接使用代数的方法,求J(θ)的一阶导数为0的点,就可以直接求出最优的θ值。

     

    代价函数与梯度


     梯度下降中的梯度指的是代价函数对各个参数的偏导数,偏导数的方向决定了在学习过程中参数下降的方向,学习率(通常用α表示)决定了每步变化的步长,有了导数和学习率就可以使用梯度下降算法(Gradient Descent Algorithm)更新参数了。下图中展示了只有两个参数的模型运用梯度下降算法的过程。

     

     

     

    下图可以看做是代价函数J(θ)与参数θ做出的图,曲面上的一个点(θ 0, θ 1, J(θ)),有无数条切线,在这些切线中与x-y平面(底面,相当于θ 0, θ 1)夹角最大的那条切线就是该点梯度的方向,沿该方向移动,会产生最大的高度(相对于z轴,这里的z轴相当于代价函数J(θ))变化。

     

    (1)线性回归模型的代价函数对参数的偏导数:

     

     还是以两个参数为例,每个参数都有一个偏导数,且综合了所有样本的信息。

    (2)逻辑回归模型的代价函数对参数的偏导数:

    根据逻辑回归模型的代价函数以及sigmoid函数

    hθ(x)=g(θTx) hθ(x)=g(θTx)

    g(z)=11+ez g(z)=11+e−z

    得到对每个参数的偏导数为

    θjJ(θ)=i=1m(hθ(xi)yi)xij ∂∂θjJ(θ)=∑i=1m(hθ(xi)−yi)xji

     详细推导过程可以看这里-逻辑回归代价函数的导数

    (3)神经网络中的代价函数对参数的偏导数:

     这里的计算过程与前面都不一样,后面再补充。

     

     

     

    References


     

    https://www.quora.com/How-are-the-cost-functions-for-Neural-Networks-derived/answer/Daniel-Watson-22?srid=uIoGQ

    https://www.zhihu.com/question/23468713

    https://zh.wikipedia.org/wiki/%E7%86%B5_(%E4%BF%A1%E6%81%AF%E8%AE%BA)

    https://hit-scir.gitbooks.io/neural-networks-and-deep-learning-zh_cn/content/chap3/c3s3.html

    Coursera, Andrew Ng 公开课第一周,第三周,第五周

    http://math.stackexchange.com/questions/477207/derivative-of-cost-function-for-logistic-regression

    http://math.stackexchange.com/questions/947604/gradient-tangents-planes-and-steepest-direction

     

    分类:  人工智能
    展开全文
  • 代价函数(cost function)

    千次阅读 2021-04-11 19:28:12
    什么是代价函数2. 代价函数的常见形式2.1 均方误差2.2交叉熵2.3神经网络中的代价函数3. 代价函数与参数4.代价函数与梯度4.1 线性回归模型的代价函数对参数的偏导数4.2 逻辑回归模型的代价函数对参数的偏导数 代价...

    代价函数(有的地方也叫损失函数:Loss Function)在机器学习中的每一种算法中都很重要,因为训练模型的过程就是优化代价函数的过程,代价函数对每个参数的偏导数就是梯度下降中提到的梯度,防止过拟和时添加的正则化项也是加在代价函数后面的。

    1.什么是代价函数

    假设有训练样本(x,y),模型为h,参数为θ。h(θ) = θTx(θT表示θ的转置)
    (1) 概括来讲,任何能够衡量模型预测出来的值h(θ)与真实值y之间的差异的函数都可以叫做代价函数C(θ),如果有多个样本,则可以将所有代价函数的取值求均值,记作J(θ)。因此很容易就可以得到以下关于代价函数的性质:

    • 对于每种算法来说,代价函数不是唯一的;
    • 代价函数是参数θ的用函数
    • 总的代价函数J(θ)可以用来评价模型的好坏,代价函数越小说明模型和参数越符合训练样本(x,y);
    • J(θ)是一个标量;

    (2) 当我们确定了模型h,后面做的所有事情就是训练模型的参数θ。那么什么时候模型的训练才能结束呢?这时候也涉及到代价函数,由于代价函数是用来衡量模型的好坏的,我们的目标当然是得到最好的模型(也就是最符合训练样本(x,y)的模型)。因此训练参数的过程就是不断改变θ,从而得到更小的J(θ)的过程。理想情况下,当我们取到代价函数J的最小值时,就得到了最优的参数θ,记为:minθJ(θ)
    例如 J(θ)=0,表示我们的模型完美的拟和了观察的数据,没有任何误差。

    (3) 在优化参数θ的过程中,最常用的方法是梯度下降,这里的梯度下降就是代价函数J(θ)对θ1, θ2, …, θn的偏导数。由于需要求偏导,我们可以得到另一个关于代价函数的性质:选择代价函数时,最好挑选对参数θ可微的函数(全微分存在,偏导一定存在)

    2. 代价函数的常见形式

    经过上面的描述,一个好的代价函数需要满足两个最基本的要求:能够评价模型的准确性,对参数θ可微。

    2.1 均方误差

    在线性回归中,最常用的是均方误差(Mean squared error),具体形式为:
    在这里插入图片描述
    m:训练的样本数
    h(θ):用参数θ和x预测出来的y值
    y:原训练样本中的y值,也就是标准答案
    上角标(i):第i个样本

    2.2交叉熵

    在逻辑回归中,最常用的代价函数是交叉熵(Cross Entropy),交叉熵是一个常见的代价函数,在神经网络中也会用到。下面是《神经网络与深度学习》一书对交叉熵的解释:

    交叉熵是对「出乎意料」(译者注:原文使用suprise)的度量。神经元的目标是去计算函数y,且y=y(x)。但是我们让他取而代之计算函数a,且a=a(x)。假设我们把a当作y等于1的概率,1-a是y等于0的概率。那么交叉熵衡量的是我们在知道y的真实值时的平均「出乎意料」程度。当是输出是我们期望的值,我们的「出乎意料」程度比较低;当输出不是我们期望的,我们的「出乎意料」程度就比较高。

    在1948年,克劳德·艾尔伍德·香农将热力学的熵,引入到信息论,因此它又被称为香农熵(Shannon Entropy),它是香农信息量(Shannon Information Content, SIC)的期望。香农信息量用来度量不确定性的大小:一个事件的香农信息量等于0,表示该事件的发生不会给我们提供任何新的信息,例如确定性的事件,发生的概率时1,发生了也不会引起任何惊讶;当不可能事件发生时,相容信息量为无穷大,这表示会给我们提供无穷多的新信息,并且是我们无限的惊讶。更多解释可以看这里

    在这里插入图片描述

    2.3神经网络中的代价函数

    学过神经网络后,发现逻辑回归其实时神经网络的一个特例(没有隐藏层的神经网络)。因此神经网络中的代价函数与逻辑回归中的代价函数非常相似:
    在这里插入图片描述
    这里之所以多了一层求和项,是因为神经网络的输出一般都不是单一的值,k表示在多分类的类行数。
    例如在数字死别中,k=10,表示分了10类。此时对某一个样本来说,输出的结果如下

      1.1266e-004
      1.7413e-003
      2.5270e-003
      1.8403e-005
      9.3626e-003
      3.9927e-003
      5.5152e-003
      4.0147e-004
      6.4807e-003
      9.9573e-001
    

    一个10维的列向量,预测的结果表示输入的数字0~9的某一个概率,概率最大的就被当做是预测结果。例如上面的预测结果是9。理想情况下的预测结果应该如下(9的概率是1,其他都是0):

       0
       0
       0
       0
       0
       0
       0
       0
       0
       1
    

    比较预测结果和理想情况下的结果,可以看到这两个向量的对应元素之间都存在差异,共有10组,这里的10就代表代价函数中的K。相当于把每一种类型的差异都累加起来。

    3. 代价函数与参数

    代价函数衡量的是模型预测值h(θ)与标准答案y之间的差异,所以总的代价函数J是h(θ)和y的函数,即J=f(h(θ),y)。又因为y都是训练样本中给定的,h(θ)由θ决定,所以,最总还是模型参数θ的改变导致了J的改变。对于不同的θ,对应不同的预测值h(θ),也就对应着不同的代价函数J的取值。变化过程为:θ−−>h(θ)−−>J(θ)
    θ引起了h(θ)的改变,进而改变了J(θ)的取值。为了更值观的看到参数对代价函数的影响,举个简单的例子:
    有训练样本{(0, 0), (1, 1), (2, 2), (4, 4)},即4对训练样本,每个样本对中的第一个数表示x的值,第2个数表示y的值。这几个点都很明显都是y=x这条址线上的点。如下图:
    在这里插入图片描述

    
    import matplotlib.pyplot as plt
    import numpy as np
    X = np.array([[0, 1, 2, 4]]).T  # 都转换成列向量
    y = np.array([[0, 1, 2, 4]]).T
    theta1 = np.array([[0, 0]]).T  # 三个不同的theta_1值
    theta2 = np.array([[0, 0.5]]).T
    theta3 = np.array([[0, 1]]).T
    X_size = X.shape
    X_0 = np.ones((X_size[0],1))  # 添加x_0
    X_with_x0 = np.concatenate((X_0, X), axis=1)
    h1 = np.dot(X_with_x0, theta1)
    h2 = np.dot(X_with_x0, theta2)
    h3 = np.dot(X_with_x0, theta3)
    plt.plot(X, y, 'rx', label='y')
    plt.plot(X, h1, 'b', label='h1, theta_1=0')
    plt.plot(X, h2, 'm', label='h2, theta_1=0.5')
    plt.plot(X, h3, 'g', label='h3, theta_1=1')
    plt.xlabel('X')
    plt.ylabel('y/h')
    plt.axis([-0.1, 4.5, -0.1, 4.5])
    plt.legend(loc='upper left')
    plt.savefig('liner_gression_error.png', dpi=200)
    

    常数项为0,所以可以取θ0=0,然后取不同的θ1,可以得到不同的拟和直线。当θ1=0时,拟和的直线是y=0,即蓝色线段,此时距离样本点最远,代价函数的值(误差)也最大;当θ1=1时,拟和的直线是y=x,即绿色线段,此时拟和的直线经过每一个样本点,代价函数的值为0。
    通过下图可以查看随着θ1的变化,J(θ)的变化情况:
    在这里插入图片描述

    
    # 计算代价函数的值
    def calcu_cost(theta, X, y):
        m = X.shape[0]  # sample size
        X_0 = np.ones((m,1))
        X_with_x0 = np.concatenate((X_0, X), axis=1)
        h = np.dot(X_with_x0, theta)
        return(np.dot((h-y).T, (h-y))/(2*m))
        
    X = np.array([[0, 1, 2, 4]]).T
    y = np.array([[0, 1, 2, 4]]).T
    theta_0 = np.zeros((101, 1))
    theta_1 = np.array([np.linspace(-2, 4, 101)]).T
    theta = np.concatenate((theta_0, theta_1), axis=1)  # 101组不同的参数
    J_list = []
    for i in range(101):
        current_theta = theta[i:i+1].T
        cost = calcu_cost(current_theta, X, y)
        J_list.append(cost[0,0])
    plt.plot(theta_1, J_list)
    plt.xlabel('theta_1')
    plt.ylabel('J(theta)')
    plt.savefig('cost_theta.png', dpi=200)
    

    从图中可以很直观的看到θ对代价函数的影响,当θ1=1时代价函数取到最小值。因为线性回归模型的代价函数(均方误差)的性质非常好,因此也可以直接使用代数的方法,求J(θ)的一阶导数为0的点,就可以直接求出最优的θ(正规方程法)。

    4.代价函数与梯度

    梯度下降中的梯度指的是代价函数对各个参数的偏导数,偏导数的方向决定了在学习过程中参数下降的方向。学习率(通常使用α表示)决定了每步变化的步长,有了导数和学习率就可以使用梯度下降算法(Gradient Descent Algorithm)更新参数了。下图中展示了只有两个参数的模型运用梯度下降算法算法的过程。
    在这里插入图片描述
    下图可以看作是代价函数J(θ)与参数θ做出的图,曲面上一个点(θ0, θ1, J(θ)),有无数条切线,在这些切线中与x-y平面(底面,相当于θ0,θ1)夹角最大的那条边切线就是该点梯度的方向,沿该方向移动,会产生最大的高度变化(相对于z轴,这里的z轴相对于代价函数J(θ))。
    在这里插入图片描述

    4.1 线性回归模型的代价函数对参数的偏导数

    在这里插入图片描述

    4.2 逻辑回归模型的代价函数对参数的偏导数

    根据逻辑回归模型的代价函数以及sigmoid函数
    在这里插入图片描述
    得到对每个参数的偏导数为
    在这里插入图片描述
    详细推导过程可以看这里- 逻辑回归代价函数的导数

    展开全文
  • 深度学习基础之代价函数

    千次阅读 多人点赞 2019-07-16 13:03:03
    在机器学习和深度学习中,代价函数非常重要。所以十分有必要弄个清楚代价函数相关的概念和性质。本文介绍了什么是代价函数,然后列举了常用的三种代价函数,并对其中的二次代价函数和交叉熵代价函数进行了比较。


    在机器学习和深度学习中,经常听到代价函数这个词,到底什么是代价函数?

    一、代价函数概述

    机器学习的模型分为能量模型和概率模型,知道概率分布的可以直接用概率模型进行建模,比如贝叶斯分类器,不知道的就用能量模型,比如支持向量机。因为一个系统稳定的过程就是能量逐渐减小的过程。

    简单理解,代价函数也就是通常建立的能量方程的一种,在机器学习中用来衡量预测值和真实值之间的误差,越小越好。一般来说一个函数有解析解和数值解,解析解就是我们数学上可以用公式算出来的解,数值解是一种近似解,在解析解不存在或者工程实现比较复杂的时候,用例如梯度下降这些方法,迭代得到一个效果还可以接受的解。所以要求代价函数对参数可微。

    代价函数、损失函数、目标函数并不一样,这一点后边再介绍,这篇文章就先只介绍代价函数。

    损失函数:计算的是一个样本的误差

    代价函数:是整个训练集上所有样本误差的平均

    目标函数:代价函数 + 正则化项

    在实际中,损失函数和代价函数是同一个东西,目标函数是一个与他们相关但更广的概念。

    代价函数(Cost Function):在机器学习中,代价函数作用于整个训练集,是整个样本集的平均误差,对所有损失函数值的平均。

    代价函数的作用:

    • 1.为了得到训练逻辑回归模型的参数,需要一个代价函数,通过训练代价函数来得到参数。
    • 2.用于找到最优解的目标函数。

    二、代价函数的原理

    在回归问题中,通过代价函数来求解最优解,常用的是平方误差代价函数。有如下假设函数:
    h ( x ) = A + B x h(x)=A+Bx h(x)=A+Bx
    假设函数中有A和B两个参数,当参数发生变化时,假设函数状态也会随着变化。 如下图所示
    在这里插入图片描述
    想要拟合图中的离散点,我们需要尽可能找到最优的 A A A B B B来使这条直线更能代表所有数据。如何找到最优解呢,这就需要使用代价函数来求解,以平方误差代价函数为例,假设函数为 h ( x ) = θ 0 x h(x)=\theta_0x h(x)=θ0x

    平方误差代价函数的主要思想就是将实际数据给出的值与拟合出的线的对应值做差,求出拟合出的直线与实际的差距。在实际应用中,为了避免因个别极端数据产生的影响,采用类似方差再取二分之一的方式来减小个别数据的影响。因此,引出代价函数:

    J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) 2 J(\theta _0,\theta _1)=\frac{1}{2m}\sum_{i=1}^{m}(h(x^{(i)})-y^{(i)})^2 J(θ0,θ1)=2m1i=1m(h(x(i))y(i))2

    最优解即为代价函数的最小值 m i n J ( θ 0 , θ 1 ) minJ(\theta _0,\theta _1) minJ(θ0,θ1)。如果是 1 个参数,代价函数一般通过二维曲线便可直观看出。如果是 2 个参数,代价函数通过三维图像可看出效果,参数越多,越复杂。

    当参数为 2 个时,代价函数是三维图像。

    在这里插入图片描述
    代价函数的要求:

    • 1.非负性,所以目标就是最小化代价函数。
    • 2.当真实输出 a a a与期望输出 y y y接近的时候,代价函数接近于0。(比如 y = 0 y=0 y=0 a ~ 0 a~0 a0 y = 1 y=1 y=1,a~1时,代价函数都接近0)。

    代价函数非负的原因:

    • 目标函数存在一个下界,在优化过程当中,如果优化算法能够使目标函数不断减小,根据单调有界准则,这个优化算法就能证明是收敛有效的。
    • 只要设计的目标函数有下界,基本上都可以,代价函数非负更为方便。

    三、常见的代价函数

    1. 二次代价函数(quadratic cost)

    J = 1 2 n ∑ i = 1 ∣ ∣ y ( x ) − a L ( x ) ∣ ∣ 2 J=\frac{1}{2n}\sum_{i=1}\left | \right |y(x)-a^{L}(x)\left | \right |^2 J=2n1i=1y(x)aL(x)2

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

    J = ( y − a ) 2 2 J=\frac{(y-a)^2}{2} J=2(ya)2

    假如使用梯度下降法来调整权值参数的大小,权值 w w w和偏置 b b b的梯度推 导如下:

    ∂ J ∂ w = ( a − y ) δ ′ ( z ) x \frac{\partial J}{\partial w}=(a-y){\delta }'(z)x wJ=(ay)δ(z)x
    ∂ J ∂ b = ( a − y ) δ ′ ( z ) \frac{\partial J}{\partial b}=(a-y){\delta }'(z) bJ=(ay)δ(z)

    其中, z z z表示神经元的输入, δ \delta δ 表示激活函数。权值 w w w和偏置 b b b的梯度跟激活函数的梯度成正比,激活函数的梯度越大,权值 w w w和偏置 b b b的大小调整得越快,训练收敛得就越快。

    2. 交叉熵代价函数(cross-entropy)

    交叉熵代价函数:

    J = − 1 n ∑ i = 1 [ y l n a + ( 1 − y ) l n ( 1 − a ) ] J=-\frac{1}{n}\sum_{i=1}[ ylna+(1-y)ln(1-a)] J=n1i=1[ylna+(1y)ln(1a)]

    其中, J J J 表示代价函数, x x x表示样本, y y y 表示实际值, a a a表示输出值, n n n表示样本的总数。 权值 w w w和偏置 b b b的梯度推导如下:
    ∂ J ∂ w j = 1 n ∑ x x j ( δ ( x ) − y ) \frac{\partial J}{\partial w_j}=\frac{1}{n}\sum_{x}x_j(\delta(x)-y) wjJ=n1xxj(δ(x)y)
    ∂ J ∂ b = 1 n ∑ x ( δ ( x ) − y ) \frac{\partial J}{\partial b}=\frac{1}{n}\sum_{x}(\delta(x)-y) bJ=n1x(δ(x)y)

    当误差越大时,梯度就越大,权值 w w w和偏置 b b b调整就越快,训练的速度也就越快。 二次代价函数适合输出神经元是线性的情况,交叉熵代价函数适合输出神经元是 S S S 型函 数的情况。

    3. 对数似然代价函数(log-likelihood cost)

    对数释然函数常用来作为 softmax 回归的代价函数。深度学习中普遍的做法是将 softmax 作为最后一层,此时常用的代价函数是对数释然代价函数。

    Softmax回归中将x分类为类别j的概率为:
    在这里插入图片描述
    或者:
    在这里插入图片描述
    对数似然代价函数与 softmax 的组合和交叉熵与 sigmoid 函数的组合非常相似。对数释然 代价函数在二分类时可以化简为交叉熵代价函数的形式:
    在这里插入图片描述
    其中, y k y_k yk表示第 k k k个神经元的输出值, a k a_k ak表示第 k k k个神经元对应的真实值,取值为 0 0 0 1 1 1

    简单理解一下这个代价函数的含义:在网络中输入一个样本,那么只有一个神经元对应了该样本的正确类别;若这个神经元输出的概率值越高,则按照以上的代价函数公式,其产生的代价就越小;反之,则产生的代价就越高。

    四、二次代价函数与交叉熵代价函数比较

    1.当我们用sigmoid函数作为神经元的激活函数时,最好使用交叉熵代价函数来替代方差代价函数。

    • 因为使用二次代价函数时,偏导数受激活函数的导数影响,sigmoid 函数导数在输出接近 0 和 1 时非常小,会导致一 些实例在刚开始训练时学习得非常慢。而使用交叉熵代价函数时,,权重学习的速度受到 ( δ ( z ) − y ) (\delta(z)-y) (δ(z)y)的影响,更大的误差,就有更快的学习速度,避免了二次代价函数方程中因 δ ′ ( z ) {\delta }'(z) δ(z)
      导致的学习缓慢的情况。

    2.交叉熵函数的形式是 − [ y l n a + ( 1 − y ) l n ( 1 − a ) ] −[ylna+(1−y)ln(1−a)] [ylna+(1y)ln(1a)]。而不是 − [ a l n y + ( 1 − a ) l n ( 1 − y ) ] −[alny+(1−a)ln(1−y)] [alny+(1a)ln(1y)]
    是因为当期望输出的 y = 0 y=0 y=0时, l n y lny lny没有意义;当期望 y = 1 y=1 y=1时, l n ( 1 − y ) ln(1-y) ln(1y)没有意义。而因为a是sigmoid函数的实际输出,永远不会等于0或1,只会无限接近于0或者1,因此不存在这个问题。

    展开全文
  • 上传时间:2020/11/09 ...内容:pytorch框架:交叉熵代价函数原理及其在MNIST手写数字识别中的应用(神经网络) 其他:pytorch学习练习代码 相关介绍:https://blog.csdn.net/jerry_liufeng/article/details/109573157
  • 本篇主要介绍机器学习经常遇到的代价函数、损失函数、风险函数、目标函数。损失函数主要介绍0-1损失函数、 平方损失函数、绝对值损失函数、对数损失函数、Hinge损失函数;风险函数包括期望风险、经验风险、结构风险...
  • 在传统分布式功率控制算法的基础上,考虑到代价函数的非负性,且存在一个正的最小值的特性,采用用户发射功率和信干比来定义用户的代价函数,引用了一种基于代价函数的功率控制算法。最后,本文利用MATLAB工具对该...
  • 代价函数与损失函数

    2021-03-15 18:13:57
    代价函数(cost function) 为了得到训练逻辑回归模型的参数,需要一个代价函数,通过训练代价函数来得到参数。 在回归问题中,通过代价函数来求解最优解,常用的是平方误差代价函数。 常见代价函数 (1)二次代价函数...
  • 2.1模型描述 **预测房价问题** 以之前的房屋交易问题为例,假使...h 代表学习算法的解决方案或函数也称为假设(hypothesis) 尽量找出一个函数使得其能够很好地拟合已知训练集的样本点 这是一个监督学习的过..
  • 分析了影响行车时间的各种因素,结合图论中最短路径算法,建立了基于RBF神经网络的路径代价函数模型.基于该函数模型,可以计算出交通图中任意给定两地间的时间最优路径.将该模型应用于实际路况进行有效性验证,得到了...
  • 代价函数,损失函数,目标函数区别

    万次阅读 多人点赞 2018-07-15 12:15:43
    一:损失函数,代价函数,目标函数定义首先给出结论:损失函数(Loss Function )是定义在单个样本上的,算的是一个样本的误差。代价函数(Cost Function )是定义在整个训练集上的,是所有样本误差的平均,也就是...
  • 激活函数 Logistic Softmax Relu 损失函数
  • 损失函数与代价函数区别

    千次阅读 2019-10-24 16:35:56
    损失函数或者代价函数的目的是:衡量模型的预测能力的好坏。 损失函数(Loss function):是定义在单个训练样本上的,也就是就算一个样本的误差,比如我们想要分类,就是预测的类别和实际类别的区别,是一个样本的哦...
  • 二次代价函数的局限性 首先来说一下二次代价函数的局限性,看下面这张图: 假设现在使用的激活函数是sigmoid,并且代价函数是二次代价函数,我们收敛得目标是1,那么A点的梯度比较大,B点由于离目标比较近梯度小,...
  • 梯度下降 代价函数

    2019-03-14 09:43:20
    代价函数与梯度下降
  • 3.1 代价函数

    千次阅读 2018-01-15 21:01:50
    3.1 代价函数(cost function)  代价函数有助于将最可能的线性函数与我们的数据相拟合。在线性回归中,我们有一个这样的数据集,m表示训练集样本数,而我们的假设函数,也就是我们用来进行预测的函数,是图中所示...
  • 假设函数 损失函数 代价函数 目标函数 与线性回归 摘要:机器学习是计算机领域中的重要技术,它使人类能够“教”机器如何学习,让人类和机器的联系更为紧密。机器通过处理合适的训练集来学习,这些训练集包含优化...
  • 【机器学习】代价函数,损失函数,目标函数区别

    万次阅读 多人点赞 2018-03-03 10:45:26
    一:损失函数,代价函数,目标函数定义首先给出结论:损失函数(Loss Function )是定义在单个样本上的,算的是一个样本的误差。代价函数(Cost Function )是定义在整个训练集上的,是所有样本误差的平均,也就是...
  • 损失函数(代价函数)2.1 L1范数损失函数2.2 L2范数损失函数2.3 二次代价函数2.4 交叉熵代价函数2.5 对数释然代价函数(log-likelihood cost)3.演示代码 1.激活函数 激活函数的想法来自对人脑中神经元工作机理的分析...
  • 交叉熵代价函数详解

    千次阅读 2019-03-18 23:28:38
    事实上,代价函数发生改变之后我们不能很精确的定义什么是「相同」的学习速率。这就像对比苹果和橘子一样。对于这两种代价函数我都实验过一些不同的学习速率。如果你仍然好奇,那么事实是这样的:我在新的例子中选取...
  • 代价函数(Cost Function )是定义在整个训练集上的,是所有样本误差的平均,也就是损失函数的平均。 目标函数(Object Function)定义为:最终需要优化的函数。等于经验风险+结构风险(也就是Cost Function + 正则...
  • 函数的证明过程
  • 最小二乘法:又称作最小平方法,它通过最小化误差的平方和寻找数据的最佳函数匹配。可以用于曲线拟合,解决一些优化问题。...画红线的部分就为,过原点这个预测函数的代价函数。可以看出,它是一个二次函数,所以当.
  • 机器学习--代价函数

    千次阅读 2020-04-01 22:46:02
    一、代价函数概述 机器学习的模型分为能量模型和概率模型,知道概率分布的可以直接用概率模型进行建模,比如贝叶斯分类器,不知道的就用能量模型,比如支持向量机。因为一个系统稳定的过程就是能量逐渐减小的过程。 ...
  • 代价函数(cost function):是整个训练集上所有样本误差的平均 目标函数:代价函数 + 正则化项 2. 实际应用 损失函数和代价函数是同一个东西,目标函数是一个与他们相关但更广的概念,举例说明: 上面三个图的曲线...
  • 论文阅读+代价函数+激活函数

    千次阅读 2018-04-02 16:43:21
    =================第一部分 代价函数====================代价函数=损失函数 在机器学习中的每一种算法中...一、什么是代价函数假设有训练样本(x, y),模型h,参数θ。h(θ) = θTx(θT表示θ的转置)。(1)概况...
  • 代价函数总结

    千次阅读 2017-09-22 16:06:18
    代价函数是学习模型优化时的目标函数或者准则,通过最小化代价函数来优化模型。到目前为止,接触了一些机器学习算法,但是他们使用的代价函数不一定是一样的,由于,在现实的使用中,通常代价函数都需要自己来确定,...
  • 目标函数:既可代指损失函数,又可代指代价函数/成本函数。有的地方将损失函数和代价函数没有细分也就是两者等同的。 损失函数(Loss function): 损失函数越小,就代表模型拟合的越好。 例如有平方误差损失函数、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 257,192
精华内容 102,876
关键字:

什么是代价函数