最近,Jeff Leek 在 Simply Stats 上发表了一篇题为「如果你的数据量不够大就不要使用深度学习」(Don't use deep learning your data isn't that big)的文章(链接见文末),认为只有获得了谷歌、Facebook 这样规模的数据才有资格做深度学习。对于这点 Andrew L. Beam(本文作者)并不反对,他认为这使我们清楚地意识到深度学习并不是一种***的灵药;但是,虽然 Beam 同意其核心观点,但是其还有很多不明确或不清晰的地方,并且 Beam 认为只要小心地训练模型,就能在小数据设置中使用深度学习。机器之心对该文进行了编译,原文链接请见文末。
创新互联公司是一家以重庆网站建设公司、网页设计、品牌设计、软件运维、seo优化、小程序App开发等移动开发为一体互联网公司。已累计为成都咖啡厅设计等众行业中小客户提供优质的互联网建站和软件开发服务。
Jeff Leek 采用两种方法基于 MNIST 数据集对手写字体进行分类。他对比了五层神经网络(激活函数使用的是 hyperbolic tangent)的系统和 Leekasso,Leekasso 仅仅使用了带最小边际 p-value 的 10 块像素。他惊讶地表明,在使用少量样本时,Leekasso 要比神经网络性能更加出色。
难道如果你的样本量小于 100,就因为模型会过拟合并且会得出较差的性能而不能使用深度学习?可能情况就是如此,深度学习模型十分复杂,并且有许多训练的技巧,我总感觉缺乏模型收敛性/复杂度训练也许才是性能较差的原因,而不是过拟合。
深度学习 VS. Leekasso Redux
首先***件事就是建立一个使用该数据集的深度学习模型,也就是现代版的多层感知机(MLP)和卷积神经网络(CNN)。如果 Leek 的文章是正确的话,那么当只有少量样本时,这些模型应该会产生严重的过拟合。
我们构建了一个激活函数为 RELU 的简单 MLP 和一个像 VGG 那样的卷积模型,然后我们再比较它们和 Leekasso 性能的差异。
所有的代码都可下载:https://github.com/beamandrew/deep_learning_works/blob/master/mnist.py
多层感知机模型是非常标准的:
CNN 模型也和以前的十分相似:
作为参考,MLP 大约有 12 万个参数,而 CNN 大约有 20 万个参数。根据原文的假设,当我们有这么多的参数和少量样本时,模型好像真的会出错。
我们尽可能地靠近原始分析,我们使用了 5 层交叉验证(5-fold cross validation),但使用了标准 MNIST 测试集进行评估(大约有 2000 张测试样本)。我们将测试集分为两部分,上半部分用于评估训练过程的收敛,而下半部分用于测量样本预测的准确度。我们甚至没有调整这些模型,对于大多数超参数,仅仅只是使用合理的默认值。
我们尽可能地重新构建了原文中 Leekasso 和 MLP 的 Python 版本。代码可以在此处下载:
https://github.com/beamandrew/deep_learning_works/blob/master/mnist.py
以下是每个模型的样本精度:
这两个模型的精度和原来的分析有很大的不同,原始分析中对小样本使用 MLP 仍然有很差的效果,但我们的神经网络在各种样本大小的情况下都可以达到非常***的精度。
为什么会这样?
众所周知,深度学习模型的训练往往对细节要求极高,而知道如何「调参」是一件非常重要的技能。许多超参数的调整是非常具体的问题(特别是关于 SGD 的超参数),而错误地调参会导致整个模型的性能大幅度下降。如果你在构建深度学习模型,那么就一定要记住:模型的细节是十分重要的,你需要当心任何看起来像深度学习那样的黑箱模型。
下面是我对原文模型出现问题的猜测:
幸好,RStudio 那些人太好了,他们刚刚发布了 Keras 的 R 接口:https://rstudio.github.io/keras/,这样我就可以完全用 R 语言重建我的 Python 代码了。我们之前使用 MLP 用 R 实现了就是这样:
我将这个放进了 Jeff 的 R 代码中,并重新生成了原来的图表。我对 Leekasso 进行了一点修改。原来的代码使用了 lm()(即线性回归),我觉得很奇怪,所以我切换成了 glm()(即 logistic 回归)。新的图表如下所示:
深度学习真是厉害了!一个类似的现象可能能够解释 Leekasso 的 Python 和 R 版本之间的不同。Python 版本的 logistic 回归使用了 liblinear 作为其解算器,我认为这比 R 默认的解算器更加可靠一点。这可能会有影响,因为 Leekasso 选择的变量是高度共线性的(collinear)。
这个问题太简单了,以致于不能说明什么有意义的东西。我重新运行了 Leekasso,但仅使用了***的预测器,其结果几乎完全等同于全 Leekasso。实际上,我确定我可以做出一个不使用数据的且具有高准确度的分类器。只需要取其中心像素,如果是黑色,则预测 1,否则就预测 0,正如 David Robinson 指出的那样:
David 还指出,大多数数字对(pairs of numbers)都可以由单个像素进行分类。所以,这个问题很可能不能给我们带来任何关于「真实」小数据场景的见解,我们应当对其结论保持适当的怀疑。
关于深度学习为什么有效的误解
最终,我想要重新回到 Jeff 在文中所提出的观点,尤其是这个声明:
问题在于:实际上仅有少数几个企业有足够数据去做深度学习,[…] 但是我经常思考的是,在更简单的模型上使用深度学习的主要优势是如果你有大量数据就可以拟合大量的参数。 |
这篇文章,尤其是***一部分,在我看来并不完整。很多人似乎把深度学习看成一个巨大的黑箱,有大量可以学习任何函数的参数,只要你有足够的数据。神经网络当然是极其灵活的,这种灵活性正是其成功原因的一部分,但不是全部,不是吗?
毕竟,这种超级灵活的模型在机器学习和统计学中有着 70 多年的发展历史。我并不认为神经网络是先验(priori)的,我也不认为比同等复杂度的其他算法更灵活。
下面是我对其成功所作的原因总结:
总结一下,我认为上述原因很好地解释了为什么深度学习在实践中奏效,打破了深度学习需要大量参数和数据的假设。***,本文并不是想说 Jeff 的观点错了,而是旨在提供一个不同的新视角,为读者带来启发。
原文:http://beamandrew.github.io/deeplearning/2017/06/04/deep_learning_works.html
【本文是专栏机构“机器之心”的原创译文,微信公众号“机器之心( id: almosthuman2014)”】
戳这里,看该作者更多好文
网页名称:小心训练模型,数据少也可以玩转深度学习
网站地址:http://www.shufengxianlan.com/qtweb/news21/81371.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联