“AI 技术+人才”如何成为企业增长新引擎?戳此了解>>> 了解详情
写点什么

机器学习研究的七个迷思

  • 2019-03-22
  • 本文字数:5709 字

    阅读完需:约 19 分钟

机器学习研究的七个迷思

作者 Oscar Chang 总结了机器学习研究中的七大迷思,每个问题都很有趣,也可能是你在研究机器学习的过程中曾经遇到过的“想当然”问题。AI 前线对这篇文章进行了编译,以飨读者。

迷思之一:TensorFlow 是张量操作库

它实际上就是一个矩阵操作库,这一区别还是很明显的。


在由 Laue 等人在 NeurIPS 2018 发表的论文《Computing Higher Order Derivatives of Matrix and Tensor Expressions》(《计算矩阵和张量表达式的高阶导数》)中,作者证明了他们基于实际张量演算的自动微分库具有更为紧凑的表达式树。这是因为张量微积分使用了索引表示法,这导致了以同样的方式处理正向模式和反向模式。


论文链接:https://papers.nips.cc/paper/7540-computing-higher-order-derivatives-of-matrix-and-tensor-expressions.pdf


相比之下,矩阵演算为了符号方便,隐藏了索引,这通常会引起自动微分表达式树过于复杂。


考虑矩阵乘法 C=AB,对于正向模式我们有



,而反向模式我们有



。为了正确地进行乘法运算,我们必须注意乘法的顺序和转置的使用。值得注意的是,对于机器学习实践者来说,这是一个困惑点;但从计算上来说,这是程序的开销。


下面是另一个例子,显然并不那么琐碎:c=det(A)。对于正向模式,我们有



,对于反向模式有



。在这种情况下,显然不可能对两种模式使用相同的表达式树,因为它们由不同的操作组成。


一般来说,TensorFlow 和其他库(例如 Mathematica、Maple、Simpy、ADOL-C、TAPENADE、TensorFlow、Theano、PyTorch、HIPS autograd)实现自动微分的方式会导致正向模式和反向模式的表达式树不同,且效率低下。张量演算由于索引表示法的缘故,使得乘法具有可交换性,从而方便地避免了这些问题。(欲了解有关其工作原理的更多信息,请阅读实际论文。)


作者在三个不同的问题上,测试了他们的反向模式自动微分(亦即反向传播)的方法,并测量了计算 Hessians 所需的时间。



第一个问题涉及优化像



这样的二次函数。第二个问题解决逻辑回归,第三个问题解决矩阵分解问题。


在 CPU 上,他们的方法比 TensorFlow、Theano、PyTorch 和 HIPS autograd 等流行的自动微分库快两个数量级。



在 GPU 上,他们观察到了更高的加速,比这些库的性能足足高了三个数量级。

意义:

利用现有的深度学习库来计算二次函数或更高函数的导数比实际所需的要昂贵得多。这包括计算像 Hessian 这样的一般四阶张量(如 MAML 和二价牛顿优化)。幸运的是,二次函数在深度学习中并不常见。但它们在经典机器学习中很常见:支持向量机的对偶、最小二乘回归、LASSO、高斯过程等。

迷思之二:图像数据库是自然环境下的真实图像代表

我们总认为,在物体识别方面上,神经网络要比人类做得更好。但这并不是真的。在像 ImageNet 这样的特定图像数据集上,它们是有可能比人类表现得更好,但考虑到在自然环境发现的真实图像,它们在识别物体方面肯定不会比普通成年人强。这是因为在当前的图像数据集中发现的图像,实际上并不是按照从自然环境中所有可能出现的图像的集合相同的分布绘制的。


Torralba 和 Efros 在 CVPR 2011 发表的一篇旧论文《Unbiased Look at Dataset Bias》(《站在公正立场对待数据集偏差》)中,作者提出,通过观察是否有可能训练分类器来识别给定图像中的数据集,来检查 12 个常用图像数据集中的数据集偏差。


论文链接:https://ieeexplore.ieee.org/document/5995347



随机选对的几率是 1/12≈8%,而他们的实验室成员的几率超过了 75%



他们在 HOG 特征上训练了一个支持向量机,发现他们的分类器的性能为 39%,远远高于随机选对的几率。如果同样的实验今天用最先进的卷积神经网络来重复,我们可能会看到分类器性能的进一步提高。


如果图像数据集真正代表了自然环境下的真实图像,我们应该不能区分给定图像来自哪个数据集。



但由于数据中存在偏差,使得每个数据集都与众不同。例如,ImageNet 数据集中就有许多赛车,但不能说代表了一般汽车的“帕拉图式”概念。



