深度学习领域有哪些瓶颈?
作者:量子位
链接:https://www.zhihu.com/question/40577663/answer/729741077
来源:知乎
一片欣欣向荣背后,深度学习在计算机视觉领域的瓶颈已至。
提出这个观点的,不是外人,正是计算机视觉奠基者之一,约翰霍普金斯大学教授Alan Yuille,他还是霍金的弟子。
他说,现在做AI不提神经网络,成果都很难发表了,这不是个好势头。
如果人们只追神经网络的潮流,抛弃所有老方法;如果人们只会刷榜,不去想怎样应对深度网络的局限性,这个领域可能很难有更好的发展。
面对深度学习的三大瓶颈,Yuille教授给出两条应对之道:靠组合模型培养泛化能力,用组合数据测试潜在的故障。
观点发表之后,引发不少的共鸣。Reddit话题热度快速超过200,学界业界的AI科学家们也纷纷在Twitter上转发。
Reddit网友评论道,以Yuille教授的背景,他比别人更清楚在深度学习在计算机视觉领域现状如何,为什么出现瓶颈。
深度学习的三大瓶颈
Yuille指出,深度学习虽然优于其他技术,但它不是通用的,经过数年的发展,它的瓶颈已经凸显出来,主要有三个:
需要大量标注数据
深度学习能够实现的前提是大量经过标注的数据,这使得计算机视觉领域的研究人员倾向于在数据资源丰富的领域搞研究,而不是去重要的领域搞研究。
虽然有一些方法可以减少对数据的依赖,比如迁移学习、少样本学习、无监督学习和弱监督学习。但是到目前为止,它们的性能还没法与监督学习相比。
过度拟合基准数据
深度神经网络在基准数据集上表现很好,但在数据集之外的真实世界图像上,效果就差强人意了。比如下图就是一个失败案例。
一个用ImageNet训练来识别沙发的深度神经网络,如果沙发摆放角度特殊一点,就认不出来了。这是因为,有些角度在ImageNet数据集里很少见。
在实际的应用中, 如果深度网络有偏差,将会带来非常严重的后果。
要知道,用来训练自动驾驶系统的数据集中,基本上从来没有坐在路中间的婴儿。
对图像变化过度敏感
深度神经网络对标准的对抗性攻击很敏感,这些攻击会对图像造成人类难以察觉的变化,但可能会改变神经网络对一个物体的认知。
而且,神经网络对场景的变化也过于敏感。比如下面的这张图,在猴子图片上放了吉他等物体,神经网络就将猴子识别成了人类,吉他识别成了鸟类。
背后的原因是,与猴子相比,人类更有可能携带吉他,与吉他相比,鸟类更容易出现在丛林中。
这种对场景的过度敏感,原因在于数据集的限制。
对于任何一个目标对象,数据集中只有有限数量的场景。在实际的应用中,神经网络会明显偏向这些场景。
对于像深度神经网络这样数据驱动的方法来说,很难捕捉到各种各样的场景,以及各种各样的干扰因素。
想让深度神经网络处理所有的问题,似乎需要一个无穷大的数据集,这就给训练和测试数据集带来了巨大的挑战。
为什么数据集会不够大?
这三大问题,还杀不死深度学习,但它们都是需要警惕的信号。
Yuille说,瓶颈背后的原因,就是一个叫做“组合爆炸”的概念:
就说视觉领域,真实世界的图像,从组合学观点来看太大量了。任何一个数据集,不管多大,都很难表达出现实的复杂程度。
那么,组合学意义上的大,是个什么概念?
大家想象一下,现在要搭建一个视觉场景:你有一本物体字典,要从字典里选出各种各样的物体,把它们放到不同的位置上。
说起来容易,但每个人选择物体、摆放物体的方法都不一样,搭出的场景数量是可以指数增长的。
就算只有一个物体,场景还是能指数增长。因为,它可以用千奇百怪的方式被遮挡;物体所在的背景也有无穷多种。
人类的话,能够自然而然适应背景的变化;但深度神经网络对变化就比较敏感了,也更容易出错:
△ 是的,前面出现过了
也不是所有视觉任务都会发生组合爆炸 (Combinatorial Explosion) 。
比如,医学影像就很适合用深度网络来处理,因为背景少有变化:比如,胰腺通常都会靠近十二指肠。
但这样的应用并不常见,复杂多变的情况在现实中更普遍。如果没有指数意义上的大数据集,就很难模拟真实情况。
而在有限的数据集上训练/测试出来的模型,会缺乏现实意义:因为数据集不够大,代表不了真实的数据分布。
那么,就有两个新问题需要重视:
1、怎样在有限的数据集里训练,才能让AI在复杂的真实世界里也有很好的表现?
2、怎样在有限的数据集里,高效地给算法做测试,才能保证它们承受得了现实里大量数据的考验?
组合爆炸如何应对?
数据集是不会指数型长大的,所以要试试从别的地方突破。
可以训练一个组合模型,培养泛化能力。也可以用组合数据来测试模型,找出容易发生的故障。
总之,组合是关键。
训练组合模型
组合性 (Compositionality) 是指,一个复杂的表达,它的意义可以通过各个组成部分的意义来决定。
这里,一个重要的假设就是,一个结构是由许多更加基本的子结构,分层组成的;背后有一些语法规则。
这就表示,AI可以从有限的数据里,学会那些子结构和语法,再泛化到各种各样的情景里。
与深度网络不同,组合模型 (Compositional Models) 需要结构化的表示方式,才能让结构和子结构更明确。
组合模型的推断能力,可以延伸到AI见过的数据之外:推理、干预、诊断,以及基于现有知识结构去回答不同的问题。
引用Stuart German的一句话:
The world is compositional or God exists.
世界是组合性的,不然,上帝就是存在的。
虽然,深度神经网络也有些组合性:高级特征是由低级特征的响应组成的;但在本文所讨论的意义上,深度神经网络并不是组合性的。
组合模型的优点已经在许多视觉任务里面体现了:比如2017年登上Science的、用来识别CAPTCHA验证码的模型。
还有一些理论上的优点,比如可解释,以及可以生成样本。这样一来,研究人员就更加容易发现错误在哪,而不像深度神经网络是个黑盒,谁也不知道里面发生了什么。
但要学习组合模型,并不容易。因为这里需要学习所有的组成部分和语法;
还有,如果要通过合成 (Synthesis) 来作分析,就需要有生成模型 (Generative Models) 来生成物体和场景结构。
就说图像识别,除了人脸、字母等等少数几种很有规律的图案之外,其他物体还很难应付:
从根本上说,要解决组合爆炸的问题,就要学习3D世界的因果模型 (Causal Models) ,以及这些模型是如何生成图像的。
有关人类婴儿的研究显示,他们是通过搭建因果模型来学习的,而这些模型可以预测他们生活环境的结构。
对因果关系的理解,可以把从有限数据里学到的知识,有效扩展到新场景里去。
在组合数据里测试模型
训练过后,该测试了。
前面说过,世界那么复杂,而我们只能在有限的数据上测试算法。
要处理组合数据 (Combinatorial Data) ,博弈论是一种重要的方法:它专注于最坏情况 (Worst Case) ,而不是平均情况 (Average Case) 。
就像前面讨论过的那样,如果数据集没有覆盖到问题的组合复杂性,用平均情况讨论出的结果可能缺乏现实意义。
而关注最坏情况,在许多场景下都是有意义的:比如自动驾驶汽车的算法,比如癌症诊断的算法。因为在这些场景下,算法故障可能带来严重的后果。
如果,能在低维空间里捕捉到故障模式 (Failure Modes) ,比如立体视觉的危险因子 (Hazard Factors) ,就能用图形和网格搜索来研究这些故障。
但是对于大多数视觉任务,特别是那些涉及组合数据的任务,通常不会有能找出几个危险因子、隔离出来单独研究的简单情况。
△ 对抗攻击:稍稍改变纹理,只影响AI识别,不影响人类
有种策略,是把标准对抗攻击 (Adversarial Attacks) 的概念扩展到包含非局部结构 (Non-Local Structure) ,支持让图像或场景发生变化的复杂运算,比如遮挡,比如改变物体表面的物理性质,但不要对人类的认知造成重大改变。
把这样的方法应用到视觉算法上,还是很有挑战性的。
不过,如果算法是用组合性 (Compositional) 的思路来写,清晰的结构可能会给算法故障检测带来很大的帮助。
关于Alan Yuille
Alan Yuille,目前就职于约翰霍普金斯大学,是认知科学和计算机科学的杰出教授。
1976年,在剑桥大学数学专业获得学士学位。之后师从霍金,在1981年获得理论物理博士学位。
毕业之后,转而开拓计算机视觉领域。并先后就职于麻省理工学院的人工智能实验室,哈佛大学计算机系等等学术机构。
2002年加入UCLA,之后担任视觉识别与机器学习中心主任,同时也在心理学系,计算机系,精神病学和生物行为学系任客座教授。
2016年,加入约翰霍普金斯大学。
他曾获得ICCV的最佳论文奖,2012年,担任计算机视觉顶级会议CVPR的主席,计算机视觉界的奠基人之一。
此外,Alan Yuille也直接影响了中国AI的发展,其嫡系弟子朱珑博士学成后,回国创办了AI公司依图科技,现在也是中国CV领域最知名的创业公司之一。
这篇文章中的观点,出自Yuille在2018年5月发表的一篇论文,共同作者是他的博士生Chenxi Liu,在今年一月份,他们对这篇论文进行了更新。
作者:mileistone
链接:https://www.zhihu.com/question/40577663/answer/309571753
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
因为我对计算机视觉比较熟,就从计算机视觉的角度说一下自己对深度学习瓶颈的看法。
一、深度学习缺乏理论支撑
大多数文章的idea都是靠直觉提出来的,背后的很少有理论支撑。通过实验验证有效的idea,不一定是最优方向。就如同最优化问题中的sgd一样,每一个step都是最优,但从全局来看,却不是最优。
没有理论支撑的话,计算机视觉领域的进步就如同sgd一样,虽然有效,但是缓慢;如果有了理论支撑,计算机视觉领域的进步就会像牛顿法一样,有效且迅猛。
CNN模型本身有很多超参数,比如设置几层,每一层设置几个filter,每个filter是depth wise还是point wise,还是普通conv,filter的kernel size设置多大等等。
这些超参数的组合是一个很大的数字,如果只靠实验来验证,几乎是不可能完成的。最后只能凭直觉试其中一部分组合,因此现在的CNN模型只能说效果很好,但是绝对还没达到最优,无论是效果还是效率。
以效率举例,现在resnet效果很好,但是计算量太大了,效率不高。然而可以肯定的是resnet的效率可以提高,因为resnet里面肯定有冗余的参数和冗余的计算,只要我们找到这些冗余的部分,并将其去掉,效率自然提高了。一个最简单而且大多人会用的方法就是减小各层channel的数目。
如果一套理论可以估算模型的capacity,一个任务所需要模型的capacity。那我们面对一个任务的时候,使用capacity与之匹配的模型,就能使得效果好,效率优。
二、领域内越来越工程师化思维
因为深度学习本身缺乏理论,深度学习理论是一块难啃的骨头,深度学习框架越来越傻瓜化,各种模型网上都有开源实现,现在业内很多人都是把深度学习当乐高用。
面对一个任务,把当前最好的几个模型的开源实现git clone下来,看看这些模型的积木搭建说明书(也就是论文),思考一下哪块积木可以改一改,积木的顺序是否能调换一样,加几个积木能不能让效果更好,减几个积木能不能让效率更高等等。
思考了之后,实验跑起来,实验效果不错,文章发起来,实验效果不如预期,重新折腾一遍。
这整个过程非常的工程师化思维,基本就是凭感觉trial and error,深度思考缺位。很少有人去从理论的角度思考模型出了什么问题,针对这个问题,模型应该做哪些改进。
举一个极端的例子,一个数据实际上是一次函数,但是我们却总二次函数去拟合,发现拟合结果不好,再用三次函数拟合,三次不行,四次,再不行,就放弃。我们很少思考,这个数据是啥分布,针对这样的分布,有没有函数能拟合它,如果有,哪个函数最合适。
深度学习本应该是一门科学,需要用科学的思维去面对她,这样才能得到更好的结果。
三、对抗样本是深度学习的问题,但不是深度学习的瓶颈
我认为对抗样本虽然是深度学习的问题,但并不是深度学习的瓶颈。机器学习中也有对抗样本,机器学习相比深度学习有着更多的理论支撑,依然没能把对抗样本的问题解决。
之所以我们觉得对抗样本是深度学习的瓶颈是因为,图像很直观,当我们看到两张几乎一样的图片,最后深度学习模型给出两种完全不一样的分类结果,这给我们的冲击很大。
如果修改一个原本类别是A的feature中某个元素的值,然后使得svm的分类改变为B,我们会觉得不以为然,“你改变了这个feature中某个元素的值,它的分类结果改变很正常啊”。
作者:PENG Bo
链接:https://www.zhihu.com/question/40577663/answer/413331053
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
个人认为,当前深度学习的瓶颈,可能在于 scaling。是的,你没有听错。
我们已经有海量的数据,海量的算力,但我们却难以训练大型的深度网络模型(GB 到 TB 级别的模型),因为 BP 难以大规模并行化。数据并行不够,用模型并行后加速比就会大打折扣。即使在加入诸多改进后,训练过程对带宽的要求仍然太高。
这就是为什么 nVidia 的 DGX-2 只有 16 块 V100,但就是要卖到 250 万。因为虽然用少得多的钱就可以凑出相同的总算力,但很难搭出能高效运用如此多张显卡的机器。
而且 DGX-2 内部的 GPU 也没有完全互联:
又例如 AlphaGo Zero 的训练,实际用于训练的只是很少的 TPU。即使有几千几万张 TPU,也并没有办法将他们高效地用于训练网络。
如果什么时候深度学习可以无脑堆机器就能不断提高训练速度(就像挖矿可以堆矿机),从而可以用超大规模的多任务网络,学会 PB EB 级别的各类数据,那么所能实现的效果很可能会是令人惊讶的。
那么我们看现在的带宽:
https://en.wikipedia.org/wiki/List_of_interface_bit_rates
2011年出了PCI-E 3.0 x16,是 15.75 GB/s,现在消费级电脑还是这水平,4.0还是没出来,不过可能是因为大家没动力(游戏对带宽要求没那么高)。
NVLink 2.0是 150 GB/s,对于大型并行化还是完全不够的。
大家可能会说,带宽会慢慢提上来的。
很好,那么,这就来到了最奇怪的问题,我想这个问题值得思考:
AI芯片花了这么大力气还是带宽受限,那么人脑为何没有受限于带宽?
我的想法是:
人脑的并行化做得太好了,因此神经元之间只需要kB级的带宽。值得AI芯片和算法研究者学习。
人脑的学习方法比BP粗糙得多,所以才能这样大规模并行化。
人脑的学习方法是去中心化的,个人认为,更接近 energy-based 的方法。
人脑的其它特点,用现在的迁移学习+多任务学习+持续学习已经可以模仿。
人脑还会用语言辅助思考。如果没有语言,人脑也很难快速学会复杂的事情。
稍后我还会再进一步写写这个问题,欢迎大家探讨和指正。
End
声明:部分内容来源于网络,仅供读者学术交流之目的。文章版权归原作者所有。如有不妥,请联系删除。