是不是很惊奇?这看上去和原帖的分析完全不合!原帖中所分析的MLP,在我们的实验中,依然是在少量数据集中表示很差。然则我所设计的神经统??所应用的样本中,却竽暌剐很好的表示。那么这就引出了一个问题……
代码获取地址:
到底在我们的实验中产生了什么?
众所周知,深度进修模型的练习过程是一个精细活,知道若何“照顾”我们的收集是一个很重要的技能。过多的参数会导致某些特定的问题(尤其是涉及到SGD),假使没有选择好的话,那么将会导致很差的机能,以及误导性。当你在进行深度进修相干工作的时刻,你须要谨记下面的话:
模型的细节很重要,你须要当心黑箱调用那些任何看起来都像是deeplearning()的器械。
鼓励函数很重要,应用tanh作为鼓励函数的神经收集很难练习 。这就是为什么当我们应用Relu函数作为我们的激活函数,会有很大年夜进步的原因了。
须要一向检查参数的默认值 。Keras是一个很好的对象。因为Keras会将参数设置成它认为代表当前练习的最好的默认值。然则,你仍然须要确保你所选择的参数的值匹配你的问题。
不合的框架会导致不合的结不雅 。我曾测验测验回到原始的R代码,以期望获得最后的结不雅。然而,我无法大年夜h2o.deeplearning()函数中获得好的结不雅。我认为原因可能涉及到优化过程。它所应用的可能是Elastic Averaging SGD,这种办法会将计算安排到多个节点上,如许就会加快练习速度。我不清跋扈在仅有少量数据的情况下,这种办法是否会掉效。我只是有这个猜测罢了。对于h2o我并没有太多的应用经验,其他人也许知道原因。
荣幸的是,Rstudio的大好人们方才宣布了针对于Keras的R的接口。是以我可以在R的基本上,创建我的python代码了。我们之前应用的MLP类似于这个样子,如今我们用R说话将其实现。
来我们先来看一下正反方的不雅点:
我将这个代码改成了Jeff的R代码,并从新生成了原始的图形。我同样稍微修改了下Leekasso的代码。我发明本来的代码应用的是lm() (线性回归),我认为不是很好。所以我改成了glm()(逻辑回归)。新的图形如下图所示:
深度进修成功了!类似的现象可能注解python与R版本的Leekasso算法不合之处。Python版本的逻辑回归应用的是liblinear来实现,我认为如许做的话,会比R默认的实现方法加倍的结实,有更强的鲁棒性。因为Leekasso选择的变量是高度共线的,如许做也许会更好。
这个问题意义不凡:我从新运行了Leekasso,然则仅应用最高的猜测值,最终的结不雅和完全的Leekasso的结不雅一致。事实上,我认为我可以做出一个不须要数据的分类器,这个分类器会有很高的精确率。我们仅仅须要选择中间的像素,假若它是黑色的话,我们就可以认为它是1,不然的话就猜测是0。正如David Robinson所指出的:
David同样认为对于大年夜部分的数字对儿,我们只需应用一个像素就能分开。是以,那个帖子反竽暌钩的问题看上去并不克不及反竽暌功数据很少的情况。我们对他得出结论最好有所保存。
为什么深度进修会产生误会?
最后,我想在从新回想一下Jeff在他原帖中的不雅点,尤其是下面的陈述:
问题是,如今仅仅有很少的范畴可获得数据,并应用深度进修技巧进行处理……然则,我认为深度进修对于简单模型的优势在于深度进修可处理大年夜量的数据以及大年夜量的参数。
我并不是赞成这一段,尤其是最后一部分的不雅点。很多人认为深度进修是一个巨大年夜的黑箱。这个黑箱有海量的参数,只要你可以或许供给足够多的数据(这里足够多所代表的数据量在一百万和葛立恒数之间),你就能进修到任何的函数。很明显,神经收集极其的灵活,它的灵活性是神经收集之所以取获成功的部分原因。然则,这并不是独一的原因,对纰谬?
毕竟,统计学与机械进修对超等灵活模型的研究已经有70多年了。我并不认为神经收集相较于其他拥有同样复杂度的算法,会拥有更好的灵活性。
以下是我认为为什么神经收集会取获成功的一些原因:
1.任何办法都是为了取得偏介入方差的均衡:
须要说清跋扈的是,我认为Jeff实际上想要评论辩论的模型复杂度与误差/方差的均衡。假若你没有足够多的数据,那么应用简单的模型比拟于复杂模型来说可能会更好(简单模型意味着高误差/低方差,复杂模型意味着低误差/高方差)。我认为在大年夜部分情况下,这是一个很好的客不雅建议。然而……
2.神经收集有很多的办法来避免过拟合:
神经收集有很多的参数。在Jeff看来,假使我们没有足够多的数据来估计这些参数的话,这就会导致高方差。人们很清跋扈这个问题,并研究出了很多可降低方差的技巧。像dropout与随机梯度下结合,就会起到bagging算法的感化。我们只不过应用收集参数来代替输入变量。降低方差的技巧,比如说dropout,专属于练习过程,在某种程度上来说,其他模型很难应用。如许的话,即使你没有海量的数据,你依然可以练习巨大年夜的模型(就像是我们的MLP,拥有120000个参数)。
这是我认为最重要的部分。然而,我们却经常将这一点忽视掉落。神经收集具有模块化功能,它可以包含强大年夜的束缚前提(或者说是先验),如许就可以或许在很大年夜程度高低降模型的方差。最好的例子就是卷积神经收集。在一个CNN中,我们将图像的特点经由编码,然后输入到模型傍边去。例如,我们应用一个3X3的卷积,我们如许做实际上就是在告诉我们的收集局部接洽关系的小的像素聚聚会会议包含有效的信息。此外,我们可以将经由平移与扭转的然则不变的图像,经由过程编率攀来输入到我们的模型傍边。这都有助于我们降低模型对图片特点的误差。并可以或许大年夜幅度降低方差并进步模型的猜测才能。
推荐阅读
年编大年夜了过了能熬夜看 WWDC 的时代了,然则照样在小小宝的哭闹和妈妈大年夜人换尿布的催促中起了个大年夜早。于是算趁着“热乎”把 WWDC 2017 的 Keynote 看完了。和往年差>>>详细阅读
本文标题:谁说数据少就不能用深度学习?这锅俺不背!
地址:http://www.17bianji.com/lsqh/35680.html
1/2 1