神经网络的核心驱动力--损失函数介绍

简介: 神经网络的核心驱动力--损失函数介绍

我们知道神经网络是由很多神经元组成的多层网络结构,我们的最终目标是找到各层合适的权重参数w使得最终的输出结果能够与实际结果更加接近。**那神经网络的这些权重参数是如何的得到的呢?**其实主要就是靠“损失函数”这个指标来进行一步步训练优化的。下面一起来了解一下神经网络的驱动核心—损失函数吧。


神经网络的学习目标


神经网络的“学习”是指从训练数据中自动获取最优权重参数的过程,即神经网络自我训练的过程。为了使神经网络能进行学习,将导入损失函数这一指标。通过使损失函数最小,来寻找最优权重参数


学习的目的就是以该损失函数为基准,找出能使它的值达到最小的权重参数。


从数据中学习


神经网络的特征就是可以从数据中学习。所谓“从数据中学习”,是指可以由数据自动决定权重参数的值。以如何实现数字5的识别为例,下图给出了三种方式:


20201129161154308.png


1,通过人想的算法;

2,通过人为的进行特征量的提取,然后使用机器学习算法;

3,直接通过神经网络深度学习,此处没有人的介入,不需要人来进行特征选择。

注:深 度 学 习 有 时 也 称 为 端 到 端 机 器 学 习(end-to-end machine learning)。这里所说的端到端是指从一端到另一端的意思,也就是从原始数据(输入)中获得目标结果(输出)的意思。神经网络的优点是对于所有问题都可以用同样的流程来进行解决。


训练数据和测试数据


机器学习中,一般将数据分为训练数据和测试数据两部分来进行学习和实验等。首先,使用训练数据进行学习,寻找最优的参数;然后,使用测试数据评价训练得到的模型的实际能力。为什么需要将数据分为训练数据和测试数据呢?因为我们追求的是模型的泛化能力。为了正确评价模型的泛化能力,就必须划分训练数据和测试数据。另外,训练数据也可以称为监督数据。


泛化能力是指处理未被观察过的数据(不包含在训练数据中的数据)的能力。获得泛化能力是机器学习的最终目标。仅仅用一个数据集去学习和评价参数,是无法进行正确评价的。这样会导致可以顺利地处理某个数据集,但无法处理其他数据集的情况。只对某个数据集过度拟合的状态称为过拟合( over fitting)。


损失函数


在神经网络的学习中,神经网络需要以某个指标为线索寻找最优参数(权重和偏置),而这个指标就是损失函数( loss function)。更新参数的方向是以损失函数的值尽可能小为参考标准。为了找到使损失函数的值尽可能小的地方,需要计算参数的导数(确切地讲是梯度),然后以这个导数为指引,逐步更新参数的值。


假设有一个神经网络,现在我们来关注这个神经网络中的某一个权重参数。此时,对该权重参数的损失函数求导,表示的是“如果稍微改变这个权重参数的值,损失函数的值会如何变化”。如果导数的值为负,通过使该权重参数向正方向改变,可以减小损失函数的值;反过来,如果导数的值为正,则通过使该权重参数向负方向改变,可以减小损失函数的值。不过,当导数的值为0时,无论权重参数向哪个方向变化,损失函数的值都不会改变,此时该权重参数的更新会停在此处。


一般用均方误差和交叉熵误差等。损失函数是表示神经网络性能的“恶劣程度”的指标。


均方误差


均方误差的数学公式如下:

20201129161653180.png


yk是表示神经网络的输出, tk表示监督数据, k表示输出目标数据的维数。

20201129161713306.png

20201129161742655.png

2020112916172395.png

交叉熵误差


交叉熵误差( cross entropy error)的数学公式如下:

2020112916181296.png

20201129161831534.png

20201129161844270.png

如图所示, x等于1时, y为0;随着x向0靠近, y逐渐变小。因此,正确解标签对应的输出越大,式( 4.2)的值越接近0;当输出为1时,交叉熵误差为0。此外,如果正确解标签对应的输出较小,则式的值较大。


代码实现交叉熵误差:

20201129161900412.png

20201129161917380.png


min-batch学习损失函数计算


上述仅对单个数据进行了损失函数的计算,而机器学习需要对大批量的数据进行训练,因此在计算损失函数时必须将所有的训练数据作为对象。也就是说,如果训练数据有100个的话,我们就要把这100个损失函数的总和作为学习的指标。


如果有N个数据,则将平均损失函数作为训练目标,可以获得和训练数据的数量无关的统一指标:

20201129161937385.png

假设数据有N个, tnk表示第n个数据的第k个元素的值( ynk是神经网络的输出, tnk是监督数据)。通过除以N可以将求的单个数据的平均损失函数,与训练数据的数量无关。


