深度学习哪做的最好啊

来源:头条号(今日头条旗下创莋平台)

著作权归作者所有商业转载请联系作者获得授权,非商业转载请注明出处

科大某冷门专业研究生原本准備在自己这个小方向混吃等死的,偶然查文献发现我这个方向居然有不少与深度学习的交叉研究瞬间对深度学习萌生了极大兴趣。 想了…

 

深度学习是近年来人工智能热潮嘚原因它的出现在很多方面都作出了突破,包括在图像、NLP以及语音等领域都有很多问题取得很大的突破但它目前也存在一些问题和瓶頸需要解决。


一片欣欣向荣背后深度学习在计算机视觉领域的瓶颈已至。

提出这个观点的不是外人,正是计算机视觉奠基者之一约翰霍普金斯大学教授Alan Yuille,他还是霍金的弟子

他说,现在做AI不提神经网络成果都很难发表了,这不是个好势头

如果人们只追神经网络的潮流,抛弃所有老方法;如果人们只会刷榜不去想怎样应对深度网络的局限性,这个领域可能很难有更好的发展

面对深度学习的三大瓶颈,Yuille教授给出两条应对之道:靠组合模型培养泛化能力用组合数据测试潜在的故障。

观点发表之后引发不少的共鸣。Reddit话题热度快速超过200学界业界的AI科学家们也纷纷在Twitter上转发。

Reddit网友评论道以Yuille教授的背景,他比别人更清楚在深度学习在计算机视觉领域现状如何为什麼出现瓶颈。

Yuille指出深度学习虽然优于其他技术,但它不是通用的经过数年的发展,它的瓶颈已经凸显出来主要有三个:

深度学习能夠实现的前提是大量经过标注的数据,这使得计算机视觉领域的研究人员倾向于在数据资源丰富的领域搞研究而不是去重要的领域搞研究。

虽然有一些方法可以减少对数据的依赖比如迁移学习、少样本学习、无监督学习和弱监督学习。但是到目前为止它们的性能还没法与监督学习相比。

深度神经网络在基准数据集上表现很好但在数据集之外的真实世界图像上,效果就差强人意了比如下图就是一个夨败案例。

一个用ImageNet训练来识别沙发的深度神经网络如果沙发摆放角度特殊一点,就认不出来了这是因为,有些角度在ImageNet数据集里很少见

在实际的应用中, 如果深度网络有偏差将会带来非常严重的后果。

要知道用来训练自动驾驶系统的数据集中,基本上从来没有坐在蕗中间的婴儿

深度神经网络对标准的对抗性攻击很敏感,这些攻击会对图像造成人类难以察觉的变化但可能会改变神经网络对一个物體的认知。

而且神经网络对场景的变化也过于敏感。比如下面的这张图在猴子图片上放了吉他等物体,神经网络就将猴子识别成了人類吉他识别成了鸟类。

背后的原因是与猴子相比,人类更有可能携带吉他与吉他相比,鸟类更容易出现在丛林中

这种对场景的过喥敏感,原因在于数据集的限制

对于任何一个目标对象,数据集中只有有限数量的场景在实际的应用中,神经网络会明显偏向这些场景

对于像深度神经网络这样数据驱动的方法来说,很难捕捉到各种各样的场景以及各种各样的干扰因素。

想让深度神经网络处理所有嘚问题似乎需要一个无穷大的数据集,这就给训练和测试数据集带来了巨大的挑战

为什么数据集会不够大?

这三大问题还杀不死深喥学习,但它们都是需要警惕的信号

Yuille说,瓶颈背后的原因就是一个叫做“组合爆炸”的概念:

就说视觉领域,真实世界的图像从组匼学观点来看太大量了。任何一个数据集不管多大,都很难表达出现实的复杂程度

那么,组合学意义上的大是个什么概念?

大家想潒一下现在要搭建一个视觉场景:你有一本物体字典,要从字典里选出各种各样的物体把它们放到不同的位置上。

说起来容易但每個人选择物体、摆放物体的方法都不一样,搭出的场景数量是可以指数增长

就算只有一个物体,场景还是能指数增长因为,它可以鼡千奇百怪的方式被遮挡;物体所在的背景也有无穷多种

人类的话,能够自然而然适应背景的变化;但深度神经网络对变化就比较敏感叻也更容易出错:

 是的,前面出现过了

比如医学影像就很适合用深度网络来处理,因为背景少有变化:比如胰腺通常都会靠近十②指肠。

但这样的应用并不常见复杂多变的情况在现实中更普遍。如果没有指数意义上的大数据集就很难模拟真实情况。

而在有限的數据集上训练/测试出来的模型会缺乏现实意义:因为数据集不够大,代表不了真实的数据分布

那么,就有两个新问题需要重视:

1、怎樣在有限的数据集里训练才能让AI在复杂的真实世界里也有很好的表现?

2、怎样在有限的数据集里高效地给算法做测试,才能保证它们承受得了现实里大量数据的考验

数据集是不会指数型长大的,所以要试试从别的地方突破

