刚开始学习深度学习的时候,就一直听说特征,提取特征,高维特征,低维特征,这些在刚开始的学习的时候还是比较清楚,吴恩达等一些教学视频中,或者书中,但是深入学习过程中,总感觉是老是在学习到特征方面出现问题,或许了解一些特征的概念会有些帮助。。。。
特征的概念
特征在字面意思上的解释是对于人或事物可供识别的特殊的象征或标志,简单来说,特征往往比其他非特征部分更容易让人们所分辨。既然特征是一个显著性的标志,那么我们对比不同物体的时候,是否只需要抓住这些特征就能够对比出两类物体呢?答案是肯定的,实际上我们人类在分辨物体的时候,大脑中所处理的信息就是当前物体的特征信息。
我们的大脑进化了亿万年,早已经是已知的生物中最强大的神经网络了,其特征提取能力更是一骑绝尘,没有其他任何可以替代人脑的第二个智慧容器了。人脑进化到目前的优势之一就是特征的快速提取,我们的大脑就像一个滤波器,会在很短的时间内,帮我们筛选出有用的信息,滤除掉冗余的信息,在这一点上人工神经网络还需要很长的路要走。
人工神经网络想要达到人脑的处理效果和效率,就要提高对于特征的理解和提取,无论是分辨不同的对象还是找到目标的位置,都需要对具体物体的特征进行高精度的提取,拿到特征后才能进行下一步操作。
比如说我们在动物园,为什么能够区分各种各样的动物,主要是根据我们大脑接受到的特征,大象的长鼻子,鹦鹉的羽毛等,这些特征鲜明的,我们可以很容易区分,获取的特征不可能全面,但是获取的特征的可解释性,我们更能理解为什么你说这个特征就可以分类这个动物的种类。
但是当我们把图片或者其他的原始数据,输入到深度学习网络中,我们对这个特征是什么,可不可行,我们就像看一个黑盒子,你给他数据,他给出结果,但是他内部怎么运行的,我们无从得知。这也是我现在很困惑的地方。他提取的是什么特征,怎么提取的,作为小白会很困惑。
网络层中的特征
传统的特征提取方法是通过人工提取而来,人工神经网络中的特征是通过网络层计算得来的,最简单的特征提取方法就是在确定好数据标签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就是非线性函数,其作用就是将原来的线性空间的数值映射到非线性空间,让模型具有非线性的分类或者拟合能力。其本质是对维度的提升,比如在低维空间中线性不可分的问题,也就是不能使用一条直线对其分割的问题,我们只有使用非线性方法才能对其分割,比如使用曲线和折线对其分割,而在高维空间中就可以使用线性方法对其分割了。所以说低维空间中的线性不可分问题转到高维空间中就变成了线性可分的问题。
神经网络中的特征是通过学习而获得的,正常情况下,在网络层较浅的时候,提取到的特征不会有很强的标志性,这个标志性是指特征对原数据的代表性。而到了网络层数较深的时候,模型提取到的特征会有较强的代表性。当要解决的任务越复杂,对模型的参数要求也越高,往往这个时候的网络层数也更深,即意味着能够解决更复杂的任务。所以可以认为网络层数越深,对于特征的提取能力越强。