百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

深度学习之神经网络特征综述

wptr33 2025-02-28 17:41 32 浏览


深度学习依赖于神经网络所提取的特征而闻名,在以往传统的学习方法中,特征往往是通过具有经验的专家来提取的,而深度学习方法中的特征提取是通过人工神经网络自动提取的,相比而言,深度学习方法对于特征的提取不仅要求更低,不需要专家的参与,而且少了人为的干预,对于特征本身的提取也更加全面,这也是深度学习最近几年在实际应用中越来越受欢迎的原因之一。





特征的概念

特征在字面意思上的解释是对于人或事物可以识别的特殊的象征或标志,简单来说,特征往往比其他非特征部分更容易让人们所分辨。既然特征是一个显著性的标志,那么我们对比不同物体的时候,是否只需要抓住这些特征就能够对比出两类物体呢?答案是肯定的,实际上我们人类在分辨物体的时候,大脑中所处理的信息就是当前物体的特征信息。


我们的大脑进化了亿万年,早已经是已知的生物中最强大的神经网络了,其特征提取能力更是一骑绝尘,没有其他任何可以替代人脑的第二个智慧容器了。人脑进化到目前的优势之一就是特征的快速提取,我们的大脑就像一个滤波器,会在很短的时间内,帮我们筛选出有用的信息,滤除掉冗余的信息,在这一点上人工神经网络还需要很长的路要走。



按照人脑的信息对比,特征即是对当前任务处理有用的信息,反之对当前任务处理无用的信息则是冗余信息。人脑由于遗传和进化的原因,自然对特征的提取相当准确,这帮助人类在物竞天择、适者生存的自然法则下胜出,从而站立在生物链的最顶端。和人脑相比,现在以深度学习人工神经网络为主的人工智能发展还处于工业革命时代的前夕,当人工智能的发展到了一定阶段,理论上像《终结者》、《黑客帝国》中的智能体都是轻而易举就能实现的。


人工神经网络想要达到人脑的处理效果和效率,就要提高对于特征的理解和提取,无论是分辨不同的对象还是找到目标的位置,都需要对具体物体的特征进行高精度的提取,拿到特征后才能进行下一步操作。目前人工神经网络能够提取到的特征虽然说已经比较全面了,但这都是在单一任务下的特征提取效果,如果是多任务下的特征提取,情况就不太乐观了。



上面说的多任务是指让人工智能同时执行多个不同的任务,比如训练一个神经网络,让这个神经网络既要学会下棋,又要学会弹钢琴,这个时候,人工神经网络往往达不到我们的预期,所以目前的人工智能还是弱人工智能,也就是说,目前的人工智能能够在某一领域达到或者超越人类,比如Alpha GO在围棋领域已经超越人类,但是不能够同时在多个领域超越人类,这也是判定弱人工智能和强人工智能的边界。






特征的可解释性

特征的可解释性一直是业界的一大难题。甚至于在欧盟内部因为以深度学习为主神经网络模型给不出合理的特征解释,而被停止商用,这也是行业内外很多人士对于深度学习并不推崇的原因之一。当然就像有些经典语录一样,虽然嘴上说着不喜欢,但是身体却很诚实,这在深度学习当中也是常见的现象,有些嘴上说着深度学习就是一个黑盒子,没有可解释性,只有传统的人工特征提取方法才是安全的方法,但是在实际工作中却不得不使用深度学习的方法来完成工作,这也是免不了真香定律。



一般来说传统的学习方法虽然提取特征的过程比较繁琐,需要专业人员来进行提取,也有可能会造成提取的特征不全,但是因其具有良好的可解释性,一直在学术界备受推崇,而深度学习在前几年并不受业界研究者的待见,只有在工业界才可以看到其身影,近两年随着落地应用越累越多,才逐渐被大家所接受。


举个例子,以红酒分类为例,在传统的人工提取特征的方法中,想要拿到红酒的特征,必须要专业的红酒专家来分析不同的红酒成分来确定不同的红酒种类,这些不同的红酒成分就是红酒的特征,比如颜色、口感、年份、酒精度、原料、是否起泡、微量元素含量等等,都是需要红酒专家来确定的,等专家们确定好这些特征了,然后再通过一些传统的机器学习方法对这些特征进行分类,就完成了对红酒的分类。



上面对红酒分类的整个过程,最复杂的就是人工对特征的提取过程,虽然过程繁琐,但是我们知道这些特征代表的意义是什么,也就是特征的可解释性非常好。反观深度学习中对于特征的提取就没有这么讲究了。一般来说,只要是输入神经网络中的数据,不管是什么数据,对于神经网络而言都是一堆矩阵,只要定好标签,给上一定范围内的随机参数,让其反复的进行学习即可,神经网络通过反向传播算法,最终会学习出正确的输出结构,而输入数据的特征在学习的过程中就形成了。



