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

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

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


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

一、代价函数概述

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

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

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

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

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

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

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

代价函数(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 阅读数 269
  • 玩转深度学习实战教程

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

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

代价函数

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

2018-11-25 15:38:53 qq_38290475 阅读数 519
  • 玩转深度学习实战教程

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

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

摘要:持续更新,罗列部分常用的代价函数,以及论文中性能优越的代价函数,方便遇到不同问题时代价函数的选择。第一部分介绍最常见的几个代价函数,第二部分介绍论文中看到的不错的代价函数。

损失函数(Loss Function )是定义在单个样本上的,算的是一个样本的误差。

代价函数(Cost Function )是定义在整个训练集上的,是所有样本误差的平均,也就是损失函数的平均。

目标函数(Object Function)定义为:最终需要优化的函数。

目录

  1. 常见代价函数
    1. Mean Squared Error
    2. Mean Absolute Error
    3. Mean Absolute Percentage Error
    4. Mean Squared Logarithmic Error
    5. Log-Cosh
    6. Cross Entropy
    7. 多任务学习
    8. 多标签学习
  2. 论文中发现的代价函数
    1. 中心损失(Center Loss)
    2. 多任务学习:自适应加权的多任务代价函数
    3. 多标签学习:代价敏感的加权代价函数

1. 常见代价函数

  • Mean Squared Error

MSE=1mi=1m(y(i)y^(i))2MSE=\frac{1}{m}\sum_{i=1}^{m}\left(y^{(i)}-\hat{y}^{(i)}\right)^2

均方误差(MSE)是最常用的回归损失函数,计算方法是求预测值与真实值之间距离的平方和。计算方便,导数性能优秀。

回归问题代价函数的比较以均方误差为基准进行。

  • Mean Absolute Error

MAE=1mi=1my(i)y^(i)MAE=\frac{1}{m}\sum_{i=1}^{m}\left|y^{(i)}-\hat{y}^{(i)}\right|

平均绝对误差(MAE)同样是一种用于回归模型的损失函数,是目标值和预测值之差的绝对值之和。其只衡量了预测值误差的平均模长,而不考虑方向。

MAE对异常值更鲁棒,在训练数据中存在异常点的时候性能优于MSE。但是在神经网络中使用时存在很严重的缺陷,它的梯度始终相同,即使在误差很小的情况下,也会有较大的权重更新,要避免该问题需要额外采用权重衰减的措施。

  • Mean Absolute Percentage Error

MAPE=100×1mi=1my(i)y^(i)y(i)MAPE=100\times\frac{1}{m}\sum_{i=1}^{m}\left|\frac{y^{(i)}-\hat{y}^{(i)}}{y^{(i)}}\right|

平均绝对百分误差(MAPE)关注绝对误差占真实值的比例。直观的看,显然将1.01.0预测称0.00.0和将100.0100.0预测成99.099.0的影响是不一样的,而在MSE和MAE中两者会得到相同的损失。

  • Mean Squared Logarithmic Error

MSLE=1mi=1m(logy(i)logy^(i))2MSLE=\frac{1}{m}\sum_{i=1}^{m}\left(\log{y^{(i)}}-\log\hat{y}^{(i)}\right)^2

均方对数损失,预先对数据取对数,是对MSE的改进,防止较大的预测值对较小的预测值的影响。在MSE中,较大的预测值会引导较小的预测值预测不准。

  • Log-Cosh

L=i=1mlog(cosh(y(i)y^(i)))L=\sum_{i=1}^{m}\log\left(\cosh\left(y^{(i)}-\hat{y}^{(i)}\right)\right)

Log-cosh是一种应用于回归问题中的,且比MSE更平滑的的损失函数。它的计算方式是预测误差的双曲余弦的对数。

基本类似于MSE,但不易受异常点的影响。损失较小时近似等于MSE,损失较大时近似等于MAE。而且其二阶可微。但若误差很大,梯度和Hessian矩阵会变成定值。

  • Cross Entropy

L(y(i),y^(i))=k=1Kyk(i)lny^k(i)L(y^{(i)},\hat y^{(i)})=-\sum_{k=1}^K y_k^{(i)}\ln \hat y^{(i)}_k

交叉熵主要用于分类问题,这里的KK表示的是类别标签的维数,也就是类别数。ii表示第ii个样本。

  • 多任务学习

L(y(i),y^(i))=t=1TαtLt(y(i),y^(i))L(y^{(i)},\hat y^{(i)})=\sum_{t=1}^T\alpha_t L_t(y^{(i)},\hat y^{(i)})

多任务学习的代价函数通常是不同任务代价函数的加权和。

  • 多标签学习

深度学习中,多标签学习的代价函数通常是二分类损失,每个位置都进行sigmoid规范化,使其靠近0或者1。

2. 论文中的代价函数

  • 中心损失(Center Loss)

用于分类问题,是softmax函数的改进,将softmax函数与聚类问题相结合,在损失函数中增大类间距离而减小类内距离,在人脸识别中有不错的效果,具体见文献。

参考文献:
【1】2016 A Discriminative Feature Learning Approach for Deep Face Recognition

论文地址:https://ydwen.github.io/papers/WenECCV16.pdf

代码链接:https://spaces.ac.cn/archives/4493

  • 多任务学习:自适应加权的多任务代价函数

多任务学习的代价函数对不同的任务通常有不同的权重。

作者根据多任务学习设计的代价函数,通过观测噪声对不同尺度的损失自适应加权,能减少对多任务权重进行超参数优化的时间。

参考文献:
【1】Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics

论文地址:https://arxiv.org/abs/1705.07115v3

代码链接:https://github.com/yaringal/multi-task-learning-example

  • 多标签学习:代价敏感的加权代价函数

多标签学习中,不同的代价函数对每个标签的敏感程度不同,因此通常需要给予每个标签不同的重要性。

参考文献:
【1】2018 Deep Learning with a Rethinking Structure for Multi-label Classification

论文链接:https://arxiv.org/abs/1802.01697v2

代码链接:https://github.com/yangarbiter/multilabel-learn

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

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

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

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

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

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

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


Juyin@2017/12/1

2020-03-09 11:50:29 qq_34177812 阅读数 60
  • 玩转深度学习实战教程

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

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


排版可能更好一点的永久原文链接:深度学习的数学-神经网络关系式、代价函数最优化

前言

本篇博客主要讲解神经网络中的变量表示法、各层的输入输出关系式,了解正解和预测值,代价函数的计算及其最小化,以及参数规模和需要的数据规模计算

正文

神经网络的参数表示法

据书中表述,神经网络是一种数学模型,像权重和偏置在数学上看就是参数
下图中,权重 w1/w2/w3 偏置 b 就是神经单元的参数,加权输入即为z1,经过激活函数 a 的计算得到结果为 a1
在这里插入图片描述

命名规则(重点)

上面简单看了下一个神经单元的输入输出表示,但是神经网络由多个层组成,每个层又有多个神经单元,所以需要科学的对这些神经单元编号

层编号

首先,对神经网络的每个层进行编号,从输入层开始数,输入层为层1,输出层为最后一层,也就是 层l,l表示 last
在这里插入图片描述
然后每个层对应的偏置和权重,有如下的规则定义

看表格可能有点难理解,可以参照下图的表现形式,需要着重理解权重(w)的下标有两个索引,前面的索引代表当前层的第几个神经单元,后边的索引代表前一层输出的第几个神经单元
在这里插入图片描述
在这里插入图片描述

下面是截取的一个 3*4 的黑白图像识别神经网络,输入层隐藏层和输出层的命名表示
在这里插入图片描述

小练习

这是博主自己编的几个小练习,可以对照下表格第一列理解其输出含义

符号 表示含义
w112{w_{11}}^{2} 第1层第1个神经单元对应第2层第1个神经单元输出权重
w212{w_{21}}^{2} 第1层第1个神经单元对应第2层第2个神经单元输出权重
w213{w_{21}}^{3} 第2层第1个神经单元对应第3层第2个神经单元输出权重
x12{x_{12}} 第一层(输入层)的第十二个神经单元名称 或 输入 或 输出变量
z23{z_{2}}^{3} 第3层第2个神经单元加权输入的变量
b23{b_{2}}^{3} 第3层第2个神经单元的偏置
a23{a_{2}}^{3} 第3层第2个神经单元的输出变量 或 表示该神经单元的名称

多个学习实例的表示方法

可以加上中括号来表示第n个学习实例

下图表示第七个图像输入神经网络时,对应的变量表示方法
在这里插入图片描述

关系式

关系式就是用一个式子表示各个变量之间的关系

输入层

输入层的输入即输出,所以有如下的关系式

隐藏层(中间层)

根据变量的定义,不难得出如下的关系式(z和a定义请见本博客上方表格)

在这里插入图片描述

输出层

输出层也同理可从隐藏层得到 z,经过激活函数后得到输出 a

矩阵表示法

之前理解过矩阵内积的相关知识,权重之和 z 可以用如下的向量形式表示,有利于编程的实现

正解和代价函数

正解的定义

正解顾名思义就是学习数据中正确的结果,预测值就是输入模型产生出来的结果值
用事先提供的学习数据确认权重和偏置,这个过程在神经网络中被称作学习,目标就是让预测值与正解的误差尽可能的小

如下图所示的识别 3*4 的黑白图像是0还是1,输出层 a13{a_{1}}^{3} 敏感度越高,越偏向1,反之结果越偏向0


如果我们得到的学习数据是一张图片对应一个数字 1或0,那么还需要画出表格做出如下定义

实际的学习过程就如下图所示,根据正解和输出层的结果,就可以求误差了

代价函数

这里引入书中的一段话来表示代价函数,大概意思就是衡量这个模型的误差大小的一个函数

在数学中,用模型参数表示的总体误差的函数称为代价函数,此外也可以称为损失函数、目的函数、误差函数等。如前所述(2-12节),本书采用“代价函数”这个名称。

代价函数的计算

代价函数也分很多种,比如最容易理解的每一个学习数据的(正解 - 预测值) ^ 2 之和

书中说明了,1/2 作为常数是为了方便计算

由于对差求平方的代价函数虽然很容易理解,但是存在着计算收敛时间长的问题,为解决这个难点,书中还提到了另外一种误差指标,称为交叉熵,提高梯度下降算法的速度
针对本博客上方的两个输出神经单元的例子,定义如下,其中 n 是数据的规模

代价函数的最小化(重点)

书中给到了如下一张比较容易理解的图,因为代价函数的式子直接体现模型的误差,所以只需要让代价函数尽量小,整个模型契合度就会越高

那么如何让代价函数最小呢,不知道有没有想到之前提到的 多变量函数求极值 的问题,多变量函数的极值有一个必要条件,就是 对每个变量求偏导数,其值均为0
具体可以见之前写过的一篇博客 深度学习的数学-导数和偏导数

但是在实际的训练过程中,求导数的计算量比较大,更多是采用梯度下降的方式去求极值
之前也写了相关博客可供参考 深度学习的数学-梯度下降

神经网络的代价函数

还是以 3*4 图片识别0/1的神经网络为例

假设有64张图片,则其误差可以表示如下

然后把每张图片(学习资料)的误差加起来,就得到了代价函数

参数和数据规模的计算(重点)

书中提到了参数规模的最小值估算方法,就是把所有的权重、偏置都数起来,因为这些都是需要通过学习资料去确定的参数

书中提到,数据的规模如果小于参数的规模,就无法确认模型,所以最小数据规模就是所有参数的个数,3*2图像的那个例子学习用的图像至少需要47张

总结

本篇主要记录神经网络的参数表示法,每个层每个神经单元的关系式,正解和代价函数,以及代价函数最小化、参数和训练数据规模等

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