首页 > 编程知识 正文

特征表示,特征向量怎么表示

时间:2023-05-03 11:49:39 阅读:191671 作者:3910

文章目录 表示学习特征工程与表示学习深度学习的表示学习注:深度学习不等于多层神经网络什么时候用「手工提取」什么时候用「表示学习」? 关于特征表示学习的算法 参考资料

表示学习

表示学习的基本思路,是找到对于原始数据更好的表达,以方便后续任务(比如分类)。机器学习中,同样的数据的不同表达,会直接决定后续任务的难易程度(换言之,表示方法的选择通常依赖于后续任务的需求),因此找到好的数据表示往往是机器学习的核心任务。

特征工程与表示学习

机器学习一般有两种思路来提升原始数据的表达[1]:

特征学习(feature learning),又叫表示学习(representation learning)或者表征学习,一般指模型自动从数据中抽取特征或者表示的方法,是模型自动学习的过程;特征工程(feature engineering),主要指对于数据的人为处理提取,得到我们认为的适合后续模型使用的样式,是人工提取的工程 (狭义的特征工程指的是“洗数据”:处理缺失值,特征选择,维度压缩等各种预处理手段,但从更广义的角度看,这些处理是为了使得数据有更好的表达以便后续应用)


传统的机器学习方法主要依赖人工特征处理与提取,而深度学习则依赖模型自身去学习数据的表示(自动抽取有效特征)。

深度学习的表示学习

输入数据经过层层网络,依次被抽取出了低级特征(low level features)比如边缘色度,中级特征(middle level features)比如纹理角点,和高级特征比如图形,然后把高度抽象化的高级特征交给最后的分类器层进行预测,从而得到分类结果。深度网络最后一层一般就是个线性分类器,比如softmax线性回归分类,深度神经网络的其他部分可以看做是为最后一层的分类器提供表征。通过层层网络抽取高度抽象化的特征,最终目的是为了帮助分类器做出良好的预测:最开始输入网络的特征可能是线性不可分的,但是到最后隐藏层时变得线性可分了。如果只看分类器层的话深度学习和其他机器学习没有太大差别,正是前面层层网络良好有效的抽取特征的能力使得深度学习脱颖而出 [1]。

注:深度学习不等于多层神经网络

传统意义上的多层神经网络只有输入层,隐藏层,输出层。其中隐藏层的层数根据需要而定。“深度学习的网络结构”广义上就属于多层神经网络,只是更深更复杂。而"深度学习"是为了让层数较多的多层神经网络可以训练、能够work而演化出来的一系列的 新的结构和新的方法 [2]。

新的网络结构中最著名的就是CNN,它在多层神经网络的基础上,加入了“卷积层“进行特征学习,符合人脑对视觉任务的处理方式;并且其“局部感受野”和“权植共享”的概念,大大减少了网络参数的数量,解决了传统较深的网络参数太多难以训练的问题。新的结构还包括了:LSTM,ResNet等。

新的方法就多了:新的激活函数(ReLU),新的权重初始化方法(逐层初始化,XAVIER等),新的损失函数,新的防止过拟合方法(Dropout, BN等)。这些方面主要都是为了解决传统的多层神经网络的一些不足:梯度消失,过拟合等。

什么时候用「手工提取」什么时候用「表示学习」?

一般来说,要想构造良好的特征工程,需要深刻理解数据和问题;要想自动学习到数据的良好表达,就需要大量的数据。因此选择的过程其实也是在衡量我们对于问题及数据的理解是否深刻,是人类先验与数据量之间的一场博弈。一般来说,「特征工程」往往在中小数据集上表现良好,而「表示学习」在大量复杂数据上更有用武之地。当数据量不大且对数据充分理解时,特征工程比较合适,这在kaggle竞赛中很常见。而当数据量较大或者我们的先验理解有限时,可尝试表示学习,比如神经网络。另外,表示学习的另外一个好处是高度抽象化的特征可以通过迁移学习用在其他相关的问题上 [1]。不管是特征工程还是表示学习,我们衡量它们作用的一个标准就是看后续的学习任务是否能够得益于这种表示。

关于特征


给出一张猫的图片,我们的大脑是怎么识别出这是一只猫的呢?通过眼睛,耳朵,嘴巴,尾巴,腿,或是这些的组合?这里的“耳朵,嘴巴,尾巴" 等等就是我们用来判断的"特征",大脑的神经元迅速完成了一系列复杂的运算,最后得出结论这是猫。再比如“四条边,等长,直角”这些稍低级的特征可被大脑用来识别正方形。

但对于计算机而言,图片只是一堆数字而已,比如800600的彩色图片就是一个8006003的矩阵(灰度图则为800600的矩阵),矩阵里相应元素的值就代表着像素值(像素值也是人为创造的概念,对计算机来说这就只是个数字)。那么什么样的数字代表“猫的眼睛”,什么样的数字代表“猫的耳朵”呢?如果采用特征工程,就需要理解数据并且人为定义规则来提取特征,比如定义连续5个像素(1,34,67,89,213)则代表猫尾,… ,当然定义的规则,和提取特征的好坏,非常影响最终的分类结果 [3]。