至于神经网络中的特征到底是什么,就没有人能解释得清楚了,通过神经网络拿到的特征,无论是网络层中哪个部位取出的特征,都只能显示出一堆矩阵,具体代表了什么现实意义,是没有任何线索可以追踪的。从另一方面来说,由于神经网络中的特征是模型在学习的过程中逐渐生成的,所以这些特征没有人为的干预,特征的分布更加客观,更有利于模型进行分类或者回归,这是传统的人工设计的特征无法相比的。






网络层中的特征

传统的特征提取方法是通过人工提取而来,人工神经网络中的特征是通过网络层计算得来的,最简单的特征提取方法就是在确定好数据标签y’后,通过反向传播算法和线性层来提取特征,比如y=wx+b,其中y是输出值,x是固定输入,w是权重,b是偏差,w和b都会随着模型的反向传播不断更新。一般通过损失函数E=1/2(y-y’)求得损失,然后通过反向传播算法降低损失E,由于损失函数中的y’是固定的,只有改变输出y,让y和y’越来越接近,才能够达到我们的目的,而改变y的值回到了前向输出公式y=wx+b上,在这个公式中,能够改变的值就只有w和b,所以最终我们通过改变w和b的值让输出的y发生变化,让其和标签y’更加接近。可见,在输入x不变的前提下,w和b的改变会让输出y越来越接近标签y’。



再复杂一些就是添加一个非线性函数,比如y=f(wx+b),这个f就是非线性函数,其作用就是将原来的线性空间的数值映射到非线性空间,让模型具有非线性的分类或者拟合能力。其本质是对维度的提升,比如在低维空间中线性不可分的问题,也就是不能使用一条直线对其分割的问题,我们只有使用非线性方法才能对其分割,比如使用曲线和折线对其分割,而在高维空间中就可以使用线性方法对其分割了。所以说低维空间中的线性不可分问题转到高维空间中就变成了线性可分的问题。



神经网络中的特征是通过学习而获得的,正常情况下,在网络层较浅的时候,提取到的特征不会有很强的标志性,这个标志性是指特征对原数据的代表性。而到了网络层数较深的时候,模型提取到的特征会有较强的代表性。当要解决的任务越复杂,对模型的参数要求也越高,往往这个时候的网络层数也更深,即意味着能够解决更复杂的任务。所以可以认为网络层数越深,对于特征的提取能力越强。


但是凡事都会出现物极必反的现象,神经网络也是一样,按照正常逻辑,网络层数越深,往往意味着模型的能力越强,所处理的任务会越好。但是这种想法忽略了一个重点,那就是要被处理的任务本身,一般来说我们只需要设计出一个模型刚好能够满足被处理的任务就可以了,但是神经网络是在训练的过程中才逐渐理解到该任务到底需要多大的神经网络才是合适的,也就是说在处理任务之前,我们并不知道到底要多深的网络才是合适的。这种困惑导致网络模型往往设计的比要处理的任务实际需要的网络模型大了很多。



网络模型过大,对于简单任务来说是一件吃力不讨好的事情,不但增加了冗余的参数量,导致对于硬件要求的提升,还会增减额外的训练时间以及影响推理速度。最主要的是模型过大过深,还会导致在处理简单任务的时候出现模型退化的问题,也就是说网络越深,精度反而会降低。一般是网络在较浅的时候,精度是逐渐提高的,当网络深度达到一定阈值后,精度又会逐渐降低。


好在华人学者Kaiming He等人早在2015年时候就提出了Deep Residual Learning的方法,论文中提出了一种新的网络结构Res-Net,采用了恒等映射的方法,消除了多余的网络层数,使得一个较深的网络能够随着任务的复杂度而自适应的训练所需的网络层参数,而非统一训练,从而解决了网络退化这个问题。



网络层中的特征变化有利于我们进行不同的任务,一般来说网络层数越浅,特征的维度也越低,特征所表现出的信息越细节,覆盖越局部,内容也越具体。反之,网络层数越深,特征维度也越高,特性表现出的信息也越整体,覆盖越全面,内容也越抽象。根据这些特性,我们可以很好的设计不同任务的网络,比如分类网络对于特征的信息越全面更有利于分类,这时候的网络我们可以设计得更深一些,而像检测、分割等任务,不仅仅需要全面的信息,还需要局部的信息,尤其是在做细粒度分割任务的时候,浅层网络所带来的细节部位的分割精度是深度网络所达不到的,这时候一般就需要浅层网络联合深层网络一起完成任务。



