构建深度学习系统的十条经验
深度学习是机器学习的一个子领域,它有着自己的独特研究对象。以下是我们在构建深度学习系统时总结的10条经验。这些经验虽然看似有些笼统,但他们确实是关于深度学习在结构化和非结构化数据领域里的应用。
作者:Carlos E. Perez
原文链接:https://medium.com/intuitionmachine/10-lessons-learned-from-building-deep-learning-systems-d611ab16ef66#.j0tn4dwpx
更多的专家会更好
通过使用更多的网络来进行推理和整合结果确实能够提高精确度。事实上,像DropOut这类技术就是建立“隐含聚合”的方法,就是建立共享权重的叠加网络的多个子集。
寻找具备丰富标记数据的问题
目前,只有当在一个受监督的上下文环境中,深度学习才能很好地工作。而最重要的一点就是每条规则大约需要1000个左右的样本。因此,当你需要解决的问题没有足够多的数据来进行训练时,那尝试寻找一个具有更多数据的中间问题来进行训练,然后用一个更简单的算法来处理这个中间问题的训练结果,从而解决最终的问题。
探索合成数据的方法
并不是所有的数据都已经为机器学习做好了准备和标记。许多情况下,你手头有的数据标记得并不那么理想。如果你可以加入来自不同数据源的数据来实现一个弱标记数据集合,那么这种方法会给你带来意想不到的效果。最著名的例子就是Word2Vec,其中的单词理解训练就是从恰好与该单词意思接近的其他单词开始的。
利用预先训练的网络
引导一个已经经过训练的网络在新的领域中进行训练,这种方法的效率也往往令人非常满意。这也是深度学习网络的一个突出特性。
不要忘记增加数据
数据通常会拥有一些人类能够意识到,而机器却永远发现不了的意义。一个简单的例子就是时间特征。从人类的角度来看,一星期中的某一天或一天中某个时间点可能是重要的属性,然而深度学习系统可能永远不能理解其中的重要性。因为对系统来说,时间这个概念从Unix诞生以来都是以秒来进行表述的。这就需要我们为深度学习系统添加新的时间数据来对其进行训练。
探索不同的正则化
L1和L2正则化并不是唯一的正则化。通过观察每个层次来探索不同类型的正则化。
拥抱随机性
我们有许多技术能够在训练之前对学习网络进行初始化。事实上,当你只训练学习网络的最底层,而其上层多数是随机产生的话,你能得到更出色的效果。这种技术将加快超调探索的速度。
不要只注重深度学习
很多深度学习的研究人员热衷于只在深度学习领域内进行研究。然而事实是深度学习离不开与外部技术的结合。比如,如果离开了蒙特卡洛树搜索,AlphaGo就不会如此成功。
避免分布式
尽量避免同时训练多台机器(除了超级参数调优)。训练单台机器是最有效的方法。
卷积网络功能强大 且不单单对图片数据而言
卷积网络显然是深度学习领域中最成功的网络。更重要的是,它不仅能用于处理图像数据,还可以使用它作用于其他类型的数据(如,声音,时间序列和文本数据)
以上就是我想分享的经验。当然还有很多其他的经验这里没有提到。如果你在工作中遇到了,也请分享给大家。
还可以通过这个链接找到更多相关详细信息http://www.deeplearningpatterns.com