2019-07-16 13:03:03 ch18328071580 阅读数 279
  • 玩转深度学习实战教程

    玩转深度学习视频培训课程,详细讲解深度学习的原理和利用深度学习框架TensorFlow进行项目实战。课程通过Kaggle竞赛平台的Titanic问题讲解TensorFlow的基本用法以及问题处理的常用技巧,讲解深度学习图像领域的卷积神经网络CNN和多个经典的网络架构、CNN的应用,讲解自然语言处理领域的RNN、LSTM以及它们的多种变种结构,构建语言模型和对话机器人,介绍损失函数和优化深度学习算法在TensorFlow中的实现。

    2981 人正在学习 去看看 王而川


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

一、代价函数概述

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

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

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

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

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

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

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

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

代价函数的作用:

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

二、代价函数的原理

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

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

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

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

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

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

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

代价函数非负的原因:

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

三、常见的代价函数

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

J=12ni=1y(x)aL(x)2J=\frac{1}{2n}\sum_{i=1}\left | \right |y(x)-a^{L}(x)\left | \right |^2

其中,JJ 表示代价函数,xx表示样本,yy表示实际值,aa表示输出值,nn表示样本的总数。 使用一个样本为例简单说明,此时二次代价函数为:

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

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

Jw=(ay)δ(z)x\frac{\partial J}{\partial w}=(a-y){\delta }'(z)x
Jb=(ay)δ(z)\frac{\partial J}{\partial b}=(a-y){\delta }'(z)

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

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

交叉熵代价函数:

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

其中,JJ 表示代价函数,xx表示样本,yy 表示实际值,aa表示输出值,nn表示样本的总数。 权值ww和偏置bb的梯度推导如下:
Jwj=1nxxj(δ(x)y)\frac{\partial J}{\partial w_j}=\frac{1}{n}\sum_{x}x_j(\delta(x)-y)
Jb=1nx(δ(x)y)\frac{\partial J}{\partial b}=\frac{1}{n}\sum_{x}(\delta(x)-y)

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

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

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

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

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

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

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

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

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

2017-07-30 21:30:36 u013710265 阅读数 255
  • 玩转深度学习实战教程

    玩转深度学习视频培训课程,详细讲解深度学习的原理和利用深度学习框架TensorFlow进行项目实战。课程通过Kaggle竞赛平台的Titanic问题讲解TensorFlow的基本用法以及问题处理的常用技巧,讲解深度学习图像领域的卷积神经网络CNN和多个经典的网络架构、CNN的应用,讲解自然语言处理领域的RNN、LSTM以及它们的多种变种结构,构建语言模型和对话机器人,介绍损失函数和优化深度学习算法在TensorFlow中的实现。

    2981 人正在学习 去看看 王而川

代价函数

1. 方差代价函数

代价函数经常用方差代价函数(即采用均方误差MSE),比如对于一个神经元(单输入单输出,sigmoid函数),定义其代价函数为:
公式
其中y是我们期望的输出,a为神经元的实际输出【 a=σ(z), where z=wx+b 】。

2. 交叉熵代价函数

公式对应一个神经元,多输入单输出
公式
其中y为期望的输出,a为神经元实际输出【a=σ(z), where z=∑Wj*Xj+b】
与方差代价函数一样,交叉熵代价函数同样有两个性质:

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

3. 总结

  • 当我们用sigmoid函数作为神经元的激活函数时,最好使用交叉熵代价函数来替代方差代价函数,以避免训练过程太慢。
  • 不过,你也许会问,为什么是交叉熵函数?导数中不带σ′(z)项的函数有无数种,怎么就想到用交叉熵函数?这自然是有来头的,更深入的讨论就不写了,少年请自行了解。
  • 另外,交叉熵函数的形式是−[ylna+(1−y)ln(1−a)]。而不是−[alny+(1−a)ln(1−y)],为什么?因为当期望输出的y=0时,lny没有意义;当期望y=1时,ln(1-y)没有意义。而因为a是sigmoid函数的实际输出,永远不会等于0或1,只会无限接近于0或者1,因此不存在这个问题。

4. log似然代价函数

Softmax回归中将x分类为类别j的概率为:
这里写图片描述

这里写图片描述
或者
这里写图片描述
其中,y_k表示第k个神经元的输出值,a_k表示第k个神经元对应的真实值,取值为0或1。
简单理解一下这个代价函数的含义。在ANN中输入一个样本,那么只有一个神经元对应了该样本的正确类别;若这个神经元输出的概率值越高,则按照以上的代价函数公式,其产生的代价就越小;反之,则产生的代价就越高。

可以看到,Softmax代价函数与logistic代价函数在形式上非常类似,只是在Softmax损失函数中对类标记的 个可能值进行了累加。

参考:
http://blog.csdn.net/u012162613/article/details/44239919
http://www.cnblogs.com/Belter/p/6653773.html?utm_source=itdadao&utm_medium=referral
http://deeplearning.stanford.edu/wiki/index.php/Softmax%E5%9B%9E%E5%BD%92
http://blog.csdn.net/u014313009/article/details/51045303

2017-12-01 22:05:47 juyin2015 阅读数 1553
  • 玩转深度学习实战教程

    玩转深度学习视频培训课程,详细讲解深度学习的原理和利用深度学习框架TensorFlow进行项目实战。课程通过Kaggle竞赛平台的Titanic问题讲解TensorFlow的基本用法以及问题处理的常用技巧,讲解深度学习图像领域的卷积神经网络CNN和多个经典的网络架构、CNN的应用,讲解自然语言处理领域的RNN、LSTM以及它们的多种变种结构,构建语言模型和对话机器人,介绍损失函数和优化深度学习算法在TensorFlow中的实现。

    2981 人正在学习 去看看 王而川