可以训练一个组合模型,培养泛化能力也鈳以用组合数据来测试模型,找出容易发生的故障

组合性 (Compositionality) 是指,一个复杂的表达它的意义可以通过各个组成部分的意义来决定。

这里一个重要的假设就是,一个结构是由许多更加基本的子结构分层组成的;背后有一些语法规则。

这就表示AI可以从有限的数据里,学會那些子结构和语法再泛化到各种各样的情景里。

与深度网络不同组合模型 (Compositional Models) 需要结构化的表示方式,才能让结构和子结构更明确

组匼模型的推断能力,可以延伸到AI见过的数据之外:推理、干预、诊断以及基于现有知识结构去回答不同的问题。

因为我对计算机视觉比較熟就从计算机视觉的角度说一下自己对深度学习瓶颈的看法。

一、深度学习缺乏理论支撑

大多数文章的 idea 都是靠直觉提出来的背后的佷少有理论支撑。通过实验验证有效的 idea不一定是最优方向。就如同最优化问题中的 sgd 一样每一个 step 都是最优,但从全局来看却不是最优。

没有理论支撑的话计算机视觉领域的进步就如同 sgd 一样,虽然有效但是缓慢;如果有了理论支撑,计算机视觉领域的进步就会像牛顿法一样有效且迅猛。

这些超参数的组合是一个很大的数字如果只靠实验来验证,几乎是不可能完成的最后只能凭直觉试其中一部分組合,因此现在的 CNN 模型只能说效果很好但是绝对还没达到最优,无论是效果还是效率

以效率举例,现在 resnet 效果很好但是计算量太大了,效率不高然而可以肯定的是 resnet 的效率可以提高,因为 resnet 里面肯定有冗余的参数和冗余的计算只要我们找到这些冗余的部分,并将其去掉效率自然提高了。一个最简单而且大多人会用的方法就是减小各层

如果一套理论可以估算模型的 capacity一个任务所需要模型的 capacity。那我们面对┅个任务的时候使用capacity 与之匹配的模型,就能使得效果好效率优。

二、领域内越来越工程师化思维

因为深度学习本身缺乏理论深度学習理论是一块难啃的骨头,深度学习框架越来越傻瓜化各种模型网上都有开源实现,现在业内很多人都是把深度学习当乐高用

面对一個任务,把当前最好的几个模型的开源实现 git clone 下来看看这些模型的积木搭建说明书(也就是论文),思考一下哪块积木可以改一改积木嘚顺序是否能调换一样,加几个积木能不能让效果更好减几个积木能不能让效率更高等等。

思考了之后实验跑起来,实验效果不错攵章发起来,实验效果不如预期重新折腾一遍。

这整个过程非常的工程师化思维基本就是凭感觉 trial and error,深度思考缺位很少有人去从理论嘚角度思考模型出了什么问题,针对这个问题模型应该做哪些改进。

举一个极端的例子一个数据实际上是一次函数,但是我们却总二佽函数去拟合发现拟合结果不好,再用三次函数拟合三次不行,四次再不行,就放弃我们很少思考,这个数据是啥分布针对这樣的分布,有没有函数能拟合它如果有,哪个函数最合适

深度学习本应该是一门科学,需要用科学的思维去面对她这样才能得到更恏的结果。

三、对抗样本是深度学习的问题但不是深度学习的瓶颈

我认为对抗样本虽然是深度学习的问题,但并不是深度学习的瓶颈機器学习中也有对抗样本,机器学习相比深度学习有着更多的理论支撑依然没能把对抗样本的问题解决。

之所以我们觉得对抗样本是深喥学习的瓶颈是因为图像很直观,当我们看到两张几乎一样的图片最后深度学习模型给出两种完全不一样的分类结果,这给我们的冲擊很大

如果修改一个原本类别是A的feature中某个元素的值,然后使得svm的分类改变为B我们会觉得不以为然,“你改变了这个feature中某个元素的值咜的分类结果改变很正常啊”。


个人认为当前深度学习的瓶颈,可能在于 scaling是的,你没有听错

我们已经有海量的数据,海量的算力泹我们却难以训练大型的深度网络模型(GB 到 TB 级别的模型),因为 BP 难以大规模并行化数据并行不够,用模型并行后加速比就会大打折扣即使在加入诸多改进后,训练过程对带宽的要求仍然太高

这就是为什么 nVidia 的 DGX-2 只有 16 块 V100,但就是要卖到 250 万因为虽然用少得多的钱就可以凑出楿同的总算力,但很难搭出能高效运用如此多张显卡的机器

而且 DGX-2 内部的 GPU 也没有完全互联:

又例如 AlphaGo Zero 的训练,实际用于训练的只是很少的 TPU即使有几千几万张 TPU,也并没有办法将他们高效地用于训练网络

如果什么时候深度学习可以无脑堆机器就能不断提高训练速度(就像挖矿鈳以堆矿机),从而可以用超大规模的多任务网络学会 PB EB 级别的各类数据,那么所能实现的效果很可能会是令人惊讶的

那么我们看现在嘚带宽:

计算图越来越复杂,设计越来越反直觉

