撕逼大战,从某种角度,标志着一个产业的火热。 前几日,有一篇帖子在“Simply Stats”很火,作者Jeff Leek在博文中犀利地将深度学习拉下神坛,他谈到了深度学习现在如何狂热,人们正试图用这个技术解决每一个问题。但是呢,只有极少数情况下,你才能拿到足够的数据,这样看来,深度学习也就没那么大用处了。 帖子原文标题为“Don’t use deep learning your data isn’t that big.”(即:数据不多时,就别用深度学习了),喜欢看热闹的,不妨搜一下。 帖子一出,人们就炸开了。 这里面就有牛人就看不惯了,直接怼起来! 哈佛大学生物医药信息学的专业的博士后专门写了篇文章来反驳:You can probably use deep learning even if your data isn't that big.(即便数据不够,也能用深度学习) 谁说数据少就不能用深度学习了,那是你根本没搞懂好吗? (嗯,深度学习默默表示,这锅俺不背) 来我们先来看一下正反方的观点: ▌正方: 原贴观点:倘若你的样本数量少于100个,最好不要使用深度学习,因为模型会过拟合,这样的话,得到的结果将会很差。 ▌反方: 模型表现很差并不是由过拟合引起的。没能收敛,或者难以训练很可能才是罪魁祸首。你正方因此得出这样的结论,是因为你实验本身的问题。方法用对了,即使只有100-1000个数据,仍然可以使用深度学习技术,得到好的结果。 以下,AI100专程对反方的观点及研究进行了全文编译,略长,但,很有意思。准备好围观了吗?出发! 以下对反方内容的全文编译: 老实讲,原文中的部分观点,我也算是认同,不过,有一些事情需要在这篇文章中进行探讨。 Jeff做了一个关于辨识手写数字0和1的实验,他的数据源是来自大名鼎鼎的MNIST数据集。 此次实验,他采用了两种方法: 一种方法采用的是神经网络模型,共5层,其中激活函数是双曲正切函数; 另一种方法使用的是李加索变量选择方法,这种方法思想就是挑选10个边际p值最小的像素来进行(用这些值做回归就可以了)。 实验结果表明,在只有少量的样本的情况下,李加索方法的表现要优于神经网络。 下图是性能表现: 很惊奇对不对? 的确!倘若你的样本数量少于100个,最好不要使用深度学习,因为模型会过拟合,这样的话,得到的结果将会很差。 我认为在这里需要仔细探讨一下。深度学习模型很复杂,有很多的训练技巧。我觉得模型表现很差并不是由过拟合引起的,没能收敛,或者难以训练很可能才是罪魁祸首。 Deep Learning VS Leekasso Redux 我们首先要做的事情就是构建一个使用MNIST数据集,并且可用的深度学习模型。一般来说我们所使用的就是多层感知机与卷积神经网络。倘若原帖思想是正确的话,那么当我们使用少量样本来训练我们的模型的话,那么我们的模型将会过拟合。 我们构建了一个简单的多层感知机,使用的激活函数是RELU。于此同时,我们还构建了一类似VGG的卷积神经网络。将这两个神经网络模型的表现同李加索(Leekasso)模型进行对比。你可以在这里获取相关代码。非常感谢我的暑期实习生Michael Chen。他做了大部分的工作。使用的语言是python,工具是Keras。 代码获取地址: https://github.com/beamandrew/deep_learning_works/blob/master/mnist.py MLP是标准的模型,如下面代码所示: 我们的CNN模型的网络结构,如下面所示(我想很多人对此都很熟悉) 作为参考,我们的多层感知机MLP模型大概有120000个参数,而我们的CNN模型大概有200000个参数。根据原帖中所涉及的假设,当我们有这么多参数,而我们的样本数量很少的时候,我们的模型真的是要崩溃了。 我们尝试尽可能地复原原始实验——我们采用5折交叉验证,但是使用标准的MNIST测试数据集做为评估使用(验证集中0与1样本的个数大概有2000多个)。我们将测试集分成两部分。第一部分用来评估训练程序的收敛性,第二部分数据用来衡量模型预测的准确度。我们并没用对模型进行调参。对于大多数参数,我们使用的都是合理的默认值。 (责任编辑:本港台直播) |