神经网络的快速发展是最近这几年才大规模开始的,关于神经网络特征的理解,也是仁者见仁,智者见智,但是总体的目标是不变的,那就是朝着越来越高效的特征提取方向发展。不管是以前的CNN模型,还是这两年的transformers模型,以及提出的各种注意力的方法,都是在设计怎么去除掉对于当前任务无关的冗余信息,增加对于当前任务有用的信息权重,从而实现特征的高效提取,以达到快速高效的完成任务。






作者:智谷炼药协会学徒

相关推荐

oracle数据导入导出_oracle数据导入导出工具

关于oracle的数据导入导出,这个功能的使用场景,一般是换服务环境,把原先的oracle数据导入到另外一台oracle数据库,或者导出备份使用。只不过oracle的导入导出命令不好记忆,稍稍有点复杂...

继续学习Python中的while true/break语句

上次讲到if语句的用法,大家在微信公众号问了小编很多问题,那么小编在这几种解决一下,1.else和elif是子模块,不能单独使用2.一个if语句中可以包括很多个elif语句,但结尾只能有一个else解...

python continue和break的区别_python中break语句和continue语句的区别

python中循环语句经常会使用continue和break,那么这2者的区别是?continue是跳出本次循环,进行下一次循环;break是跳出整个循环;例如:...

简单学Python——关键字6——break和continue

Python退出循环,有break语句和continue语句两种实现方式。break语句和continue语句的区别:break语句作用是终止循环。continue语句作用是跳出本轮循环,继续下一次循...

2-1,0基础学Python之 break退出循环、 continue继续循环 多重循

用for循环或者while循环时,如果要在循环体内直接退出循环,可以使用break语句。比如计算1至100的整数和,我们用while来实现:sum=0x=1whileTrue...

Python 中 break 和 continue 傻傻分不清

大家好啊,我是大田。今天分享一下break和continue在代码中的执行效果是什么,进一步区分出二者的区别。一、continue例1:当小明3岁时不打印年龄,其余年龄正常循环打印。可以看...

python中的流程控制语句:continue、break 和 return使用方法

Python中,continue、break和return是控制流程的关键语句,用于在循环或函数中提前退出或跳过某些操作。它们的用途和区别如下:1.continue(跳过当前循环的剩余部分,进...

L017:continue和break - 教程文案

continue和break在Python中,continue和break是用于控制循环(如for和while)执行流程的关键字,它们的作用如下:1.continue:跳过当前迭代,...

作为前端开发者,你都经历过怎样的面试?

已经裸辞1个月了,最近开始投简历找工作,遇到各种各样的面试,今天分享一下。其实在职的时候也做过面试官,面试官时,感觉自己问的问题很难区分候选人的能力,最好的办法就是看看候选人的github上的代码仓库...

面试被问 const 是否不可变?这样回答才显功底

作为前端开发者,我在学习ES6特性时,总被const的"善变"搞得一头雾水——为什么用const声明的数组还能push元素?为什么基本类型赋值就会报错?直到翻遍MDN文档、对着内存图反...

2023金九银十必看前端面试题!2w字精品!

导文2023金九银十必看前端面试题!金九银十黄金期来了想要跳槽的小伙伴快来看啊CSS1.请解释CSS的盒模型是什么,并描述其组成部分。答案:CSS的盒模型是用于布局和定位元素的概念。它由内容区域...

前端面试总结_前端面试题整理

记得当时大二的时候,看到实验室的学长学姐忙于各种春招,有些收获了大厂offer,有些还在苦苦面试,其实那时候的心里还蛮忐忑的,不知道自己大三的时候会是什么样的一个水平,所以从19年的寒假放完,大二下学...

由浅入深,66条JavaScript面试知识点(七)

作者:JakeZhang转发链接:https://juejin.im/post/5ef8377f6fb9a07e693a6061目录由浅入深,66条JavaScript面试知识点(一)由浅入深,66...

2024前端面试真题之—VUE篇_前端面试题vue2020及答案

添加图片注释,不超过140字(可选)1.vue的生命周期有哪些及每个生命周期做了什么?beforeCreate是newVue()之后触发的第一个钩子,在当前阶段data、methods、com...

今年最常见的前端面试题,你会做几道?

在面试或招聘前端开发人员时,期望、现实和需求之间总是存在着巨大差距。面试其实是一个交流想法的地方,挑战人们的思考方式,并客观地分析给定的问题。可以通过面试了解人们如何做出决策,了解一个人对技术和解决问...