代价函数在有些地方也称损失函数,目前常用的几种代价函数有二次代价函数、交叉熵代价函数、对数释然函数等。

二次代价函数为基本的用来计算结果与预测值之间的差异。

交叉熵代价函数可以解决二次函数导致学习慢问题

对数释然函数常用来作为softmax回归的代价函数,如果输出层神经元是sigmoid函数,可以采用交叉熵代价函数。而深度学习中更普遍的做法是将softmax作为最后一层,此时常用的代价函数是对数释然代价函数


Juyin@2017/12/1

2018-01-06 19:27:42 chen645096127 阅读数 4997
  • 玩转深度学习实战教程

    玩转深度学习视频培训课程,详细讲解深度学习的原理和利用深度学习框架TensorFlow进行项目实战。课程通过Kaggle竞赛平台的Titanic问题讲解TensorFlow的基本用法以及问题处理的常用技巧,讲解深度学习图像领域的卷积神经网络CNN和多个经典的网络架构、CNN的应用,讲解自然语言处理领域的RNN、LSTM以及它们的多种变种结构,构建语言模型和对话机器人,介绍损失函数和优化深度学习算法在TensorFlow中的实现。

    2981 人正在学习 去看看 王而川

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


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


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


其中,z表示神经元的输入,σ表示激活函数。w和b的梯度跟激活函数的梯度成正比,激活函数的梯度越大,w
和b的大小调整得越快,训练收敛得就越快。假设我们的激活函数是sigmoid函数:


假设我们目标是收敛到1.0。1点为0.82离目标比较远,梯度比较大,权值调整比较大。2点为0.98离目标比较近,梯度比较小,权值调整比较小。调整方案合理。
假如我们目标是收敛到0。1点为0.82目标比较近,梯度比较大,权值调整比较大。2点为0.98离目标比较远,梯
度比较小,权值调整比较小。调整方案不合理。

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

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


其中,C表示代价函数,x表示样本,y表示实际值,a表示输出值,n表示样本的总数。


当误差越大时,梯度就越大,参数w和b的调整就越快,训练的速度也就越快。
如果输出神经元是线性的,那么二次代价函数就是一种合适的选择。如果输出神经元是S型函数,那么比较适合
用交叉熵代价函数。

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

对数释然函数常用来作为softmax回归的代价函数,然后输出层神经元是sigmoid函数,可以采用交叉熵代价函
数。而深度学习中更普遍的做法是将softmax作为最后一层,此时常用的代价函数是对数释然代价函数。
对数似然代价函数与softmax的组合和交叉熵与sigmoid函数的组合非常相似。对数释然代价函数在二分类时可
以化简为交叉熵代价函数的形式。

4.总结:

在tensorflow中用:
tf.nn.sigmoid_cross_entropy_with_logits()来表示跟sigmoid搭配使用的交叉熵。
tf.nn.softmax_cross_entropy_with_logits()来表示跟softmax搭配使用的交叉熵。




2018-10-11 13:04:21 qq_36890572 阅读数 378
  • 玩转深度学习实战教程

    玩转深度学习视频培训课程,详细讲解深度学习的原理和利用深度学习框架TensorFlow进行项目实战。课程通过Kaggle竞赛平台的Titanic问题讲解TensorFlow的基本用法以及问题处理的常用技巧,讲解深度学习图像领域的卷积神经网络CNN和多个经典的网络架构、CNN的应用,讲解自然语言处理领域的RNN、LSTM以及它们的多种变种结构,构建语言模型和对话机器人,介绍损失函数和优化深度学习算法在TensorFlow中的实现。

    2981 人正在学习 去看看 王而川

1.代价函数

1.1 代价函数:任何可以衡量模型预测结果值与其真实值之间差异的函数,如果存在多个样本,代价函数统计结果应该为所有样本的差异之和;

1.2 代价函数即模型误差,是反向传播中求梯度的基础,同时也是模型最终达到期望效果的衡量指标;

1.3 主要的代价函数

 a. 二次代价函数(均方误差)

当A,B预测值是0.82,0.98,对应真实值为1时,A的梯度大,B的梯度小,合理;

当A,B预测值是0.82,0.98,对应真实值为0时,A的梯度大,B的梯度小,不合理;      

b. 交叉熵代价函数

在该梯度传播过程中,梯度的变化与当前的预测误差成正比,符合梯度传播的目标;

注:对于神经元为S型函数,比较适合交叉熵代价函数;

 c. 对数似然函数

表达式:

当K=2时,此时对数似然函数退化为交叉熵待见函数;

对数似然函数常用来作为softmax回归的代价函数,等同于交叉熵应用于sigmoid。在深度学习中,将softmax作为最后一层,代价函数为对数似然。应用tensorflow,将经过softmax得出的输出分类概率,再求交叉熵:

# 在手写数字识别中
# 对于出现概率最大的数字与真实值之间求softmax分类概率,对分类概率求交叉熵,最后求其平均值
ce = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y,labels=tf.arg_max(y_predict,1)))

1.4 常见模型的代价函数

 a. 逻辑回归 :交叉熵

 b. 线性回归:均方误差

 c. 多分类问题(softmax):对数似然  

没有更多推荐了,返回首页