我们可以利用像素和邻域像素之间的差异,设计卷积核来提取图像的局部特征。经过不同卷积核的卷积运算后,可以起到不同的作用,比如高斯平滑卷积核可以被看做每个像素被其邻居像素平均(边缘模糊),见上图;而边缘检测的卷积核,就是将每个像素和其邻域像素做差值,如下图

再比如识别一个曲线,可以按照曲线的形状走向设计卷积核的形状,在遇到类似图像的时候,卷积运算后的数值会很大(对应位置像素值相乘后相加),反之很小,即可识别想要的形状。

注:卷积运算其实就是向量的内积运算。内积是衡量两个向量之间的相似性的,所以卷积核在图像某一区域的卷积实际上就是这个卷积核与图像该区域的相似性。一个卷积核探索一种相似性,多个卷积核探索多个相似性。卷积核作用在同一样本的不同位置上(即卷积核在整张图上共享:权值共享)那么kernel探索的就是不同位置共有的局部特征,即局部特征的平移不变性。卷积核作用在不同的样本上,那么kernel 探索的是样本数据共有的局部特征。

以上也是卷积核又称为滤波器或者模板的原因 [4]。

传统的图像处理,就是人工设计好了不同的卷积核(滤波器)去提取不同特征,常见的滤波器:高通、低通、高斯模糊、SOBEL 查找边缘 … 是白盒。但非常依赖经验,提取规则只适用特定数据和问题,对于某些任务,特征并不单一和具体,很难设计适合的滤波器。比如计算机视觉领域的目标检测:想要设计一个卷积核检测眼睛位置,但是不同的人,眼睛大小状态是不同的,如果卷积核太过具体化,卷积核代表一个睁开的眼睛特征,给出一张图片的眼睛是闭合的,就很大可能检测不出来。对于这种问题,我们如何设计卷积核呢,即,如何确定卷积核的值呢?

深度学习可以自动寻找合适的卷积核来完成特征提取(卷积核的固定值被替换为参数来求解),得到的“滤波器”是黑盒,神经网络不需要理解数字代表的业务含义,它只需要尝试找到最合适的卷积核等各种参数,使得在给定数据上loss最小就可以了 (求解卷积核参数的过程涉及到损失函数,梯度下降,反向传播等:使得最终的卷积核,通过它提取出来的特征,能够使预测得到的结果和真值尽可能接近)。

当然了,虽然深度学习的过程不要人为理解数字背后的业务含义,但实际上深度学习得到的特征是具有一定语义的:学习到的低级特征可视化后得到一些点,线,方向,颜色等等,中级特征可视化后可能是一些轮廓形状,角点等等,高级特征就更加抽象了甚至有时人类并不能理解。这也是迁移学习和fine-tune存在的基础,一个经过大型图像数据集如ImageNet训练过的大规模CNN,因为前面几层已经通过训练得到了丰富的底层细节信息,所以只需要在新数据集上训练上层网络(对低级特征的组合信息)以及最后的分类器层即可,完全不需要从头再来 [4]。

小结,深度学习并不“理解”所识别物体的外观/纹理/颜色等“特征”… 它只是能够根据这些本质仍为数字的“特征”,进行分类/分割/… 任务。它们所做的实际就是两件事情:将(输入)视觉空间分解为卷积滤波器的分层模块化网络(类似于人类视觉皮层系统);将这些滤波器的某些组合与给定标签之间建立概率映射 [5]。

表示学习的算法

大致包括:

深度学习,包括大部分常见的模型如CNN/RNN/DBN/GCN等某些无监督学习算法,如主成分分析(PCA)及自编码器(autoencoder)通过对数据转化而使得输入数据更有意义某些树模型可以自动的学习到数据中的特征并同时作出预测

深度神经网络的最后一层一般都是一个线性分类器,其他层则可看成是在给这个线性分类器提供特征,所以最后一层之前的隐藏层都可被理解为是表征学习,在上一节中有更具体的描述。

在深度学习大幅发展之前,无监督学习是很好的表征学习的工具,精髓是学习从“高维观察” 到 “低维表征空间” 的映射,使得可通过低维的表征(近似地)重建出原来的观察,比如PCA的映射空间就保证了原空间的多样性。自编码器是一种无监督的神经网络,它与PCA很相似,需要最小化和PCA一样的目标函数,但相比于PCA只能执行线性变换,自动编码器既能表征线性变换,也能表征非线性变换。因为自动编码器的网络表征形式,所以可将其作为层用于构建深度学习网络[6]。

参考资料

[1]「特征工程」与「表示学习」 - 微调的文章 - 知乎
[2] 深度学习 和 多层神经网络 的区别? - 知乎
[3] 深度学习的一些思考
[4] cnn本质
[5] How convolutional neural networks see the world – The Keras Blog
[6] 自动编码器

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。