1. SVM分类效果相对于神经网络并不是很差,那它的缺点在哪里?答:SVM通过kernel匹配模型复杂度,用kernel算起来并不容易,SVM很难做到100万等大的数据量;但是对于多层感知机等通过梯度下降很容易做到很大的数据量1000万,一个亿或更多等。
在数据量少的时候,几千个,几万个点SVM还可以,但是太大了就不行了。此外,SVM能调节的东西不多,就是一个很平滑的东西;你可以调一下kernel的宽度,或不同的kernel;但是调来调去基本没什么效果,SVM的可调性不是很好,或者反过来说,想了解SVM的缺点,
你就想想神经网路的优点是什么;神经网络本身可以看作一个语言,不同的layer就是里面的小工具,不同的layer可以连起来;可以是for loop,可以一句一句写出来;通过神经网路这种语言,我们可以通过其编程,来描述对整个物体、世界和对整个要解决问题的理解。神经网络其实是一个比较不那么直观的,但是编程性比较好的一种框架,可以做很灵活的编程,反正自动求导把梯度能求出来就行了。 相对于其他的机器学习模型比如SVM,SVM有很好的数学解释,但是编程性就差了很多。也即SVM可解决的问题就会比神经网络少很多;当然如果
纯从分类角度来说SVM确实也不错,问题不大;除了scale不上去之外,SVM做ImageNet就很难很难,但是神经网路确实可以做到很大的数据集。。另外,神经网络可以通过卷积做比较好的特征的提取SVM可以简单的看成说SVM需要做特征的抽取和SVM本身是个分类器;但
神经网络特征的提取和分类是放在一起做的,也即一起通过神经网络来表达,可以真正的做原始数据集上的end-to-end的训练。
2. 模型剪枝和蒸馏Distillation其实不是真的给你做规约,并不是让你模型精度减少,只是让你得到一个比较小的模型,以方便部署(模型轻量化)。validation dataset可以用来调超参数,但是testing data 则是用一次就没了,泛化误差在testing dataset上测得的。
3. 比如可以选择30%作为测试数据,70%的数据作为训练数据;在70%的数据里面做一个5折的交叉验证,也即每一次只拿70%数据中的20%作为验证数据集,然后做5次,这是最常用的。或者:你的数据多的话,你可以训练和测试数据各取一半,在训练数据集上还是做K折交叉验证;或者对ImageNet这种来说,假如有1000类,每个类有5000张,然后对测试数据集/验证数据集每个类随机挑50张出来,那就得到1000个类加一起的50000个图片的验证数据集,剩下数据集全部作为测试,这也是另外一种做法。另外使用valid dataset来看是否overfitting的。
4. 如果时序的数据,训练集和验证集会有自相关性,这时候怎么处理呢?答:时序序列数据要保证你的测试集是在训练集之后的,不能在中间站做,中间做肯定是不行的,(网友:把时序数据转化为监督学习),可以这样1到100的时序数据集,你用1到90作为训练,91到100作为验证这样的往后推的方法。这是一般的时序序列的做法。
5. 验证数据集和训练数据集的数据清洗(e.g. 异常值处理,特征构建(如标准化))是否需要放在一起处理?两种:1.标准化的话,数据减去其均值然后除以方差,涉及到均值和方差怎么算,有两种算法,一种是把训练和测试数据集等都拿过来放在一起算均值和方差,因为你没有看它的标号,你只看到了他们的值,在实际生产中很可能没问题;第二种方法是只在训练集上算均值和方差,然后把均值和方差作用到验证数据集上去,一般来说后者会保险一些,实际情况下,可以做、看。不过前面一种会好一些,实际的话,看你是否能拿到验证数据集的数据,能拿到的话就可以用第一种方法。
6. 深度学习一般训练集较大,K折交叉验证是不是没什么用?训练成本太高了吧?答:数据集不够大的情况下采用K折交叉验证,传统机器学习用K折较多;深度学习用的不多,因为比较贵。
7. 为什么cross validation就好呢?它也没解决数据来源问题?答:cross validation只是给你选择超参数的,它并不能解决其他问题。数据来源:你怎么采样数据使得它的分布比较好,不要跟训练集、验证集数据分布长的非常不一样这都不是cross validation做的事情,这些
都是data science来解决的;里面有挺大一块,比如怎么处理和爬取数据等。
8. K折交叉验证的K是怎么确定的?答:要在你能承受的计算成本里面。理论上K越大越好,但是你也要考虑计算成本,K大了你的计算成本也线性增长了。。