作者进一步通过测量在数据集上训练的分类器在其他数据集上的表现,来判断数据集的价值。根据这一指标,LabelMe 和 ImageNet 是偏差最小的数据集,在一篮子货币中的得分为 0.58。这些值都小于 1,这意味着在不同的数据集上进行训练总是得到较低的测试性能。在没有数据集偏差的理想情况下,其中一些值应该大于 1。


作者悲观地总结道:


那么,当前数据集在用于训练将在现实世界中部署的算法的价值是什么呢?答案可以概括为“总比什么都没有好,但也好不到哪里去。”

迷思之三:机器学习研究人员不使用测试集进行验证

在 Machine Learning 101 课程中,我们学习如何将数据集拆分为训练集、验证集和测试集。在训练集上训练并在验证集上评估的模型的性能,有助于机器学习实践者调整他的模型,以最大限度提高模型在实际使用的性能。而测试集应该一直保留到实践者完成调优,以便对模型在实际使用中的实际性能提供无偏估计。如果实践者通过在训练或验证过程中使用测试集来作弊,他就冒着将模型过拟合到数据集中固有偏差的风险,而这些偏差不会在数据集之外泛化。


在竞争激烈的机器学习研究领域中,新的算法和模型经常会根据它们在测试集中的表现进行评估。因此,研究人员几乎没有理由撰写或提交论文,提出测试性能较差的方法。这实际上意味着,机器学习研究社区作为一个整体,正在使用测试集进行验证。


这种作弊的影响是什么?



在由 Recht 等人在 ArXiv 2018 发表的论文《Do CIFAR-10 Classifiers Generalize to CIFAR-10?》(《是否将 CIFAR-10 分类器推广到 CIFAR-10?》)中,作者通过为 CIFAR-10 创建新的测试集来研究这一点。他们通过解析 Tiny Images 存储库中的图像来实现,就像在原始数据集收集过程中所做的那样。


论文链接:https://arxiv.org/pdf/1806.00451.pdf


他们之所以选择 CIFAR-10,是因为它是机器学习中使用最广泛的数据集之一,是 Neurips 2017 第二最流行的数据集(仅次于 MNIST)。CIFAR-10 的数据集创建过程中也有很好的文档记录和透明性,大型 Tiny Images 存储库具有足够细粒度的标签,可以复制新的测试集,同时又可最大限度地减少分布偏移。



他们发现,在各种不同的神经网络模型中,从旧的测试集到新的测试集,准确率有显著的下降( 4%~15% )。然而,每个模型性能的相对排名仍然相当稳定。



一般来说,与性能较低的模型相比,性能较高的模型在准确率方面的下降较小。这很令人振奋。因为它表明,随着研究界发明出更好的机器学习模型和方法,由作弊导致的泛化损失——至少在 CIFAR-10 的情况下,将会变得更微弱。

迷思之四:每个数据点都用来训练神经网络

传统观点认为,数据是“新的石油”。我们拥有的数据越多,就越能更好地训练我们的样本——这就是效率低下、过度参数化的深度学习模型。


在 Toneva 等人发表的《AN Empirical Sutdy of Example Forgeting During Deep Neural Network Learning》(《深度神经网络学习中遗忘实例的实证研究》)中,作者证明了几种常见的小型图像数据集中的显著冗余性。令人震惊的是,CIFAR-10 中的 30% 的数据点可以删除,而测试准确率并不会出现太大的波动。


论文链接:https://openreview.net/pdf?id=BJlxm30cKm



当神经网络在时间 t+1 进行错误分类时,就会发生遗忘事件,因为在时间 t 已经进行了准确分类,我们就将时间流视为对网络进行随机梯度下降更新的次数。为了便于跟踪遗忘事件,每次更新随机梯度下降时,作者只在小批量的示例上运行他们的神经网络,而不是在数据集中的每个示例上运行。未经历遗忘事件的示例被称为难忘的示例。


他们发现,91.7% 的 MNIST、75.3% 的 permuledMNIST、31.3% 的 CIFAR-10 和 7.62% 的 CIFAR-100 包含了难忘的示例。这很有直观的意义,因为图像数据集的多样性和复杂性的增加会导致神经网络忘记更多的示例。



遗忘的示例似乎比难忘的示例表显出更多的不寻常和独特的特征。作者将它们比作支持向量机中的向量,因为它们似乎划分了决策边界的轮廓。



相比之下,难忘的示例主要是对冗余信息进行编码。如果我们根据它们的难忘性对这些示例进行排序,就可以通过删除最难忘的示例来压缩数据集。


在 CIFAR-10 上,可以删除 30% 的数据集而不影响测试准确率。而删除 35% 则会导致准确度下降 0.2% 。如果这 30% 是随机选择的而不是通过难忘性选择的,那么删除它将会导致测试准确度损失 1% 左右。



