微信号:almosthuman2014

介绍:人与科技的美好关系

深度 | 在测试阶段使用Dropout获取输出的概率分布,让深度学习系统更聪明(附论文)

2016-07-04 17:16 机器之心

选自 Tombone`s Computer Vision Blog

作者:Tomasz Malisiewicz

机器之心编译

参与:Rick、吴攀、李亚洲


机器学习系统的可解读性和性能不能兼顾,通过在测试阶段使用 Dropout 将原始神经网络输出转化为概率分布,可以在提供预测的同时提供置信度,从而理解预测结果的准确度。


量子力学中海森堡的不确定性原理认为:粒子的位置和动量测量精度有一个基本限制。在机器学习系统中,也有一个有关可解释性(interpretability)及性能(performance)的类似原则。使用手工制作的或浅度的机器学习模型时,你可以毫无困难地理解其中的工作部件,但你很少能得到令人满意的结果。或者你可以使用黑箱式的深度神经网络并享受其杰出的性能表现。今天我们将介绍一个让我们的深度黑箱问题更好理解一点的简单而有效的技巧。这个方法是将神经网络的输出转换成相应概率,且不用牺牲性能,并能最小化计算量。



可解释性 vs 性能:深度神经网络在大多数的计算机视觉任务中表现良好,也是出了名地难以解读。


理解深度神经网络的愿望已引发了一系列神经网络可视化方面的研究,然而实际情况往往是我们不得不将深度学习系统作为黑箱来处理。但这仅仅因为我们无法领会我们最喜欢的深度模型的内部运行机制,并不代表我们不能从深度学习系统中得到更多。


存在一个将黑箱神经网络输出升级为概率分布的简单方法。


概率方法在提供预测的同时还提供了置信度(confidence),即「不确定性」程度,并可以使几乎任何深度学习系统变得更聪明。对于机器人应用或任何必须基于深度学习系统的输出进行决策的软件来说,提供有意义的不确定性具有真正的变革性的力量。



将 Dropout 应用于深度神经网络就好像在对大脑做偶然电击


其中关键的组分是 dropout,这是来自 Hinton 自己的一种抗过拟合(anti-overfitting)深度学习技巧(出现在 Krizhevsky 2012 年的开创性论文中)。Dropout 在训练过程中将一些权重设置为 0,减少特征的共适应(co-adaptation),从而提升归纳效果。


不用 dropout,让一个普通深度的网络在训练集上达到 100%的精度简直太容易了。


基本共识是:一个未正则化的网络(无 dropout)在记忆训练集上表现非常好。要简单了解 dropout,我强烈推荐 Hugo Larochelle 的 Dropout for Deep learning 课程,这是一个优秀的关于 dropout 的机器学习介绍性视频课程。



Geoff Hinton 的 dropout 课程是一个很棒的入门课程,他主要将 dropout 作为一种整体方法进行解读。如果你正在寻找 dropout 领域的新研究思路,则有必要深入理解一下 Hinton 的阐述。



然而尽管 dropout 通常在训练时使用,现在我们将着重观察 dropout 在测试时的应用,它是将原始神经网络输出转化为概率分布的最简单的方法之一。这种概率式的「免费升级」通常会改善分类结果,并且它还提供了一个有意义的不确定性的概念,而后者往往会在深度学习系统中被忽略。


这个思路很简单:要想估计出预测平均值和预测不确定性,只需运用 dropout 来收集随机前向传播通过模型的结果。


如何使用 dropout:2016 年版


1. 以一个中等大小的网络开始

2. 关闭 dropout 并不断增大你的网络,直到完全适合数据

3. 然后打开 dropout 来训练

4. 测试时间打开 dropout,运行 T 次网络得到 T 个样本

5. 样本均值即是输出,方差就是不确定性程度


记得吗?使用更多的样本会增加测试过程中的计算时间,除非你善于重新使用网络中的部分计算。请注意如果你只在网络接近末端的地方使用 dropout,则你可以重新使用大部分的计算。如果你不满意得到的不确定性估计,可考虑在测试时间添加更多 dropout 层。鉴于你已经有了一个预先训练好的网络,实验测试时间的 dropout 层就会很简单。


贝叶斯卷积神经网络


为了得到真正的贝叶斯的深度网络参数,我们不能只学习一套参数 w,而是推断一个给定数据的权重分布 p(w|X,Y)。训练成本已经相当高昂,需要大量数据集和昂贵的 GPU。


贝叶斯学习算法在理论上可以提供好得多的 ConvNets 参数估计,而且我可以肯定谷歌的一些朋友已经开始了这方面的工作。


但是今天我们不会详细讨论这样的完全贝叶斯的深度学习系统,而只谈将模型预测 y「升级」为 p(y|x,w) 的系统。换言之,只有输出得到了概率解读的网络。


一个使用测试时间 dropout 的优秀深度学习计算机视觉系统来自于剑桥大学最新的 SegNet 技术。SegNet 方法为密集语义分割(dense semantic segmentation)引入了一种编码器-解码器(Encoder-Decoder)框架。最近,SegNet 还包含了一个在测试时间使用 dropout 的贝叶斯扩展来提供不确定性估计。由于该系统提供了一个密集逐像素标签(dense per-pixel labeling),置信度被可视化为逐像素热图(per-pixel heatmap)。分割系统表现不好?那就看看置信度热图吧!



贝叶斯 SegNet. 一种完全卷积神经网络架构,其使用 dropout 能提供逐像素级的不确定性估计。


该贝叶斯 SegNet(Bayesian SegNet)的作者测试了不同的 dropout 安置策略,并确定在靠近编码器-解码器瓶颈(encoder-decoder bottleneck)处安置一些 dropout 层比简单地在靠近输出层的地方使用 dropout 更好。有趣的是,贝叶斯 SegNet 在 vanilla SegNet 的基础上提升了准确度。它们的置信图(confidence map)在对象边缘附近表现出了很高的不确定性,但不同的测试时间 dropout 方案可以提供一个更多样化的不确定性估计集合。


  • 论文:贝叶斯 SegNet:用于场景理解的深度卷积编码器-解码器架构中的模型不确定性(Bayesian SegNet: Model Uncertainty in Deep Convolutional Encoder-Decoder Architectures for Scene Understanding )

  • 作者:Alex Kendall,Vijay Badrinarayanan,Roberto Cipolla


在进行评估时,置信度(confidence)非常有用,因为这并非提供所有图片中所有像素的单个平均结果,而是我们可以通过预测中的整体置信度对这些像素和/或图像进行分类整理。当估计前 10% 最有置信度的像素时,我们应该会预计得到显著更高的表现。比如,贝叶斯 SegNet 方法在 SUN RGBD 数据集上实现了 75.4% 的整体准确度,而在该测试集中置信度最高的 10% 的数据上则有 97.6% 的惊人表现(这是贝叶斯 SegNet 的作者告诉我个人的)。这种按置信度分类的评估方法在 PASCAL VOC 对象检测挑战赛上得到了普及,precision/recall 曲线在其中成为了常态。不幸的是,随着研究界转向对大规模分类的研究,置信度的主张就被放到了一边。而且,一直到现在也是这样。


理论上的贝叶斯深度学习


建模不确定性的深度网络是真正有意义的机器学习系统。它让我们可以不必要真的去理解一个深度网络的神经元处理图像特征的方式,就可以信任该系统能做出决策。只要该模型提供不确定性估计,我们就将知道模型何时会陷入困境。这在当你的网络所获取的输入远远不同于训练数据时显得尤其重要。



高斯过程:一种内置有不确定性建模的机器学习方法


在最近一篇 ICML 2016 论文中,Yarin Gal 和 Zoubin Ghahramani 开发了一种新的理论框架,该框架可将深度神经网络中的 dropout 训练转换成高斯过程中的近似贝叶斯推理(approximate Bayesian inference)。Gal 的论文给出了对高斯过程和 dropout 之间链接的完整理论处理,并开发了在深度学习中用于表征不确定性的必需工具。他们展示了一个带有任意深度和非线性的神经网络,其中的每个权重层之前都应用了 dropout;他们证明该网络在数学上等同于概率深度高斯过程的一个近似。我还没见到过在每层之间都使用 dropout 的研究者,所以这种理论和实践的差异表明更多的研究是必要的。


  • 论文1:用作贝叶斯逼近的 Dropout:在深度学习中表征模型不确定性(Dropout as a Bayesian Approximation: Representing Model Uncertainty in Deep Learning )

  • 作者:Yarin Gal, Zoubin Ghahramani


  • 论文2:循环神经网络中一种基于理论的 Dropout 应用(A Theoretically Grounded Application of Dropout in Recurrent Neural Networks)

  • 作者: Yarin Gal



测试时间 dropout 被用来为深度学习系统提供不确定性估计


总的来说,当涉及到深度学习系统时,我们可能永远也无法同时在可解读性和性能上同时获得良好表现。但是,我们都同意:在预测的同时提供置信度或不确定性估计总是很好的。Dropout——用在深度模型中对付过拟合的非常单一的正则化技巧——又再一次出现了。有时候你只需要为你的输入增加一些随机变量,然后在许多尝试的基础上得到结果的平均。Dropout 不仅能让你摆弄网络输入,而且还能让你摆弄整个架构。


我确实想知道 Yann LeCun 对贝叶斯卷积神经网络的看法……上次我听说,他对取样过敏。



©本文由机器之心编译,转载请联系本公众号获得授权

✄------------------------------------------------

加入机器之心(全职记者/实习生):hr@almosthuman.cn

投稿或寻求报道:editor@almosthuman.cn

广告&商务合作:bd@almosthuman.cn


点击「阅读原文」,下载文中论文↓↓↓

 
机器之心 更多文章 深度 | Google Brain研究员详解聊天机器人:面临的深度学习技术问题以及基于TensorFlow的开发实践 深度|让机器理解语言的魔法师——揭秘Facebook语言技术小组 深度 | 国际人工智能联合会议 IJCAI 2016开幕在即:九大奖项新鲜出炉(附获奖论文) 重磅 | Yoshua Bengio最新两场讲演:表征的深度监督学习与深度生成模型(附PPT) 深度 | 时薪低于20美元的大部分工作将被机器取代,需基于两大原则制定就业政策
猜您喜欢 Web 数据存储总结 python编程规范 黑科技,Python 脚本帮你找出微信上删除你好友的人 App架构设计经验谈:技术选型