构建深度神经网络,我有20条「不成熟」的小建议

开发者盛宴来袭!7月28日51CTO首届开发者大赛决赛带来技术创新分享

在我们的机器学习实验室中,我们已经在许多高性能的机器上进行了成千上万个小时的训练,积累了丰富的经验。在这个过程中,并不只有电脑学习到了很多的知识,事实上我们研究人员也犯了很多错误,并且修复了很多漏洞。

在本文中,我们将根据自身经验(主要基于 TensorFlow)向大家提供一些训练深度神经网络的实用秘诀。有些建议可能对你来说可能已经很熟悉了,但是其他人可能并不太了解。另外还有些建议可能并不适用,甚至可能对于特定的任务来说是不好的建议,所以请谨慎使用!

这些都是一些广为人知的方法,我们也是站在了巨人的肩膀上!本文的目的只是高屋建瓴地对如何在实践中使用它们进行总结。

通用秘诀

使用 ADAM 优化器。它确实很有效,相对于较传统的优化器(如原版梯度下降),我们更喜欢使用 ADAM。在 TensorFlow 环境下使用 ADAM 时,请注意:如果你想要保存和恢复模型权重,请记住在设置完 AdamOptimizer 后设置 Saver,这是因为 ADAM 也有需要恢复的状态(即对应于每个权重的学习率)。

ReLU 是最好的非线性(激活函数),这就好比 Sublime 是最好的文本编辑器。但说实话,ReLU 确实是运行速度最快、最简便的,而且令人惊讶的是,它们在工作时梯度并不会逐渐减小(从而能够防止梯度消失)。尽管 sigmoid 是一个常用激活函数,但是它在 DNN 中传播梯度的效果并不太好。

不要在输出层使用激活函数。这应该是显而易见的,但是如果你通过一个共用的函数构建每一层,那这可能是一个很容易犯的错误:请确保在输出层不要使用激活函数。

为每一层添加一个偏置项。这是机器学习的入门知识:本质上,偏置项将一个平面转换到最佳拟合位置。在 y=mx+b 式中,b 是偏置项,使直线能够向上或向下移动到最佳的拟合位置。

使用方差缩放初始化。在 TensorFlow 中,该方法写作 tf.contrib.layers.variance_scaling_initializer()。根据我们的实验,这种初始化方法比常规高斯分布初始化、截断高斯分布初始化及 Xavier 初始化的泛化/缩放性能更好。粗略地说,方差缩放初始化根据每一层输入或输出的数量(在 TensorFlow 中默认为输入的数量)来调整初始随机权重的方差,从而帮助信号在不需要其他技巧(如梯度裁剪或批归一化)的情况下在网络中更深入地传播。Xavier 和方差缩放初始化类似,只不过 Xavier 中每一层的方差几乎是相同的;但是如果网络的各层之间规模差别很大(常见于卷积神经网络),则这些网络可能并不能很好地处理每一层中相同的方差。

白化(归一化)输入数据。在训练中,令样本点的值减去数据集的均值,然后除以它的标准差。当网络的权重在各个方向上延伸和扩展的程度越小,你的网络就能更快、更容易地学习。保持数据输入以均值为中心且方差不变有助于实现这一点。你还必须对每个测试输入也执行相同的归一化过程,所以请确保你的训练集与真实数据类似。

以合理地保留动态范围的方式对输入数据进行缩放。这个步骤和归一化有关,但是应该在归一化操作之前进行。例如,在真实世界中范围为 [0, 140000000] 的数据 x 通常可以用「tanh(x)」或「tanh(x/C)」来进行操作,其中 C 是某个常数,它可以对曲线进行拉伸,从而在 tanh 函数的动态倾斜(斜率较大)部分对更大输入范围内的数据进行拟合。尤其是在输入数据在函数的一端或者两端都不受限的时候,神经网络将在数据处于 (0,1) 时学习效果更好。

一般不要使用学习率衰减。在随机梯度下降(SGD)中,降低学习率是很常见的,但是 ADAM 天然地就考虑到了这个问题。如果你真的希望达到模型性能的极致,请在训练结束前的一小段时间内降低学习率;你可能会看到一个突然出现的很小的误差下降,之后它会再次趋于平缓。

如果你的卷积层有 64 或 128 个滤波器,这就已经足够了。特别是对于深度网络来说,比如 128 个滤波器就已经很多了。如果你已经拥有了大量的滤波器,那么再添加更多的滤波器可能并不会提升性能。

池化是为了变换不变性(transform invariance)。池化本质上是让网络学习到图像「某个部分」的「一般概念」。例如,最大池化能够帮助卷积网络对图像中特征的平移、旋转和缩放具备一定的鲁棒性。

神经网络的调试

如果网络学习效果很差(指网络在训练中的损失/准确率不收敛,或者你得不到想要的结果),你可以试试下面的这些秘诀:

相关推荐
新闻聚焦
猜你喜欢
热门推荐
  • 微软AI面试题有多难?这里有一份样卷

      究竟什么样的AI人才能被微软这样的巨头聘用呢?今天,文摘君就淘来了几道微软AI 面试题,同时给出了最基本的解答......

    06-25    来源:澎湃新闻网

    分享
  • 全球最聪明的大脑怎么看AI?他们预测了

      2017年AI领域取得了诸多成果。2018年AI又将何去何从?以下是来自世界顶级研究人员和行业领军人物对2018年AI领域发展作......

    02-20    来源:虎嗅网

    分享
  • 2017JavaScript框架战报 - React分战场

      我们来看看与React有关的软件包的生态系统。当Facebook构建React时,就有许多来自开源社区的第三方软件包。为提供完......

    02-27    来源:湖北新闻网

    分享
  • 小白学数据:教你用Python实现简单监督学

      监督学习作为运用最广泛的机器学习方法,一直以来都是从数据挖掘信息的重要手段。即便是在无监督学习兴起的近......

    03-05    来源:今日头条

    分享
  • 现代编程语言Swift、Kotlin等十大有趣功能

      最近学习了一些现代编程语言,比如Reason,Swift,Kotlin和Dart。这些编程语言提供了许多新功能,本文主要分享了我认......

    04-29    来源:祁东新闻网

    分享
  • 领域场景分析的6W模型

      组成场景的要素常常被称之为6W模型,即描写场景的过程必须包含Who,What,Why,Where,When与hoW这六个要素。......

    04-30    来源:砍柴网

    分享
  • 开源应用服务器WildFly 12发新季度交付模式

      WildFly 12 Final版本现在已经可以下载了,WildFly是一款灵活的开源应用服务器,支持开发人员构建轻量级应用程序。支持......

    05-10    来源:青岛新闻网

    分享
  • 基于Spring Cloud的微服务落地

      微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。但如果要将微服务架构运用到生产项目上,......

    06-04    来源:广西新闻网

    分享
  • 为什么阿里工程师纷纷在内网晒代码?

      前阵子,在阿里一个小黑屋里,5名对代码有着极致追求的工程师参与阿里代码领域最高荣誉“多隆奖”的最终角逐。......

    06-08    来源:四川新闻网

    分享
  • 央企Car Hacking Team诚招各路安全大咖

      传统安全行业做腻了?这里有新鲜、有趣、好玩的岗位等你来挑战!“数”驱产业变革“智”领汽车未来中国汽车技......

    02-24    来源:西安新闻网

    分享
返回列表
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。