但是如果数据量非常大,比如 MNIST数据集的训练数据有60000个,要是以全部数据为对象求损失函数的和,则计算过程需要花费较长的时间。再者,如果遇到大数据,数据量会有几百万、几千万之多,这种情况下以全部数据为对象计算损失函数是不现实的。因此,我们从全部数据中选出一部分,作为全部数据的“近似”。神经网络的学习也是从训练数据中选出一批数据(称为mini-batch,小批量),然后对每个mini-batch进行学习。比如,从60000个训练数据中随机选择100笔,再用这100笔数据进行学习。这种学习方式称为mini-batch学习。


20201129162007281.png


注:mini-batch的损失函数是利用一部分样本数据来近似地计算整体。也就是说,用随机选择的小批量数据(mini-batch)作为全体训练数据的近似值。


min-batch版交叉熵误差的代码实现:


20201129162022916.png


其中,y为神经网络的输出,t为监督数据,y+1e-7主要是为了防止y为0时,出现负无穷大,导致计算失败的情况。


总结


1. 了解了神经网络的学习目标–损失函数最小;


2. 学习了两种常用的损失函数:均方误差与交叉熵误差;


3. 如何计算批量数据的交叉熵误差。


那么如何通过损失函数来逐步改变参数的值,从而使参数逐渐达到最优解,即损失函数值最小呢?下篇文章《神经网络参数梯度的计算方式》会进行说明。


相关文章
|
3月前
|
机器学习/深度学习 算法 Python
【Python机器学习】神经网络中常用激活函数、损失函数、优化方法(图文解释 附源码)
【Python机器学习】神经网络中常用激活函数、损失函数、优化方法(图文解释 附源码)
106 0
|
2月前
|
机器学习/深度学习 Java Serverless
Java开发者的神经网络进阶指南:深入探讨交叉熵损失函数
今天来讲一下损失函数——交叉熵函数,什么是损失函数呢?大体就是真实与预测之间的差异,这个交叉熵(Cross Entropy)是Shannon信息论中一个重要概念,主要用于度量两个概率分布间的差异性信息。在信息论中,交叉熵是表示两个概率分布 p,q 的差异,其中 p 表示真实分布,q 表示预测分布,那么 H(p,q)就称为交叉熵:
|
3月前
|
机器学习/深度学习 人工智能 算法
神经网络算法——损失函数(Loss Function)
神经网络算法——损失函数(Loss Function)
91 0
|
3月前
|
机器学习/深度学习 算法 PyTorch
手把手教你搭建一个深度网络模型:从输入层-激活函数-损失函数-优化方法-输出层-执行训练
我这几天遇到一个不错的范例,将的是一层一层教我们搭建一个神经网络,其实很多我接触过的伙伴对修改模型架构这块还是头疼。其实我么可以从简单的神经网络层开始,自己DIY每一层,对上手修改架构有帮助。这里用的是paddle框架,当然玩pytorch的朋友也别急着关掉,因为我这几天刷到的pytorch感觉和飞桨的这块几乎是非常相似。只是有点点表达不一样,其他都完全一样。甚至连编程习惯都非常一样。下面是来自PaddlePaddle FLuid深度学习入门与实战一书的案例。
146 0
|
9月前
|
机器学习/深度学习 存储 算法
前向神经网络-多层感知器、损失函数、反向传播
前向神经网络-多层感知器、损失函数、反向传播
76 0
|
机器学习/深度学习 人工智能 PyTorch
【Pytorch神经网络理论篇】 34 样本均衡+分类模型常见损失函数
Sampler类中有一个派生的权重采样类WeightedRandomSampler,能够在加载数据时,按照指定的概率进行随机顺序采样。
350 0
|
机器学习/深度学习 人工智能 PyTorch
【Pytorch神经网络理论篇】 09 神经网络模块中的损失函数
根据损失值,使用链式反向求导的方法,依次计算出模型中每个参数/权重的梯度
198 0
|
机器学习/深度学习 存储 人工智能
【Pytorch神经网络基础理论篇】 08 Softmax 回归 + 损失函数 + 图片分类数据集
【Pytorch神经网络基础理论篇】 08 Softmax 回归 + 损失函数 + 图片分类数据集
220 0
|
机器学习/深度学习 Python
神经网络中的损失函数正则化和 Dropout 并手写代码实现
神经网络中的损失函数正则化和 Dropout 并手写代码实现
158 0
神经网络中的损失函数正则化和 Dropout 并手写代码实现
|
机器学习/深度学习 算法 数据挖掘
神经网络基础部件-损失函数详解
大多数深度学习算法都会涉及某种形式的优化,所谓优化指的是改变 x 以最小化或最大化某个函数 f(x) 的任务,我们通常以最小化 f(x) 指代大多数最优化问题。损失函数大致可分为两种:回归损失(针对连续型变量)和分类损失(针对离散型变量)。常用的减少损失函数的优化算法是“梯度下降法”(Gradient Descent)。
369 0
神经网络基础部件-损失函数详解

热门文章

最新文章