同样,在 CIFAR-100 上,可以删除 8% 的数据集而不会影响测试的准确性。


这些研究结果表明,神经网络训练中存在显著的数据冗余,就像在支持向量机训练中一样,在不影响模型决策的情况下,可以去除非支持向量。

意义:

如果我们可以在训练开始之前确定哪些示例是难忘的,那么我们就可以通过删除这些示例来节省空间,并通过不对它们进行神经网络训练来节省时间。

迷思之五:我们需要(批)归一化来训练非常深的残差网络

很长一段时间来,人们一直认为“从随机初始化参数开始,通过梯度下降,训练深度网络直接优化感兴趣的受监督目标(例如正确分类的对数概率),效果并不是很好。”


有关详情请见 Pascal Vincent、Yoshua Bengio 等人发表的论文《Stacked Denoising Autoencoders: Learning Useful Representationsina Deep Network with a Local Denoising Criterion》(《堆叠式去噪自动编码器:使用局部去噪标准学习深度网络中的有用表示》):http://www.jmlr.org/papers/volume11/vincent10a/vincent10a.pdf


从那时起,涌现了大量聪明讨巧的随机初始化方法、激活函数、优化技术和其他架构创新,如残差连接,使得利用梯度下降训练深度神经网络变得更加容易。


但真正的突破来自于批归一化(以及其他后续归一化技术)的引入,这显示了深度网络每一层激活的大小,以减轻梯度消失和爆炸的问题。


在最近的由 Zhang 等人在 ICLR 2019 发表的论文《Fixup Initialization: Residual Learning Without Normalization》(《Fixup 初始化:没有归一化的残差学习》)中,论文表明,实际上可以使用普通的随机梯度下降法来训练一个 10000 层深度网络,而无需采用任何归一化。


论文链接:https://arxiv.org/pdf/1901.09321.pdf



作者在 CIFAR-10 上对一个轮数内不同深度的残差网络训练进行了比较,发现虽然 100 层的标准初始化方法失败了,但 10000 层的 Fixup 和批归一化都取得成功了。



他们进行了一项理论分析,为了证明“某些层的梯度范数期望值较低,由一个随网络深度无限增大的数量限定。”也就是爆炸梯度问题。


为防止这种情况,Fixup 中的关键思想是通过一个依赖于 ML 的因子来缩放 M 层中每 L 个残差分支的权重。



Fixup 能够在 CIFAR-10 上训练具有 1110 层的深度残差网络,具有较高的学习率,测试性能与具有批归一化的相同网络架构相当。




作者还进一步展示了在没有对 ImageNet 数据集和英语 - 德语机器翻译任务进行任何归一化的情况下使用 Fixup 网络的比较测试结果。

迷思之六:注意力>卷积

在机器学习社区中,有一种想法越来越流行,那就是注意力机制是卷积之外的一种更好的选择。Vaswani 等人指出,“可分离卷积的计算成本等于自我注意层和逐点前馈层的组合。”


有关这一想法可见:Ashish Vaswani、Yoshua Bengio 等人发表的论文《Attention Is All You Need》(《你所需要的是注意力》):https://arxiv.org/abs/1706.03762


即使是最先进的生成对抗网络也发现,在持续建模、多尺度依赖性方面,自我注意要优于标准卷积。


详见:Han Zhang、Ian Goodfellow 等人发表的论文《Self-Attention Generative Adversarial Networks》(《自我注意生成对抗网络》):https://arxiv.org/abs/1805.08318


Wu 等人在 ICLR 2019 发表的论文《Pay Less Attention with Lightweight and Dynamic Convolutions》(《通过轻量级和动态卷积减少注意力》)中,在持续建模依赖关系模型中,对自我注意的参数效率和有效性提出质疑,并提出卷积的新变体,这些变体在一定程度上受到了自我注意的启发,具有更高的参数效率。


论文链接:https://openreview.net/pdf?id=SkVhlh09tX



轻量级卷积是深度可分离的,在时间维度上进行 softmax 归一化,在信道维度上共享权重,并在每个时间步骤重复使用相同的权重(如递归神经网络)。动态卷积是轻量级卷积,在每个时间步骤使用不同的权重。


这些技巧使轻量级和动态卷积比标准的不可分离卷积高出几个数量级。




作者表明,这些新的卷积在机器翻译、语言建模和抽象概括任务中匹配或超过了自我注意的基线,同时使用了相当数量或更少数量的参数。

迷思之七:显著性图是解释神经网络的可靠方法

虽然神经网络通常被认为是黑盒,但是人们已经做了许多尝试来解释它们。显著性图或其他类似的方法,将重要性分数分配给特征或训练示例,是最流行的解释形式之一。


