在做深度学习模型训练的时候,我们想要的结果不就是模型的识别率越高越好吗,换句话说我能调参调出识别精度高的参数不就行了吗?搞不懂为啥来定义一个损失函数浪费我内存资源,我们不应该把精力放在如何提高我们模型的识别率做为识别精度指标吗,拿损失函数干啥。
感觉挺有道理的,难道不是吗?
哲学上有一句话说:“任何事物的存在都是有它的道理的”,那损失函数的存在也是有它道理的。对于这个疑(tai)问(gang),可以从“导数”的角度来思考上面的问题。在深度学习的神经网络训练过程中,要去寻找模型中的最优参数时(隐藏层的权重和偏置), 就是去寻找使损失函数的值尽可能小的参数。为了能找到使损失函数的值尽可能尽可能小的地方,就去需要计算参数的导数(梯度),然后以这个导数为指引去逐步更新参数的值。
梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。
<源于百度百科>
假设我们正训练一个神经网络模型,此时我们需要关注这个神经网络中的某一个权重参数。这时我开始对该权重参数的损失函数进行求导,它表示的是“如果稍微改变这个权重参数的值,损失函数的值会如何变化”。
如果导数值为负,通过使该权重参数向正方向改变,可以减小损失函数的值;反过来导数值为正, 我们就让该权重参数向负方向改变,来减小损失函数的值。如果导数值为0的话就gg了,因为不管权重参数向哪个方向变化,损失函数的值都不会改变,也就意味着该权重参数的更新的脚步停留在此处。
之所以不能用识别精度作为指标,是因为这样一来绝大多数地方的导数都会变为0,导致参数无法更新。说了这么多术(fei)语(hua),就是想说在进行神经网络的学习时,不能将识别精度作为指标。因为如果以识别精度为指标,则参数的导数在绝大多数地方都会变为0。
那为啥用识别精度作为指标时,参数的导数在绝大多数地方都会变成0。你确定?
我们来动动手想一下,假设现在有个语音识别的神经网络模型,能够在100个音符的训练集中正确识别出中的66个,此时可以认为识别精度为66%。如果以识别精度为指标来提高精度,那我就开始发动调参大法啦!
我东改改、西改改的微调部分权重参数的值,然后精度还是保持在66%,害羞害羞。不要慌,至少我们知道仅仅微调参数,基本上是无法改善识别精度的。就算一脚踩到狗翔,识别精度有所改善,值也不会像66.10%、66.12%、66.15%这样连续变化,而是一会67.2%、一会66.3%或者降下去这种不连续的、离散的变化。就像薛定谔的猫一样,最终结果不跑出来谁也不知道其结果会是什么。
而如果把损失函数作为指标,当前损失函数的值可以表示为0.92543 ... 这样的值。并且,如果稍微改变一下参数的值,对应的损失函数也会像0.93432 ... 这样发生连续性的变化。
识别精度对我的调参大法(参数的微调)基本上没啥反应,即便有它的值也是那种不连续地、突然地变化。作为激活函数的阶跃函数也有同样的情况。出于相同的原因,如果使用阶跃函数作为激活函数,神经网络的学习将无法进行。
如图所示,阶跃函数的导数在绝大多数地方(除了0以外的地方)均为0。也就是说如果使用了阶跃函数,那么即便将损失函数作为指标,参数的微小变化也会被阶跃函数扼杀在摇篮里,导致损失函数的值不会产生任何变化。
阶跃函数非0即1,变化只在一瞬间。而sigmoid函数不仅函数的输出(竖轴的值)是连续变化的,曲线的斜率(导数)也是连续变化的。也就是说,sigmoid函数的导数在任何地方都不为0。这对神经网络的训练非常重要,得益于这个斜率不会为0的性质,神经网络的训练得以正确进行。
黑叶猴
黑叶猴
分享到:
相关推荐
在深度学习中,交叉熵损失函数是最常用的损失函数之一,交叉熵损失函数是用于评价分类模型的性能,交叉熵损失函数可以分为二分类交叉熵损失函数和多分类交叉熵损失函数。 二分类交叉熵损失函数是用于二分类问题的...
深度学习损失函数是深度学习模型中一个非常重要的组件,决定了模型的优化方向和速度。不同的损失函数适用于不同的模型和问题,因此选择合适的损失函数是模型优化的关键。本文主要介绍三种常用的深度学习损失函数:...
深度学习损失函数原理解析 深度学习中损失函数的选择是模型训练效果的关键所在。不同的损失函数有其特点和应用场景,本文将对深度学习中常用的19种损失函数进行介绍,包括均方误差损失、交叉熵损失、KL 散度损失、...
本文主要探讨了几种创新的深度学习损失函数设计,旨在提高分类器的性能和泛化能力。 首先,文章介绍了增加Fisher类别结构的损失函数,利用Fisher准则来度量类别间的距离。通过引入类内距离Sw和类间距离Sb,损失函数...
本篇文章将探讨2018年的一项研究,该研究关注的是深度学习损失函数的创新设计,尤其是如何引入稀疏性和正交性以提升模型性能。 传统的损失函数,如交叉熵损失,主要用于衡量分类任务中的预测误差。然而,为了提高...
在许多情况下,利用深度学习算法搭建的神经网络模型都需妥进行某 种形式的优化。 这非常重要,只有经过优化的网络,才能在训练之后达到 不错的解决问题的效果。 优化的最直接目的就是使参数更加准确地更新。 一般...
损失函数是机器学习和深度学习中至关重要的组成部分,它衡量了模型预测结果与实际数据之间的偏差。损失函数的选择和设计直接影响着模型的训练效果和泛化能力。本文主要从基础概念出发,对损失函数进行了深入探讨,...
此外,该损失函数在图像分类任务中的应用也表明了其在实际深度学习项目中的巨大潜力和应用价值。尽管如此,如何将得分聚类损失函数进一步优化,以及在其他类型的数据上进行验证,仍然需要更多的研究工作。
### 定制化深度学习:在 PyTorch 中实现自定义损失函数 #### 1. 损失函数的重要性 损失函数是深度学习模型训练过程中不可或缺的一部分,它用于量化模型预测结果与实际标签之间的差异。一个好的损失函数不仅能够...
"基于多示例深度学习与损失函数优化的交通标志识别算法" 本文提出了一种基于多示例深度学习和损失函数优化的交通标志识别算法,旨在解决当前交通标志种类繁多和所处环境多变的问题。该算法首先设计了一个包含颜色、...
在深度学习中,预测正弦函数的取值可以被视为一个回归问题,目标是训练模型学习输入x(通常为角度)和对应的正弦值y之间的关系。通过这样的训练,RNN可以捕捉到正弦函数的周期性特征,并进行精确的预测。 RNN的设计...
在深度学习领域,损失函数是衡量模型预测与真实值之间差异的重要工具,它为优化过程提供了指导。PyTorch是一个广泛使用的开源深度学习框架,它提供了丰富的损失函数库供用户选择。本文将深入探讨PyTorch中实现的两种...
在机器学习和深度学习中,我们常见到许多度量模型效果的损失函数,在回归任务中常见的是均方误差函数,在分类任务中,交叉熵则使用很频繁,为什么呢?本文将带您领略香农信息论的魔力,了解信息熵和损失函数的联系与...
- **高维数据处理能力**:深度学习模型能够自然地处理高维数据,这在处理高新技术产品的复杂参数时尤为重要。 - **非线性逼近能力**:深度学习模型通过多层次的非线性变换,可以逼近复杂的非线性函数,这是浅层模型...
在深度学习领域,尤其是目标检测任务中,Detectron2是一个广泛应用的开源框架,它由Facebook AI Research团队开发,用于提供高效、灵活且可扩展的工具,以实现各种现代计算机视觉算法,包括Faster R-CNN。...
在深度学习中,损失函数通常用来衡量模型预测值与真实值之间的差距。 ### 二、常见的最优化算法 1. **梯度下降法**:这是最基本的最优化算法之一,其思想是沿着负梯度方向逐步更新模型参数,以期望达到损失函数的...
「深度学习|损失函数:网络参数优化基准」Jupyter Notebook 代码运行演示