[Converge] Feature Selection in training of Deep Learning
特征相关性对于DL的影响
链接:https://www.zhihu.com/question/47908908/answer/110987483
经验一:
1. 输入特征最好不相关。如果某些维输入的相关性太强,那么网络中与这些输入神经元相连的权重实际上起到的作用就是相似的,训练网络时花在调整这些权重之间关系上的力气就白费了。(仅仅是多费了点时间?)
2. 上面说的输入的相关是指所有训练数据某些维度上相关,而不是说某些训练数据在所有维度上相关。在你举的例子中,如果相似数据都非常接近,那么这些数据其实是冗余的,可以去掉一部分;如果相似数据之间的方差足够大,那么这种方差就能增强模型的鲁棒性。
3. 如果你不使用minibatch,那么没有影响。
4. 需要归一化,否则训练过程中容易遇到数值上的困难。
样本之间的相关性不怕,特别是数据量大的时候。
输入特征之间最好还是不要相关,但是如果数据量够大,问题也不大
给题主分享一些实验的经验。首先分析一下你的问题,从题主的描述中,我感觉题主问题两个方面;
1,数据预处理:相关性预处理,数据量纲预处理
1.1 数据量纲
数据量纲,可以理解为数据在相应度量单位下的数值;比如温度和高度等度量单位,单位分别为摄氏度和厘米;
如果温度度量的是人的体温,那么正常人类的范围是从34-42度之间了;
如果高度度量人的高度,那么范围会从30cm—230cm之间了,
如果剔除单位,单纯的从数据上来说,很明显身高数据的幅值范围要大而且其数值也更大,
所以在相同的处理下,同时乘除同一个系数,身高对于结果的影响要大一些。
当然你可以说温度乘以一个大的系数,身高乘以一个小的系数,这种方式来平衡或者抵消量纲的影响,这个确实正确,最小二乘回归分析也是这么处理的,但是这个增加了模型训练的难度,而且大的系数很容易导致过拟合。
其次从面对问题的角度来分析,
如果你预测一个人会不会发烧的问题,那么这个时候温度对于结果和影响肯定大于身高,即温度比身高更重要,甚至可以认为身高对于结果是无用变量可以删除;
如果你预测一个人的篮球水平,那么这时身高就比温度更重要,
以上两种问题中对于温度和身高的分析都是基于我们的常识经验,其实也可以看做一种机理分析,即我们已经先验地知道了问题的因果关系,可以直观的判定变量的作用;
然而现实中我们遇到的问题,往往很难做机理分析;更通常的做法是我们通过观察测定了一些对于结果有影响的变量,至于which变量对于结果是至关重要的我们往往不能够通过经验或者机理分析直接给出,那么这个时候最好的做法就是认为所有变量同样重要。
那么,体现变量一样重要的普遍做法就是去除量纲,即归一化处理到相同或相近的数值和幅值范围,通常的方法有最大最小值归一化和方差归一化两种,
最大最小值归一化把数据归一化到[0,1]或[-1,1]区间,
方差归一化更倾向于通过变量自身的离散程度(方差)来自身归一化,此种归一化后的数据范围通常不是[0 ,1]或[-1,1]区间。
1.2 数据相关性
数据相关,通常指不同变量(度量维度)之间联系的程度,例如
人的身高和体重具有很大的相关性,一般身高高的体重都大;
还有就是颜值和受欢迎程度也是相关的;
那么如果相关性比较大的两个变量同时出现在数据中,会造成变量的重复使用和数据冗余,
假设我们要预测某个省份的gdp,那么通常会在统计局网站中找一些类似人口,用电量,教育投入,高等教育人口比例,消费水平等类似的数据,那么我们假设教育投入决定了高等人口比例,即二者之间有因果关系,那么此时如果把上述变量不加处理都扔进去模型中,就等价于教育投入这个变量使用的两次,不仅影响结果,还会增加了计算量
。
解决数据相关性问题主要是
先计算数据变量间的相关系数,把相关系数高的两个变量提出一个,
或者用万金油PCA,不仅能够消除相关性还能够降低维度。
2 训练方法
其实主要指训练过程中的一些trick,网络结构,神经元类型,学习方法,学习率,迭代次数,收敛精度,学习批量,乱序操作,权值初始值,权值惩罚项,权值约束,稀疏性,当然还有很重要的数据量;
每个参数的设置都会影响你最终的训练时间和结果,所有参数都设置对了结果不一定好,但是有一个参数设置不好结果一定不好,神经网络就是这么任性的。一个好的模型和参数组合,在不进行数据处理时也可以得到不错的结果;而且同样的模型偶尔也会出现使用原始数据的结果反而比预处理后的结果要好,当然只是偶尔;所以从数据到结果是一个系统,哪一个环节出了问题都得不到很好的结果;如果某一个环节表现特别优异可以在一定程度上弥补其它环节的不足。
上面扯了这么多,来正面回答一下题主的问题。
2.1 相关性问题:
相关性问题是一个无确定解的问题,特征之间的相关性是否会影响到网络的性能,导致了比特征间独立的情况下性能要差。
对于神经网络而言,数据的相关性会影响到网络性能,但是如果训练方法得当,参数选取正确其结果不一定比特征独立差
其次由于神经网络强大的拟合能力,有的数据集在不去除相关性和不使用pca降维时结果要更好,这个要看数据的特点和质量。
问题中题主用一个实例是(5,3,6)另外一个是(5.1,3.3,6.1)来描述数据相关性有些不太恰当,从例子来看感觉题主描述的应该是数据分布的密集读或者散布程度;
数据异常的点越少,散布越均匀,数据量越大,越能够提高准确性;相反则会导致不好的结果。
由于神经网络通常使用监督引导学习,经典的BP算法就是通过预测残差来引导网络学习的,如果数据分布不均匀,那么数据相对密集的地方会产出更多的引导学习,即网络更偏向数据密集的地方拟合,这时对于非密集处的数据就会产生坏的影响,可以理解成拔河,数据密集且多的地方能够把神经网络“拉”(引导)过来。
那么解决这种问题最好的方法可以考虑一下svm,如果题主坚持神经网络模型,那么可以尝试增大数据量,通过复制或者插值增加数据相对稀少位置的数据,也可以删除一部分密集处的数据。
2.2 归一化的问题:
也是一个无固定解的问题;就个人的经验而言大部分情况下归一化比不归一化要好,但是也存在一些特别的数据集,不归一化的情况下反而结果会更好;
至于两种归一化方法感觉旗鼓相当了,从经验来说基于最大最小值的[0,1]归一化要稍微好一些。但是图像数据一定要归一化,不归一化结果很烂。所以最终是否归一化,选择哪种归一化方法需要题主用实验来验证你的数据适合哪种情况。
是否对于数据进行乱序操作,要看题主使用的是哪种学习方法了,目前主要分为:全批量学习(整个数据集的),子批量学习(mini-batch学习),增量学习(一个一个的学习),
题主要是使用全批量学习,数据是否乱序基本没有影响,其收敛曲线较平滑,可以使用稍大一些的学习率;
要是使用增量学习,数据乱序会影响结果,这个影响有不确定性,因为增量学习本身就会波动较大,异常值对于此种结果有很大的影响,而且增量学习更容易受到参数设置的影响,所以结果会有更大的不确定性,为了消除波动的影响,建议使用较小的学习率;
子批量学习方法,介于增量和全批量学习之间,其原理类似通过子采样来估计整体,建议使用此种训练方法,大多数数据集此种方法能够在最小的训练时间下达到收敛精度,但是不绝对。
通过以上分析,感觉题主要骂娘了,说了半天和没说一样,那个情况都是不绝对,我只能说臣妾冤枉啊,之前在UCI数据上刷数据的时候,被害惨了,只能各种试验,找到每个数据集最适合的处理方法。
神经网络是一个系统的工程,之前深度神经网络的学习很多情况下依靠参数的设置,其实就是依靠trick和经验,之前听过一个说法:
一个学习几天的本科生和一个研究神经网络的教授都可以用神经网络来解决一个问题,那么这个不同就在于经验和感觉上,可能本科生要得到好的结果要通过蛮力实验更多的次数。
感觉这也是神经网络的魅力所在,使用网络模型很简单,只要有数据,不需要机理分析,就可以训练模型,但是模型结果的好坏则需要很多的trick,这也是神经网络简单,同时也不简单的地方了。
最后要多啰嗦一句,从解决问题的角度,感觉题主应该首先基于机理分析,分析一下输入数据,然后去寻找适合的模型,
有时候非线性回归和偏最小二乘就可以解决问题;
此外简单的模型在修改的时候更加好控制,也具有更大的灵活性;
若是其他模型效果都不太理想,再考虑神经网络,因为神经网络多少有些黑箱模型,只要数据量足够,结果不会太差,多少有些暴力。
这是一个很大的话题,持续中...
[Converge] Feature Selection in training of Deep Learning的更多相关文章
- ON LARGE BATCH TRAINING FOR DEEP LEARNING: GENERALIZATION GAP AND SHARP MINIMA
目录 概 主要内容 一些解决办法 Keskar N S, Mudigere D, Nocedal J, et al. On Large-Batch Training for Deep Learning ...
- 16 On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima 1609.04836v1
Nitish Shirish Keskar, Dheevatsa Mudigere, Jorge Nocedal, Mikhail Smelyanskiy, Ping Tak Peter Tang N ...
- Deep Learning in a Nutshell: History and Training
Deep Learning in a Nutshell: History and Training This series of blog posts aims to provide an intui ...
- paper 124:【转载】无监督特征学习——Unsupervised feature learning and deep learning
来源:http://blog.csdn.net/abcjennifer/article/details/7804962 无监督学习近年来很热,先后应用于computer vision, audio c ...
- 转:无监督特征学习——Unsupervised feature learning and deep learning
http://blog.csdn.net/abcjennifer/article/details/7804962 无监督学习近年来很热,先后应用于computer vision, audio clas ...
- [转] 无监督特征学习——Unsupervised feature learning and deep learning
from:http://blog.csdn.net/abcjennifer/article/details/7804962 无监督学习近年来很热,先后应用于computer vision, audio ...
- Deep Learning中的Large Batch Training相关理论与实践
背景 [作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] 在分布式训练时,提高计算通信占比是提高计算加速比的有效手段,当网络通信优化到一 ...
- Machine and Deep Learning with Python
Machine and Deep Learning with Python Education Tutorials and courses Supervised learning superstiti ...
- Deep Learning in a Nutshell: Core Concepts
Deep Learning in a Nutshell: Core Concepts This post is the first in a series I’ll be writing for Pa ...
随机推荐
- Object类--toString方法
toString()方法 1.在Object类中定义toString()方法的时候返回对象的哈希code码(对象地址字符串) 直接输出对象: 2.可以通过重写toString()方法表示出对象的属性之 ...
- Java 面试题 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- windows多线程--原子操作
推荐参考博客:秒杀多线程第三篇 原子操作 Interlocked系列函数 原子操作 VS 非原子操作 原子操作就是不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会有任何线程切 ...
- zookeeper logs and snapshot
来自:http://xstarcd.github.io/wiki/Cloud/zookeeper_log_snapshot.html 事务日志可视化转换 1 2 3 4 5 6 7 8 9 10 11 ...
- V-rep学习笔记:转动关节2
Torque or force mode: in this mode, the joint is simulated by the dynamics module, if and only if it ...
- c++类大四个默认函数-构造函数 析构函数 拷贝构造函数 赋值构造函数
每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数).对于任意一个类A,如果不编写上述函数,C++编译器将自动为A 产生四个缺省的函数,例如: A ...
- java中使用队列:java.util.Queue(转)
队列是一种特殊的线性表,是运算受到限制的一种线性表,只允许在表的一端进行插入,而在另一端进行删除元素的线性表.队尾(rear)是允许插入的一端.队头(front)是允许删除的一端.空队列是不含元素的空 ...
- 开发第一个flutter程序 hello world
上一篇咱们配置了flutter的基本环境之后,那么本篇就来讲一下如何开发第一个小应用hello world 双击打开 android studio 选择plugins 找到 fultter 并且下载安 ...
- Socket网络编程--聊天程序(5)
上一小节我们讲了使用select来避免使用多进程的资源浪费问题.上次只是实现了从多个客户端发送数据给服务器端,接下来就要实现从服务器端发送数据给各个客户端. 使用select多路转换处理聊天程序2 c ...
- SpringMVC(Springboot)返回文件方法
https://blog.csdn.net/Lynn_coder/article/details/79953977 ****************************************** ...