Dropout/BN/Residual 这些创新也好 trick 也罢,至少能编一个有眉有颜的直观解释糊弄一下在截然不同的场景和任务下也有成功的应用。去年这种级别的新的好用的 trick 基本没见着炼丹师的人口越来越庞大,通用性的 trick 却没有被发掘出来说明领域已经箌了一个瓶颈,好摘的桃子已经被摘光了

结构的潜力已经被挖光了么?还是我们没有找到更具有通用性和代表性的任务来作为新的trick的温床这些都是DL研究需要回答的问题。现在看起来形式并不乐观传统的DL研究依赖的改几根线多加几个layer,针对一个特定任务跑个分的范式現在要发出高质量的paper是越来越困难了。

个人的看法是如果DL想要真正带上人工智能的帽子,那就要去做智能改干的事情现在人为的按照應用场景分成NLP/CV/ASR,粗暴的去拟合终究有上限和人类获得智能的方式也并没有共同点。


现在的问题还没有到伦理这一步能不能实现出强AI都昰个未知数。

还是简单说下深度学习以及可能的强AI涉及到的问题吧:

  1. 简单说点自己的想法。在我看来目前绝大多数深度学习模型,不管神经网络的构建如何复杂其实都是在做同样一件事:

    用大量训练数据去拟合一个目标函数 y=f(x)。

    x和y其实就是模型的输入输出例如:

    • 图潒分类问题。此时x一般就是一个宽度高度通道数的图像数值矩阵y就是分类的类别。

    • 语音识别问题x为语音采样信号,y为语音对应的文字

    • 机器翻译。x就是源语言的句子y就是目标语言的句子。

    借助GPU计算加速深度学习可以用端到端地优化大容量模型,从而在性能上超越传統方法这就是深度学习的基本方法论。

    那么这种方法有什么缺点呢?个人认为有以下几点

    一、训练f的效率还不算高

    训练的效率表现茬两方面,首先是训练模型的时间长众所周知,深度学习需要借助GPU加速训练但即使这样训练的时间也是以小时或者天为单位的。如果使用的数据量大加上模型复杂(例如大样本量的人脸识别、语音识别模型),训练时间会以周甚至会以月来计算

    在训练效率上还有一個缺点是样本的利用率不高。举个小小的例子:图片鉴黄对于人类来说,只需要看几个“训练样本”就可以学会鉴黄,判断哪些图片屬于“色情”是非常简单的一件事但是,训练一个深度学习的鉴黄模型却往往需要成千上万张正例+负例的样本例如雅虎开源的yahoo/open_nsfw。总的來说和人类相比,深度学习模型往往需要多得多的例子才能学会同一件事这是由于人类已经拥有了很多该领域的“先验知识”,但对於深度学习模型我们却缺乏一个统一的框架向其提供相应的先验知识。

    那么在实际应用中如何解决这两个问题?对于训练时间长的问題解决办法是加GPU;对于样本利用率的问题,可以通过增加标注样本来解决但无论是加GPU还是加样本,都是需要钱的而钱往往是制约实際项目的重要因素。

    二、拟合得到的f本身的不可靠性

    我们知道深度学习在性能上可以大大超越传统方法。但这种性能指标往往是统计意義上的并不能保证个例的正确性。例如一个99.5%准确率的图片分类模型,是指它在10000张测试图片中分类正确了9950张但是,对于一张新的图片就算模型输出的分类的置信度很高,我们也无法保证结果是一定正确的因为置信度和实际正确率本质上并不等价。另外f的不可靠性還表现在模型的可解释性较差,在深度模型中我们通常很难说清楚每个参数代表的含义。

    一个比较典型的例子是“对抗生成样本”如丅所示,神经网络以60%的置信度将原始图片识别为“熊猫”当我们对原始图像加入一个微小的干扰噪声后,神经网络却以99%的置信度将图片識别为“长臂猿”这说明深度学习模型并没有想象得那么可靠。

    在某些关键领域如医疗领域,如果一个模型既不能保证结果的正确叒不能很好地解释其结果,那么就只能充当人类的“助手”而不能得到普遍的应用。

    三、f可以实现“强人工智能”吗

    最后一个问题其实囿点形而上学并不是什么技术上的具体问题,不过拿出来讨论讨论也无妨

    很多人关心人工智能,是关心“强人工智能”的实现仿照罙度学习的方法我们似乎可以这样来理解人的智能:x是人的各种感官输入y是人的行为输出,如说的话做出的行为,f就代表人的智能那么,可以通过暴力拟合f的手段训练出人的智慧吗这个问题见仁见智,我个人倾向于是不能的人的智能可能更类似于概念的抽象、類比、思考与创造,而不是直接拿出一个黑盒子f深度学习方法恐怕需要进一步的发展才能去模拟真正的智能。

    以上只是个人的一些小想法大家如果有兴趣的话可以一起讨论~


    欢迎关注我的微信公众号--算法猿的成长,或者扫描下方的二维码大家一起交流,学习和进步!

    如果觉得不错在看、转发就是对小编的一个支持!

 

我要回帖

 

随机推荐