人们很容易得出结论,给定图像之所以被分类到某种分类,原因是图像的特定部分对于神经网络在进行分类时的决策非常重要。有几种方法可以计算这种显著性图,通常利用神经网络对给定图像的激活函数以及流经网络的梯度。


由 Ghorbani 等人在 AAAI 2019 发表的论文《Interpretation of Neural Networks is Fragile》(《神经网络的解释是脆弱的》),作者表明,他们可以对给定的图像引入难以察觉的扰动,以扭曲其显著性图。


论文链接:https://arxiv.org/pdf/1710.10547.pdf



因此,君主斑蝶之所以被归类为君主斑蝶,不是因为它翅膀上的图案,而是因为背景中一些不重要的绿叶。



高维图像通常位于深度神经网络构建的决策边界附近,因此,它们容易受到对抗性攻击。虽然对抗性攻击会使图像偏离决策边界,但对抗性解释攻击会使图像沿着决策边界的轮廓移动,同时仍然保持在同一决策区域内。



作者采用的基本方法是修改 Goodfellow 的快速梯度符号法,这是最早引入的有效对抗攻击方法之一。这表明,其他最近的、更复杂的对抗性攻击也可用于攻击神经网络解释。




意义:

随着深度学习在医学成像等高风险应用中变得越来越普遍,我们在解释神经网络做出的决策时必须小心谨慎,这一点很重要。例如,如果卷积神经网络能够识别出磁共振成像图像中的一个点是恶性肿瘤的话,那固然是一件好事,但如果这些结果都是基于脆弱的解释方法,那么,它们就不该被人们信任。


原文链接:


https://crazyoscarchang.github.io/2019/02/16/seven-myths-in-machine-learning-research/#fn:fn-sagan


更多内容,请关注 AI 前线



公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2019-03-22 12:003326
用户头像

发布了 520 篇内容, 共 236.4 次阅读, 收获喜欢 1543 次。

关注

评论

发布
暂无评论
发现更多内容

Kafka-on-Pulsar 的前世今生,新秀 Pulsar 到底好在哪?

Java 程序员 后端

Kubernetes任务调用Job与CronJob及源码分析(1)

Java 程序员 后端

Kurento实战之一:KMS部署和体验,应届毕业生java面试准备

Java 程序员 后端

JMM - Java 内存模型,java读写锁源码分析

Java 程序员 后端

架构实战营 毕业总结

脉醉

kubebuilder实战之三:基础知识速览,mybatis运行原理步骤

Java 程序员 后端

Java高手是怎样炼成的?阿里P8技术大牛这份手写笔记告诉你答案!

Java 程序员 后端

JUnit5学习之三:Assertions类,java微服务架构训练营

Java 程序员 后端

Kubernetes 常用命令大全,震撼来袭免费下载

Java 程序员 后端

Java高级特性之 IO流(1),三面蚂蚁金服(交叉面)定级阿里P6

Java 程序员 后端

JVM内存溢出分析:堆内存溢出+虚拟机,BTAJ大厂最新面试题汇集

Java 程序员 后端

【架构训练营】毕业总结

zclau

JVM篇:对象的深度剖析,mybatis入门程序

Java 程序员 后端

Kafka性能调优实战:同等资源配置性能提升20几倍的秘诀

Java 程序员 后端

架构营模块二作业

GTiger

架构实战营

kubernetes部署metrics-server,linux服务器教程

Java 程序员 后端

Contour-v1.19.1发布

远鹏

golang Kubernetes cncf envoy contour

JDK的前世今生:细数 Java5 - 15 的那些经典特性

Java 程序员 后端

JUnit5学习之一:基本操作,菜鸟教程java在线编辑器下载

Java 程序员 后端

Kubernetes官方java客户端之六:OpenAPI基本操作

Java 程序员 后端

leetcode 数组练习,java入门书籍

Java 程序员 后端

模块二作业

小鹿

Java高级特性之 IO流,java面试题高级

Java 程序员 后端

java面试题,mybatis原理和实现机制

Java 程序员 后端

JVM总体概述,java高级开发面试经验

Java 程序员 后端

Java面试题超详细整理《多线程篇》,mongodb教程导入外部数据

Java 程序员 后端

【架构训练营】毕业设计

zclau

Kotlin之DSL,java面试写代码

Java 程序员 后端

linux常用命令(一),阿里java面试算法

Java 程序员 后端

Java面试题超详细整理《Spring篇》,Tencent后台开发Java岗二面

Java 程序员 后端

Jedis入门教程,java入门课程百度网盘

Java 程序员 后端

机器学习研究的七个迷思_AI&大模型_Oscar Chang_InfoQ精选文章