例子 微软深度学习_深度学习例子 - CSDN
  • 大会直击|微软亚洲研究院刘铁岩:深度学习成功的秘密 本文作者:宗仁 2016-09-09 21:46 导语:今天深度学习成功的主要因素:超大规模训练数据、复杂的深层模型、分布式并行训练,也正是...

    大会直击|微软亚洲研究院刘铁岩:深度学习成功的秘密

    本文作者:宗仁 2016-09-09 21:46
    导语:今天深度学习成功的主要因素:超大规模训练数据、复杂的深层模型、分布式并行训练,也正是影响其进一步发展的障碍。

    9月9日,2016湖南人工智能论坛在长沙举办,大会期间,来自国内外的许多顶级专家在会上给我们做了报告,下面是雷锋网(公众号:雷锋网)根据微软亚洲研究院刘铁岩教授的现场精华整理,全部内容已经经由刘教授确认。

    在人工智能高歌猛进,人们期待深度学习无往不胜之时,作为人工智能学者,我们必须保持冷静,分析深度学习技术的短板,开展针对性研究将其克服,从而助力人工智能的长期繁荣。事实上,今天深度学习成功的主要因素:超大规模训练数据、复杂的深层模型、分布式并行训练,也正是影响其进一步发展的障碍。首先,取得大量有标签训练数据需要付出巨大代价,不是每个领域都能满足这个条件;其次,深层模型很难优化,超大模型会突破计算机容量;再次,同步并行效率低下、异步并行受通信延时影响收敛缓慢。在本报告中,我将会介绍微软研究院的最新成果,展示如何通过“对偶通信博弈技术”有效利用无标签训练数据、如何利用“残差学习技术”解决深层神经网络的优化问题、如何借助“二维映射技术”缩小模型规模、以及如何使用“高阶泰勒补偿技术”解决通信延时问题。这些前沿技术将会陆续通过微软的开源项目CNTK和DMTK分享给业界,以期和大家一起推动人工智能技术的进一步发展。

    刘铁岩博士,微软亚洲研究院首席研究员,美国卡内基梅隆大学(CMU)客座教授。刘博士的研究兴趣包括:人工智能、机器学习、信息检索、数据挖掘等。他的先锋性工作促进了机器学习与信息检索之间的融合,被国际学术界公认为“排序学习”领域的代表人物,他在该领域的学术论文已被引用近万次。近年来,刘博士在博弈机器学习、深度学习、分布式机器学习等方面也颇有建树,他的研究工作多次获得最佳论文奖、最高引用论文奖、研究突破奖,并被广泛应用在微软的产品和在线服务中。他是国际电子电气工程师学会(IEEE)、美国计算机学会(ACM)和中国计算机学会(CCF)的高级会员,中国计算机学会的杰出演讲者和学术工委。

    大会直击|微软亚洲研究院刘铁岩:深度学习成功的秘密

    在我的报告开始之前,先介绍一下我所供职的单位:微软研究院,它是微软公司在全球设立的基础研究机构,它在全球有六个分院。位于北京的微软亚洲研究院成立于1998年,到现在已经有十八个年头,这十八年里,微软亚洲研究院在顶级国际会议和期刊上发表了近5000篇论文,其中包括50篇最佳论文,为微软产品提供了400项技术。微软亚洲研究院非常像一所大学,有近200余名世界顶尖的计算机科学家,以及来自各个高校的三四百名长期的实习生。

    人工智能在最近取得了令人瞩目的成果,微软在这个过程中也做了很多的贡献,比如在语音识别方面的突破,就起源于2006年微软的研究员和Geoff Hinton一起从事的研究。这几年人工智能领域在人脸识别、图像识别、自然语言处理、人际对弈都取得了甚至超过人类水平的研究成果,非常喜人。

    大会直击|微软亚洲研究院刘铁岩:深度学习成功的秘密

    深度学习成功的秘密

    说到这几年取得的成果,就不得不提到深度学习技术,深度学习技术概念很宽,但最主流的算法就是深度神经网络,这张图展示了深度神经网络的基本结构。图里的圆圈代表是一个神经元,每一个神经元会对它的输入做一个线性加权求和,在进行一个非线性变换。经过多层的变换,深度神经网络可以模拟非常复杂的非线性分类界面。

    大会直击|微软亚洲研究院刘铁岩:深度学习成功的秘密

    除了最基本的全连接网络,最近深度神经网络有很多新的变种,比如说卷积神经网络,这是为图像识别发明新的网络结构,循环神经网络主要为自然语言流式数据发明的神经网络结构。

    大会直击|微软亚洲研究院刘铁岩:深度学习成功的秘密

    不管是标准多层神经网络、卷积神经网络,还是循环神经网络,其学习过程都非常的简单和一致。首先会有一个训练集,我们用w表示深度神经网络里面的参数,用f来表示神经网络模型。

    大会直击|微软亚洲研究院刘铁岩:深度学习成功的秘密

    L称为损失函数,深度学习神经网络的训练其实通过在训练集上最小化损失函数而求得的,就是我们通常所说的经验风险最小化。为了实现这个目标,人们使用的优化技术也非常的简单,就是大家上大一的时候就会学到梯度下降法:对损失函数求一个梯度,然后把模型向梯度下降最快的方向做一个更新,这种方法在神经网络领域也被称为反向传播。

    大会直击|微软亚洲研究院刘铁岩:深度学习成功的秘密

    到此为止我就给大家用了一两张PPT做了非常快速的讲座,什么是深度神经网络,它有哪些变种。

    深度学习网络为什么成功

    接下来我们来看看神经网络背后深层次的东西。当深度神经网络带来了人工智能很大的飞跃,外行们讨论的都是人工智能对人类会不会产生威胁?而内行看到的则是深度神经网络有什么技术优势、往前发展还有什么样子的短版?

    前面提到,无论深度神经网络长什么样子,其实就是一种经验风险最小化。这里,X是样本,Y是标签,所以X和Y加起来就是神经网络的训练数据,F用来表示神经网络模型,L是损失函数。神经网络的训练就是在整个神经网络的函数空间里面去找一个最优模型,从而最好地拟合训练数据。其实不仅神经网络在做这件事,历史上那么多的分类模型,都在做的类似的事情。

    大会直击|微软亚洲研究院刘铁岩:深度学习成功的秘密

    为什么到今天神经网络可以取得传统模型无法取得的成功呢?其实有三个理由:

    一是要感谢我们这个大数据的时代,我们如今有着前所未有的大训练数据,可以充分训练复杂的模型。

    二是深度神经网络和前面提到的模型相比,具有更强的表达能力。大家知道在神经网络领域有一个universal approximation theorem,讲的是带有隐层的神经网络可以逼近任意的连续函数。从这个意义上讲,即便我们选一个非常复杂的问题,用深度神经网络也可以逼近它的分类界面。

    大会直击|微软亚洲研究院刘铁岩:深度学习成功的秘密

    有了大数据,又有了复杂模型,那怎么训练呢?就需要非常强大的计算资源,就是可能要用上百台、上千台的计算机来共同训练一个深度神经网络。总结一下啊,大数据、复杂模型、运算集群能力其实共同支撑了今天深度神经网络的巨大成功。

    深度学习进一步发展的瓶颈

    但是世界上没有免费的午餐,这三方面恰洽也是深度神经网络向前进一步发展的瓶颈所在。

    第一个方面,其实大规模的数据不是那么容易取得的,尤其在某些领域,比如说医学领域,有些疑难杂症这世界上一共就一百个样本,如何去产生成千上万的大数据?


    第二个方面深度神经网络非常难以优化,目前人们为此发明了很多黑科技。我们经常遇到这种情况,即便有一个组织宣布他有非常好的深度模型并且把算法进行了开源,但是我们当下载到自己的环境里,用自己的数据做训练的时候,往往得不到那么好的结果。另外,有的时候很大的模型容量会超过计算机的限制,目前我们经常用GPU来训练深度神经网络,但是GPU的内存很小,一般就是几十个G,很多大的神经网络的规模会超过这个容量。


    第三个方面,即便神经网络模型可以塞到GPU里,但是当数据够大的时候,用单机进行训练可能要花费非常多的时间,也许几百年也训练不出一个模型来。为此,我们需要用一个集群来做分布式的训练,听起来很简单,好像是系统领域成熟的问题,但是我们关心的不是简单地把模型训练分发到多个机器上,而是要保证精度不发生损失,我们希望在加速的同时,还有很好的判别或者是分类能力,这件事情一点都不简单。

    大会直击|微软亚洲研究院刘铁岩:深度学习成功的秘密

    一)通过“对偶通信博弈技术”有效利用无标签训练数据

    前面提到了很多情况下,不是那么容易获得大数据,当没有大的训练数据时候该怎么办?通常获得有标签数据很难,但是获得无标签数据会相对荣国。比如现在ImageNet比赛的数据通常是1000类,每类1000幅图像;但是我们如果用搜索引擎来搜索图像,可以获得比这多得多的数据。 关键的问题是如何给这些无标签数据打上一个标签。常用的方法是标签传播,就是利用样本的相似性,给无标签数据赋予一个伪标签。另一种情况是,我们有类别信息,但是没有样本。最近有一个很有趣的工作叫GAN: generative adversarial nets,它利用一个生成器和一个判别器的博弈,最终能根据标签自动产生属于这个类别的数据。

    大会直击|微软亚洲研究院刘铁岩:深度学习成功的秘密

    有了这个技术,我们就不用去采集数据,而是自动地渊源不断输出那些图像。

     这两种工作是对称的,一个工作处理的是有样本但无标签,另一个工作处理的是有标签但无样本。那么能不能使它们两个对接在一起?这是我们今年在NIPS上发的一篇论文,称为对偶通信博弈,可以把前面两项技术完美结合在一起。

    大会直击|微软亚洲研究院刘铁岩:深度学习成功的秘密

    首先从任何一个无标签的样本出发,可以预测标签,然后基于这个标签又可以用生成技术生成一个新样本出来,这个过程我们可以获得很多反馈信息,比如标签的分布、生成样本和原样本的相似度等。这个过程也可以从标签出发,也能形成一个闭环。有了这个技术,我们就可以自己产生训练数据。我们把这个技术应用到了机器翻译上,取得了非常好的结果。大家知道机器翻译这几年有突飞猛进的进展,得益于大量双语语料的存在,如果只有很少的数据能做什么呢?

    这张图上面最上面条形图对应的是用百分之百的双语语料训练的结果,最底下一行是使用传统的深度学习技术只用5%的双语语料的结果。绿色的这一条也只是使用了5%的有标数据,但是使用了对偶通信博弈来自动生成更多的训练数据,它可以很快逼近使用全部双语语料的精度。当然,这里机器翻译只是一个例子,同样的方法可以解决很多其他的应用问题。

    二)利用“残差学习技术”解决深层神经网络的优化

    深度学习的网络很复杂,训练其实不容易,那么到底有哪些不容易?

    大会直击|微软亚洲研究院刘铁岩:深度学习成功的秘密

    一个典型的挑战叫做梯度消减,深度神经网络是从输出层的损失函数不断向下传播,用预测误差来更改神经网络的参数,所谓梯度消减指的是当网络很深的时候,输出层的损失很难有效反馈到底层,所以底层神经参数不能得到有效的更新。我们举个简单的例子,这是一个简化的深度神经网络,每一层只有一个隐节点,但是有很多层次,C是损失函数,反向传播无非就是对损失函数求一个偏导,求到每一个层的参数上面去,这个偏导长什么样子,大家回去做一点演算的话就可以得到这个式子。这里sigma’对应于非线性激活函数的导数,它的最大值也不过是0.25,如果一个网络很深,每一层对应的激活函数的导数会被连乘,一连串很小的量连乘会是什么结果呢,就是很快趋近于0,这就是梯度消减的起因。为了解决这个问题,人们提出在原有的神经网络基础上增加了一条由门电路控制的线性通路。

    大会直击|微软亚洲研究院刘铁岩:深度学习成功的秘密

    我们做回传的时候,线性通路可以把预测误差有效传递到底的参数上,而不会有那么强的梯度消减问题。但是,这两个工作使用的门电路,有的时候会通,有的时候会断,还是会带来一定的损失。我们研究院的同事提出在神经网络不同层次之间加一个直接的线性通路,不受任何的限制,永远是通的,经过这样的一个改造之后,对于解决梯度消减问题效果更好,并且可以让我们很轻易训练出成千上万层的网络,其中152层的残差网络参加了去年的比赛,并且取得了五个项目的冠军,获得了全世界的瞩目。

    大会直击|微软亚洲研究院刘铁岩:深度学习成功的秘密

    大家看看这个152层的网络有多深。

    其实,不仅深会带来麻烦,网络大也是件麻烦事。这个数据集是在网络搜索领域常用的数学极,它包含十几亿的网页,词表大小大概1000万。如果基于这样数据去设计一个神经网络,因为输出层是词表那么大,输入层也是词表那么大,网络大小是非常可观的,其参数个数会超过200亿,存储的量会超过200G,这样是网络是没法塞到GPU的内存里的。即便可以塞进去,训练这么大的网络也需要花很长的时间,粗略的计算告诉我们,用主流GPU来训练,大约需要180年。

    大会直击|微软亚洲研究院刘铁岩:深度学习成功的秘密

    三)借助“二维映射技术”缩小模型规模

    今年我们的研究组提出新的技术,就叫做参数维度压缩技术,可以有效解决词表过大的问题。因为词表决定了输出的结点数和输入的结点数,我们工作的核心所在就是提出了词表的二维向量表达。

    大会直击|微软亚洲研究院刘铁岩:深度学习成功的秘密

    每一个词不是用一个节点表示,而是用两个节点去表示,不同的词会共享节点。如果用二维的表格来表述所有的词条,原来10000个词,只需要200个元素就可以了。通过二维词表的构造大大解决了内存的空间,但是到底该怎么生成这些二维的词表?

    哪些词要共享节点,哪些词不需要共享节点,其实这是一个最优的二分图匹配问题,我们可以循环地求解二分图匹配,从而获得合理的二维词表。相应地,我们把传统的神经网络也做了改进,提出的二维循环神经网络。

    大会直击|微软亚洲研究院刘铁岩:深度学习成功的秘密

    这个网络大大缩小了网络储存的内存需求,像我刚才提到有200亿个参数的网络,用了这个技术以后,储存量降低了三个数量级,运算量降低了四个数量级,这还不是最神奇的,我们使用了二维共享表之后,精度也得到了提高,这主要是因为传统的神经网络输入结点是互相独立的,但是我们没有做这样的假设,我们是用了最优二分图的匹配来找到了词与词之间的语义相似性,因此提高了网络的精度。

    四)如何提高云计算和并行计算

    大家想象一下,如果真的有一个非常大的网络,有很多数据要跑,一台机器要一两百年才能完成训练。那就不得不使用多台机器进行并行训练。在并行的训练当中最简单的范式就是同步的并行。

    大会直击|微软亚洲研究院刘铁岩:深度学习成功的秘密

    比如说每一台机器做一个局部运算,然后机器互相之间互相同步一下学到的东西。但是这一百台机器可能运算的速度有很大差别,做同步的更新,这一百台机器就需要互相等待,最后运算的效率是由最慢的机器决定的。

    大会直击|微软亚洲研究院刘铁岩:深度学习成功的秘密

    结果是,使用了100台机器,可能由于互相等待,最终只实现了三五倍的加速比,得不偿失。为了解决这个问题,最近学者们开始研究异步并行。

    大会直击|微软亚洲研究院刘铁岩:深度学习成功的秘密

    就是机器之间不互相等待,这样虽然速度有所提高,但是会出现所谓延时通信的额问题。也就是,当一台机器根据当前模型,得到模型更新,想要推送回全局模型的时候,全局模型很可能已经被其他机器更新了好几次了,导致它推送上的更新过时了,把这个过时的更新加到全局模型上,可能会导致出乎意料的结果。有学者做过分析,这种延时,或导致学习的收敛速度变慢,最终也是影响加速比。

    为了解决这个问题,我们需要弄清楚这个过时的更新到底会带来什么影响。其实,这个旧的更新和新的更新之间的差别可以用泰勒展开来进行刻画,传统的异步并行相当于只利用了泰勒展开的零阶项,那么,我们是不是可以用更多的高阶项去补偿这种延时呢?如果把所有高阶项都用上,确实可以把通讯延迟完全解决掉,但是其运算复杂度也会增加,所以这中间有一个平衡的问题。我们做了一个简单的尝试,就是在零阶项的基础上,多保留了一阶项。但是,即便这种简单的操作,也需要我们计算原损失函数的二阶导数(就是所谓海森阵),其复杂度是相当高的,可能得不偿失。我们的贡献在于证明了一个重要的定理,当损失函数具有对数似然的形式的时候,这个二阶导数可以用一阶导数的简单变换,实现无偏估计。而神经网络里常用的交叉熵损失函数,正是一种对数似然的形式,因此我们的技术可以很好地应用到深度神经网络里面。

    最后,关于微软的开源平台

    前面我讲到了很多微软在深度学习方面的前沿技术,这些技术将会陆续通过我们的开源项目分享给业界。其中一个开源项目叫CNTK,微软深度学习工具包,还有一个叫DMTK,微软分布式机器学习工具包。希望对这方面感兴趣的同事可以尝试一下我们的工具包,希望对你们的研究有一个推动作用。

    大会直击|微软亚洲研究院刘铁岩:深度学习成功的秘密

    最后,让我们讨论一下我们的未来研究方向,我们希望创造一个能够自动创造人工智能的人工智能。今天人工智能虽然有很多成功的例子,但是绝大部分依靠人为编写的程序。最近这几年,学者们在思考,有没有可能不需要人为控制深度学习的过程,而是由机器自己来优化自己呢?比如说DeepMind今年发了一个论文,叫learning to learn by gradient descent by gradient descent,就是用循环神经网络取代人为定义的梯度下降方法。再比如,我们前面提到的对偶通信博弈,就是机器自己搜集和产生训练数据。还有一些人在用机器学习的方法自动来调深度神经网络的超参数,比如学习率。随着这些研究的开展,我们可以想象有一天机器学习工具可以针对给出的任务去自动搜索数据、选择数据、处理数据,自动根据你所给的目标去生成模型优化的方法,自动调整超参数,自动把训练部署到多个机器上进行分布式训练,如果真的有这样一天,将是对所有机器学习使用者的一种解放,我们不需要那些掌握黑科技的巨头,每个人都可以享受机器学习技术给大家带来的红利!让貌似高深复杂的机器学习技术,真正飞入寻常百姓家

    展开全文
  • 作者 |Jesus Rodriguez译者 |陆离编辑 | Jane出品 | AI科技大本营(ID:rgznai100)【导读】微软和谷歌一直在致力于开发新的用于训练深度神经网络的模型,最近,谷歌和微软分别发布了新的用于分布式深度学习训练的...

    640?wx_fmt=png

    【进群了解最新免费公开课、技术沙龙信息】

    作者 | Jesus Rodriguez
    译者 | 陆离
    编辑 | Jane
    出品 | AI科技大本营(ID:rgznai100)
     
    【导读】微软和谷歌一直在致力于开发新的用于训练深度神经网络的模型,最近,谷歌和微软分别发布了新的用于分布式深度学习训练的框架——GPipe 和 PipeDream。下面的内容就带领大家了解一下这两个工具。
     
    模型的训练是深度学习应用程序生命周期中的一个部分,在模型达到一定的规模之前,我们认为它不会遇到什么挑战性。虽然在实验过程中训练基本模型是较为平常的工作,但复杂度与模型的质量和大小成线性关系。例如,2014年ImageNet视觉识别挑战赛(ImageNet visual recognition challenge)的获胜者是GoogleNet,它以400万个参数获得了74.8%的Top-1准确率;而仅仅在三年之后,2017年ImageNet挑战赛的获胜者则成了Squeeze-and-Excitation Networks(SENet),它用了1.458亿个(是之前的36倍以上)参数获得了82.7%的Top-1准确率。然而,在同一时期,GPU的内存只增加了大约3倍。
     
    640?wx_fmt=png
     
    随着模型的发展,为了达到更高的精确度,这些模型的训练变得越来越具有挑战性。前面提到的例子表明,仅仅依靠GPU硬件设施的改进来实现更好的训练效果是不可持续的。相反,我们需要分布式的计算方法,将不同节点上的训练工作负载并行化,以便进行扩展训练。可并行化训练的概念听起来可能比较简单,但实际上却是极其复杂的工作。如果你思考一下,我们将要讨论通过跨不同节点来划分模型的知识获取部分,并在完成之后将这些部分再重新组合成为一个模型。然而,为了扩展深度学习模型,必须进行并行训练。为了应对这些挑战,微软和谷歌投入了数月进行研究和设计,分别发布了GPipe 和PipeDream。
     

    GPipe(Google)
     
    GPipe专注于扩展深度学习应用程序的训练负载。从基础设施的角度来看,训练过程的复杂性是在深度学习模型中经常被忽视的因素。训练数据集越来越大,就越复杂。例如,在医疗保健领域,经常会遇到需要使用数百万高分辨率的图像进行训练的模型。因此,训练过程通常需要很长的时间才能完成,并且由于内存和CPU的消耗而导致付出非常高的代价。
     
    对于深度学习模型并行性的一种有效思考方法是将其划分为数据并行和模型并行的方式。数据并行方式使用大型的计算机集群来分割所输入的数据。模型并行性则是试图将模型转移到加速器上,GPU或TPU,它们具有加速模型训练的特殊硬件。在较高的层次上,几乎所有的训练数据集都可以按照一定的逻辑进行并行化工作,但在模型上却不一定是这样的。例如,一些深度学习模型是由可独立进行训练的并行分支组成的。在这种情况下,典型的策略是将计算任务划分到多个分区,并将不同的分区分配给不同的分支。然而,这种策略在按顺序进行层堆叠的深度学习模型中存在着很大不足,这就给高效的并行计算带来了挑战。
     
    GPipe通过一种叫做流水线的技术将数据并行和模型并行相结合起来。从概念上讲,GPipe是一个分布式机器学习库,它使用同步随机梯度下降和流水线并行的方式进行训练,适用于任何由多个有序的层组成的深度神经网络(Deep Neural Networks, DNN)。Gpipe通过跨不同的加速器来分割模型,并自动将一小批训练示例划分成更小的批量。该模型允许GPipe的加速器进行并行操作,最大限度地提高了训练过程中的可扩展性。
     
    下图说明了具有多个有序层的神经网络的GPipe模型被划分到了四个加速器上。Fk是kth分区的复合正向计算函数。Bk是其相对应的反向传播函数。Bk依赖于来自上层的Bk+1和Fk的中间激活函数。在上面的模型中,我们可以看到网络的顺序性是如何导致资源利用不足的。图中的下半部分显示了GPipe方法,在该方法中,输入的小批量示例被划分为更小的微批量,这些微批量可以由加速器同时处理。
     
    640?wx_fmt=png
     

    PipeDream(微软)
     
    几个月以前,微软研究院宣布了Fiddle项目的创立,其包括了一系列的旨在简化分布式深度学习的研究项目。PipeDreams是Fiddle发布的第一个侧重于深度学习模型并行训练的项目之一。
     
    PipeDream采用一种有别于其它方法的方式,利用称为“流水线并行”的技术来扩展深度学习模型的训练。这种方式试图解决当前数据和模型并行技术所面临的一些挑战,例如在Gpipe中使用的一些技术。通常来说,当在云基础设施上进行训练的时候,数据并行方法在规模上承受着很高的通信成本,另外也可以随着时间的推移来提高GPU的计算速度。类似地,模型并行技术经常会通过无效地硬件资源利用,同时给程序员带来不必要负担的情况下,来确定如何在给定硬件部署环境的情况下进行特定模型的拆分。
     
    640?wx_fmt=png
     
    PipeDream试图通过一种叫做流水线并行的技术来克服数据模型并行方法上的一些挑战。在概念上,流水线并行计算技术涉及将DNN模型的层划分为多个阶段,每个阶段是由模型中的一组连续的层组成的。每个阶段都被映射到一个单独的GPU上,该GPU对当前阶段中的所有层将执行前向传递和后向传递。
     
    给定一个特定的深度神经网络,PipeDream会根据在单个GPU上执行的一个简短的评测运行,自动确定如何划分DNN模型的操作者,并在不同阶段之间均衡计算的负载,同时也会最小化目标平台的通信任务。即使存在模型的多样化(计算和通信)和平台的多样化(互连拓扑和分层带宽),PipeDream也能有效地进行负载均衡。PipeDream的并行训练方法对比数据模型并行方法提供了一些额外的优势。首先,PipeDream在工作节点之间需要更少的通信,因为在管道执行中的每个工作节点只需传递梯度和输出激活的子集,给其它的单个工作节点。此外,PipeDream以一种更容易并行的方式来分离计算和通信任务。
     
    640?wx_fmt=png
     
    并行训练方法是构建更庞大、更精确的深度学习模型的关键挑战之一。作为深度学习社区中的一个非常活跃的研究领域,并行训练方法需要将有效的并发编程技术与深度学习模型的本质相结合起来。虽然仍处于初期阶段,但谷歌的GPipe和微软的PipeDream作为两种最具创造性的技术,为深度学习的开发人员提供了并行训练方法。

    原文地址:
    https://towardsdatascience.com/gpipe-and-pipedream-two-new-frameworks-for-scaling-the-training-of-deep-neural-networks-32d17fd32c07
      

    (*本文为 AI科技大本营编译文章,转载请微信联系 1092722531


    精彩推荐



    2019 中国大数据技术大会(BDTC)再度来袭!豪华主席阵容及百位技术专家齐聚,15 场精选专题技术和行业论坛,超强干货+技术剖析+行业实践立体解读,深入解析热门技术在行业中的实践落地。5 折票倒计时 1 天

    640?wx_fmt=png


    推荐阅读

    展开全文
  • Microsoft/MMdnn:深度学习框架随心切换学习深度学习的各位同学都希望自己的模型能在不同的深度学习框架之间随意转换,比如,斯坦福大学CVGL实验室的Saumitro Dasgupta就做过一个把Caffe模型转换到TensorFlow的工具...
        

    640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1


    Microsoft/MMdnn:深度学习框架随心切换


    学习深度学习的各位同学都希望自己的模型能在不同的深度学习框架之间随意转换,比如,斯坦福大学CVGL实验室的Saumitro Dasgupta就做过一个把Caffe模型转换到TensorFlow的工具caffe-tensorflow。


    不过,两种框架可远远不够。


    为此,微软就做了一套能在不同的深度学习框架之间进行交互式操作的工具集——MMdnn,它是一个综合性的跨框架解决方案,能够用于深度神经网络模型的转换,可视化及诊断等操作,可在Caffe,Keras,MXNet,Tensorflow,CNTK和PyTorch等框架之间实现模型的转换。


    这里是它的GitHub链接:https://github.com/Microsoft/MMdnn


    其中,“MM”代表模型管理,“dnn”代表深度神经网络的缩写。本质上,它就是把一个框架训练的多个DNN模型转换成其他框架下的模型,主要功能如下:


    • 模型文件转换器:在不同框架之间转换DNN模型

    • 模型代码片段生成器:为不同框架生成训练或推理代码片段

    • 模型可视化工具:可视化不同框架下DNN模型的网络架构和参数

    • 模型兼容性测试(正在完善中)



    安装


    对于稳定版本的MMdnn,你可以通过如下命令获得:


    pip install https://github.com/Microsoft/MMdnn/releases/download/0.1.2/mmdnn-0.1.2-py2.py3-none-any.whl


    对于最新的版本,你可以用这个命令安装:


    pip install -U git+https://github.com/Microsoft/MMdnn.git@master



    功能


    模型转换


    从学术界到产业界,存在各种各样的深度学习框架来供开发人员、研究人员设计模型,然而,对于神经网络的结构,每种框架都有它自己的定义,并为模型设定它自己的保存格式,诸如此类的框架差异妨碍了模型之间的交互性操作。

    

    0?wx_fmt=jpeg


    为此,我们提供了一个这样的模型转换器,来帮助开发人员通过中间表示格式在不同框架之间实现模型的转换。


    支持框架

    • Caffe

    • Keras

    • MXNet

    • Tensorflow(实验研究性的)

    • Microsoft Cognitive Toolkit(CNTK)(生产性的)

    • PyTorch(生产性的)

    • CoreML(实验研究性的、生产性的)


    模型测试


    在一些当前框架所支持的ImageNet模型上测试模型的转换功能。


    0?wx_fmt=png


    正在完善的框架

    • Pytorch

    • CNTK

    • Caffe2



    模型可视化


    提交模型的IR json文件,使用MMdnn的模型可视化器来可视化模型结构及参数。


    再次以Keras框架的“inception_v3”模型为例。


    1. 下载预先训练的模型


    python -m mmdnn.conversion.examples.keras.extract_model -n inception_v3


    2. 预先训练的模型文件转换为中间表示


    python3 -m mmdnn.conversion._script.convertToIR -f keras -d keras_inception_v3 -n imagenet_inception_v3.json


    3. 打开MMdnn模型可视化器并选择文件keras_inception_v3.json

    

    0?wx_fmt=jpeg



    例子


    1.Keras "inception_v3" to CNTK及相关问题

    https://github.com/Microsoft/MMdnn/blob/master/docs/keras2cntk.md


    2.MXNet "resnet 152 11k" 到 PyTorch

    https://github.com/Microsoft/MMdnn/issues/6


    3.Tensorflow "resnet 101" 到 PyTorch

    https://github.com/Microsoft/MMdnn/issues/22


    4.Tensorflow "mnist mlp model" 到 CNTK

    https://github.com/Microsoft/MMdnn/issues/11


    5.Tensorflow "Inception_v3" 到 MXNet

    https://github.com/Microsoft/MMdnn/issues/30


    6.Caffe "AlexNet" 到 Tensorflow

    https://github.com/Microsoft/MMdnn/issues/10


    7.Caffe "inception_v4" 到 Tensorflow

    https://github.com/Microsoft/MMdnn/issues/26


    8.Caffe "VGG16_SOD" 到 Tensorflow

    https://github.com/Microsoft/MMdnn/issues/27



    贡献


    中间表示


    中间表示将网络体系结构存储在protobuf二进制文件中,并以NumPy本地的格式储存预训练的模型权重。


    注意!当前的IR权重数据是NHWC(最后通道)格式。


    详细信息在ops.txt和graph.proto中。欢迎提出新操作及任何意见。


    构架


    我们正在开发其他的框架模型转换及可视化功能,如Caffe2,PyTorch,CoreML等框架。更多有关RNN的相关操作正在研究中。欢迎提出任何贡献和建议!


    授权许可


    大多数情况下需要你同意参与者许可协议(CLA),声明你有权并授予我们使用你的贡献的权利。更多有关的详细信息,请访问https://cla.microsoft.com。


    当你提交pull请求时,CLA机器人将自动确定你是否需要提供CLA并适当地装饰PR(例如标签、注释等)。你只需要按照机器人提供的说明,使用我们的CLA,在整个回购期间完成一次即可。


    致谢


    感谢Saumitro Dasgupta的caffe初始代码 - > IR转换是对他的caffe-tensorflow项目的引用。



    热文精选


    2018年了,但愿你还有被剥削的价值!因为AI失业潮真的开始了...

    2018 年了,该不该下定决心转型AI呢?

    不用数学也能讲清贝叶斯理论的马尔可夫链蒙特卡洛方法?这篇文章做到了

    盘点深度学习一年来在文本、语音和视觉等方向的进展,看强化学习如何无往而不利

    先搞懂这八大基础概念,再谈机器学习入门!

    这三个普通程序员,几个月就成功转型AI,他们的经验是...

    干货 | AI 工程师必读,从实践的角度解析一名合格的AI工程师是怎样炼成的

    AI校招程序员最高薪酬曝光!腾讯80万年薪领跑,还送北京户口

    详解 | 如何用Python实现机器学习算法

    经验 | 如何高效学Python?


    640?wx_fmt=png

    展开全文
  • 计算机视觉不是深度学习最早看到突破的领域,真正让大家大吃一惊的颠覆传统方法的应用领域是语音识别,做出来的公司是微软,而不是当时如日中天的谷歌。计算机视觉应用深度学习堪称突破的成功点是2012年ImageNet比赛...

    简单的回顾的话,2006年Geoffrey Hinton的论文点燃了“这把火”,现在已经有不少人开始泼“冷水”了,主要是AI泡沫太大,而且深度学习不是包治百病的药方。

     

    计算机视觉不是深度学习最早看到突破的领域,真正让大家大吃一惊的颠覆传统方法的应用领域是语音识别,做出来的公司是微软,而不是当时如日中天的谷歌。计算机视觉应用深度学习堪称突破的成功点是2012年ImageNet比赛,采用的模型是CNN,而不是Hinton搞的RBM和DBN之类,就是Hinton学生做出来以他命名的AlexNet。

     

    (注:顺便提一下,2010年的ImageNet冠军是余凯/林元庆领导的NEC和UIUC Tom Huang组的合作团队,当时采用的方法是基于sparse coding+SVM。)

     

    当然,真正一直在研究CNN的专家是Yann LeCun,小扎后来拉他去FB做AI research的头。第一个CNN模型就是他搞出来的,即LeNet,原来就是做图像数字识别。不得不说,CNN非常适合2-D信号的处理任务,RNN呢,是时域上的拓展。

     

    现在CNN在计算机视觉应用的非常成功,传统机器学习方法基本被弃之不用。其中最大的一个原因就是,图像数据的特征设计,即特征描述,一直是计算机视觉头痛的问题,在深度学习突破之前10多年,最成功的图像特征设计 (hand crafted feature)是SIFT,还有著名的Bag of visual words,一种VQ方法。后来大家把CNN模型和SIFT比较,发现结构还蛮像的:),之后不是也有文章说RNN和CRF很像吗。

     

    CNN从AlexNet之后,新模型如雨后春笋,每半年就有新发现。这里随便列出来就是,ZFNet (也叫MatNet),VGGNet, NIN, GoogleNet (Inception), Highway Network, ResNet, DenseNet,SE-Net(Squeeze and Excitation Net),。。。基本上都是在ImageNet先出名的:)。

     

    简单回顾一下:

    • AlexNet应该算第一个深度CNN;
    • ZFNet采用DeconvNet和visualization技术可以监控学习过程;
    • VGGNet采用小滤波器3X3去取代大滤波器5X5和7X7而降低计算复杂度;
    • GoogleNet推广NIN的思路定义Inception基本模块(采用多尺度变换和不同大小滤波器组合,即1X1,3X3,5X5)构建模型;
    • Highway Networks借鉴了RNN里面LSTM的gaiting单元;
    • ResNet是革命性的工作,借鉴了Highway Networks的skip connection想法,可以训练大深度的模型提升性能,计算复杂度变小;
    • Inception-V3/4用1X7和1X5取代大滤波器5X5和7X7,1X1滤波器做之前的特征瓶颈,这样卷积操作变成像跨通道(cross channel)的相关操作;
    • DenseNet主要通过跨层链接解决vanishing gradient问题;
    • SE-Net是针对特征选择的设计,gating机制还是被采用;
    • 前段时间流行的Attention机制也是借鉴于LSTM,实现object-aware的context模型。

     

    在具体应用领域也出现了不少成功的模型,比如

    • detection问题的R-CNN,fast RCNN,faster RCNN,SSD,YOLO,RetinaNet,CornerNet等,
    • 解决segmentation问题的FCN,DeepLab,Parsenet,Segnet,Mask R-CNN,RefineNet,PSPNet,U-Net等,
    • 处理激光雷达点云数据的VoxelNet,PointNet,BirdNet,LMNet,RT3D,PIXOR,YOLO3D等,
    • 实现激光雷达和图像融合的PointFusion,RoarNet,PointRCNN,AVOD等,
    • 做图像处理的DeHazeNet,SRCNN (super-resolution),DeepContour,DeepEdge等,
    • 2.5 D视觉的MatchNet,DeepFlow,FlowNet等,
    • 3-D重建的PoseNet,VINet,Perspective Transformer Net,SfMNet,CNN-SLAM,SurfaceNet,3D-R2N2,MVSNet等,
    • 以及解决模型压缩精简的MobileNet,ShuffleNet,EffNet,SqueezeNet,
    • 。。。

     

    下面我们针对具体应用再仔细聊。

     

    图像/视频处理

     

    (计算机视觉的底层,不低级)。

     

    图像处理,还有视频处理,曾经是很多工业产品的基础,现在电视,手机还有相机/摄像头等等都离不开,是技术慢慢成熟了(传统方法),经验变得比较重要,而且芯片集成度越来越高,基本上再去研究的人就少了。经典的ISP,A3,都是现成的,当然做不好的也很难和别人竞争,成本都降不下来。

     

    这是一个典型成像处理的流程图:

     

     

    经典的ISP流程图如下:

     

     

    图像处理,根本上讲是基于一定假设条件下的信号重建。这个重建不是我们说的3-D重建,是指恢复信号的原始信息,比如去噪声,内插。这本身是一个逆问题,所以没有约束或者假设条件是无解的,比如去噪最常见的假设就是高斯噪声,内插实际是恢复高频信号,可以假设边缘连续性和灰度相关性,著名的TV(total variation)等等。

     

    以前最成功的方法基本是信号处理,机器学习也有过,信号处理的约束条件变成了贝叶斯规则的先验知识,比如sparse coding/dictionary learning,MRF/CRF之类,现在从传统机器学习方法过渡到深度学习也正常吧。

     

    1 去噪/去雾/去模糊/去鬼影

     

    先给出一个encoder-decoder network的AR-CNN模型(AR=Artifact Reduction):

     

    这是一个图像处理通用型的模型框架:

     

     

    2 增强/超分辨率(SR)

     

    Bilateral filter是很有名的图像滤波器,这里先给出一个受此启发的CNN模型做图像增强的例子:

     

     

    前面说过内插的目的是恢复失去的高频信息,这里一个做SR的模型就是在学习图像的高频分量:

     

     

    3 修补/恢复/着色

     

    用于修补的基于GAN思想的Encoder-Decoder Network模型:

     

     

    用于灰度图像着色(8比特的灰度空间扩展到24比特的RGB空间)的模型框架:

     

     

     

    计算机视觉的预处理(2-D)。

     

    计算机视觉需要图像预处理,比如特征提取,包括特征点,边缘和轮廓之类。以前做跟踪和三维重建,首先就得提取特征。特征点以前成功的就是SIFT/SURF/FAST之类,现在完全可以通过CNN形成的特征图来定义。

     

    边缘和轮廓的提取是一个非常tricky的工作,细节也许就会被过强的图像线条掩盖,纹理(texture)本身就是一种很弱的边缘分布模式,分级(hierarchical)表示是常用的方法,俗称尺度空间(scale space)。以前做移动端的视觉平台,有时候不得不把一些图像处理功能关掉,原因是造成了特征畸变。现在CNN这种天然的特征描述机制,给图像预处理提供了不错的工具,它能将图像处理和视觉预处理合二为一。

     

    1 特征提取

     

    LIFT(Learned Invariant Feature Transform)模型,就是在模仿SIFT:

     

     

    2 边缘/轮廓提取

     

    一个轮廓检测的encoder-decoder network模型:

     

     

    3 特征匹配

     

    这里给出一个做匹配的模型MatchNet:

     

     

    2.5-D计算机视觉部分(不是全3-D)

     

    涉及到视差或者2-D运动的部分一般称为2.5-D空间。这个部分和前面的2-D问题是一样的,作为重建任务它也是逆问题,需要约束条件求解优化解,比如TV,GraphCut。一段时间(特别是Marr时代)计算机视觉的工作,就是解决约束条件下的优化问题。

     

    后来,随机概率和贝叶斯估计大行其事,约束条件变成了先验知识(prior),计算机视觉圈里写文章要是没有 P (Probability) 和 B (Bayes),都不好意思发。像SVM, Boosting,Graphical Model,Random Forest,BP(Belief Propagation),CRF(Conditional Random Field),Mixture of Gaussians,MCMC,Sparse Coding都曾经是计算机视觉的宠儿,现在轮到CNN出彩:)。

     

    可以说深度学习是相当“暴力”的,以前分析的什么约束呀,先验知识呀在这里统统扔一边,只要有图像数据就可以和传统机器学习方法拼一把。

     

    1 运动/光流估计

     

    传统的方法包括局部法和全局法,这里CNN取代的就是全局法。

     

    这里是一个光流估计的模型:

     

    2 视差/深度图估计

     

    深度图估计和运动估计是类似问题,唯一不同的是单目可以估计深度图,而运动不行。

     

    这里是一个双目估计深度图的模型:

     

     

    而这个是单目估计深度图的模型:巧妙的是这里利用双目数据做深度图估计的非监督学习

     

     

    另外一个单目深度估计的模型:也是利用双目的几何约束做非监督的学习

     

     

    3 视频去隔行/内插帧

     

    Deinterlacing和Framerate upconversion视频处理的经典问题,当年Sony和Samsung这些电视生产商这方面下了很大功夫,著名的NXP(从Philips公司spin-off)当年有个牛逼的算法在这个模块挣了不少钱。

     

    基本传统方法都是采用运动估计和补偿的方法,俗称MEMC,所以我把它归类为2.5-D。前面运动估计已经用深度学习求解了,现在这两个问题自然也是。

     

    首先看一个做MEMC的模型:

     

     

    这是做Deinterlacing的一个模型:

     

    这是Nvidia的Framerate Upconversion方面模型:

     

     

    因为它采用optic flow方法做插帧,另外附上它的flow estimation模型:就是一个沙漏(hourglass)模式

     

     

    新视角图像生成

     

    刚才介绍单目估计深度图的时候,其实已经看到采用inverse warping方法做新视角生成的例子,在IBR领域这里有一个分支叫Depth Image-based Rendering (DIBR)。

     

    和上个问题类似,采用深度图学习做合成图像,也属于2.5-D空间。在电视领域,曾经在3-D电视界采用这种方法自动从单镜头视频生成立体镜头节目。以前也用过机器学习,YouTube当年采用image search方法做深度图预测提供2D-3D的内容服务,但性能不好。现在感觉,大家好像不太热衷这个了。

     

    这是一个产生新视角的模型:

     

     

    而这个是从单镜头视频生成立体视频的模型:

     

     

    有做编码/解码的,也是采用运动或者相似变换为基础,但性能不如传统方法,这里忽略。

     

    3-D,基于多视角(MVS)/运动(SFM)的重建,后者也叫SLAM

     

    这部分就是经典的计算机视觉问题:3-D重建。

     

    基本上可以分成两种路径:一是多视角重建,二是运动重建。前一个有一个经典的方法MVS(multiple view stereo),就是多帧匹配,是双目匹配的推广,这样采用CNN来解决也合理。当年CMU在Superbowl展示的三维重建和视角转化,轰动一时,就是基于此路径,但最终没有被产品化(技术已经转让了)。

     

    后一个在机器人领域成为SLAM,有滤波法和关键帧法两种,后者精度高,在稀疏特征点的基础上可以采用BA(Bundle Adjustment),著名的方法如PTAM,ORB-SLAM1/2,LSD-SLAM,KinectFusion(RGB-D),LOAM和Velodyne SLAM(LiDAR)等。如今SLAM已经成为AR产业的瓶颈,看看MagicLeap和HoloLens,大家不能总是在平面检测基础上安一个虚拟物体吧,真正的虚实结合是在一个普通的真实环境里才行。

     

    想想像特征点匹配,帧间运动估计,Loop Closure检测这些模块都可以采用CNN模型解决,那么SLAM/SFM/VO就进入CNN的探索区域。

     

    1 标定

     

    Calibration是计算机视觉的经典问题,摄像头作为传感器的视觉系统首要任务就是要确定自己观测数据和3-D世界坐标系的关系,即标定。摄像头标定要确定两部分参数,一是内参数,二是外参数。对于有多个传感器的视觉系统,比如深度测距仪,以前有Kinect RGB-D,现在有Velodyne激光雷达,它们相互之间的坐标系关系是标定的任务。

     

    外参数标定的完成帮助是校准数据,比如激光雷达的点云,RGB-D的深度图,还有摄像头的图像像素集,它们一定存在一个最佳匹配标准,这就可以通过数据训练NN模型来完成。而标定参数就是NN模型回归输出的结果。

     

    这里是一个激光雷达和摄像头标定的系统框图:

     

     

    它的模型CalibNet结构视图:

     

     

    2 Visual Odometry(VO)

     

    VO属于SLAM的一部分,只是估计自身运动和姿态变化吧。VO是特斯拉的前Autopilot2.0负责人David Nister创立的,他之前以两帧图像计算Essential Matrix的“5点算法”而出名,现在是Nvidia的自动驾驶负责人,公司VP。

     

    这里是一个和惯导数据结合的VIO(Visual-Inertial Odometry)NN模型:

     

     

    这是著名的AR创业公司MagicLeap提出的VO模型:两部分组成,即特征提取和匹配(Homography)。

     

     

    顺便加一个,激光雷达数据做Odometry的CNN模型:

     

     

    3 SLAM (Mono, Stereo, RGB-D, LiDAR)/SFM

     

    运动恢复结构是基于背景不动的前提,计算机视觉的同行喜欢SFM这个术语,而机器人的peers称之为SLAM。SLAM比较看重工程化的解决方案,SFM理论上贡献大。

     

    先看一个单摄像头的SFM系统框图:

     

     

    它的NN模型SFM-Net,包括Motion和Structure两部分:

     

     

    再附上一个SLAM的模型CNN-SLAM:主要是加上一个单目深度图估计的CNN模块。

     

     

    这是一个用CNN的基于Lidar的localization方法:不仅需要点云数据,还输入反射值灰度图。

     

     

    图像像素运动是optic flow,而3-D场景的运动称之为scene flow,如果有激光雷达的点云数据,后者的估计可以通过ICP实现,这里给出一个CNN模型的实现方法FlowNet3D,是PointNet的扩展:

     

     

    4 MVS

     

    MVS的传统方法可以分成两种:region growing和depth-fusion,前者有著名的PMVS,后者有KinectFusion,CNN模型求解MVS的方法就是基于此。

     

    先看看一个做MVS任务的基于RNN中LSTM的3D-R2N2模型:

     

     

    它的系统框图如下:

     

     

    UIUC/Facebook合作的DeepMVS模型:

     

     

    这是他们的系统框图:

     

     

    现在看到的是Berkeley分校Malik组提出的LSM(Learnt Stereo Machine )模型:

     

     

    下面是最近香港权龙教授组提出的MVSNet模型:

     

     

    计算机视觉的高层:环境理解

     

    这部分是深度学习在计算机视觉最先触及,并展示强大实力的部分。出色的工作太多,是大家关注和追捧的,而且有不少分析和总结文章,所以这里不会重复过多,只简单回顾一下。

     

    1 语义分割/实例分割(Semantic/Instance Segmentation)

     

    语义分割最早成功应用CNN的模型应该是FCN(Fully Convolution Network),由Berkeley分校的研究人员提出。它是一种pixel2pixel的学习方法,之后各种演变模型,现在都可以把它们归类于Encoder-Decoder Network。

     

    这里是去年CVPR的一片论文在总结自动驾驶的实时语义分割算法时给出的框图:

     

     

    其中Encoder部分特别采用了MobileNet和ShuffleNet。

     

    实例分割是特殊的语义分割,结合了目标检测,可以说是带有明确轮廓的目标检测,其代表作就是Mask R-CNN,应该是何凯明去FB之后的第一个杰作。

     

    这是一个借鉴目标检测算法SSD的实例分割模型:

     

     

    而下面这个是从目标检测算法Faster-RCNN演变的实例分割模型MaskLab,论文发表在去年CVPR‘18:

     

     

    这是它修正Mask的方法示意图:

     

     

    这是一个基于3-D点云的语义分割NN模型:

     

     

    2 检测/识别(特别例子:人脸)

     

    目标检测的开拓性工作应该是Berkeley分校Malik组出来的,即两步法的R-CNN(Region-based CNN),借用了传统方法中的Region Proposal。之后不断改进的有fast RCNN和faster RCNN,每次都有新点子,真是“群星闪耀”的感觉。

     

    一步法的工作,有名的就是SSD(Single Shot Detection)和YOLO(You Only Look Once),期间何凯明针对one-stage和two-stage方法的各自优缺点引进一个Focal Loss,构建的新方法叫RetinaNet,而后来YOLO3基本也解决了精度低的弱点。

     

    这里我在纸上,手画了一个算法发展草图(其实还有一些方法没有包括在里面,比如densebox,deepbox,R-FCN,FPN等等)。

     

     

    ImageNet本身就是一个1000多种物体识别比赛,一般公布的是top 5的结果(可见最早精度有多低(:)。CNN在ImageNet的发展史,就是它在图像识别的一段近5年的历史了:)。

     

    激光雷达点云数据的处理,无论识别还是分割,有PointNet以及改进的CNN模型:

     

     

    基于点云做目标识别的例子有Apple公司研究人员发表的VoxelNet模型:

     

     

    将点云和RGB图像结合的目标检测CNN模型例子如下:

     

     

    这里顺便提一下人脸识别,因为是对人脸的个体属性判别,所以这个课题应该算fine grained recognition。就好像对狗或者马这种动物继续判别它的品种,都是细分的。

     

    请注意,人脸识别分人脸验证(face verification)和人脸确认(face identification);前者是指两个人是不是同一个人,1-to-1 mapping,而后者是确定一个人是一群人中的某个,1-to-many ampping。以前经常有报道机器的人脸识别比人强了,都是指前者,假如后者的话,那谁能像机器一样识别上万人的人脸数据库呢?何况中国公安部的数据高达亿的数量级。

     

    一个完整的人脸识别系统,需要完成人脸检测和人脸校准(face alignment),而后者是需要人脸关键点(facial landmarks)的检测,也是可以基于CNN模型来做。这里以FB的DeepFace模型为例吧,给出一个人脸识别的系统框图:

     

     

    这是不久前刚刚提出的人脸检测模型: Selective Refinement Network

     

     

    而这里给出一个基于facial landmarks做校准的模型:

     

     

    顺便提一下旷世科技的Pyramid CNN模型和商汤科技的DeepID2模型(一共发布过4个DeepID版本)依次如图:

     

     

    3 跟踪(特别例子:人体姿态/骨架)

     

    目标跟踪是一个递推估计问题,根据以前的图像帧目标的信息推算当前目标的位置甚至大小/姿态。有一阵子,跟踪和检测变得浑为一体,即所谓tracking by detection,跟踪也可以看出一个目标分割(前后景而言)/识别问题。

     

    跟踪是短时(short term)邻域的检测,而一般的检测是长时(long term)大范围的检测。跟踪的困难在于目标的遮挡(分部分还是全部),背景复杂(相似目标存在),快速(fast)以及突变(agile)运动等等。比如,跟踪人脸,当转90度成侧脸时就会有以上这些问题。

     

    跟踪方法有一个需要区分的点,多目标(MOT)还是单目标(SOT)跟踪器。单目标不会考虑目标之间的干扰和耦合,而多目标跟踪会考虑目标的出现,消失以及相互交互和制约,保证跟踪各个目标的唯一性是算法设计的前提。

     

    跟踪目标是多样的,一般是考虑刚体还是柔体,是考虑单刚体还是铰接式(articulated),比如人体或者手指运动,需要确定skeleton模型。跟踪可以是基于图像的,或者激光雷达点云的,前者还要考虑目标在图像中大小的变化,姿态的变化,难度更大。

     

    基于以上特点,跟踪可以用CNN或者RNN模型求解,跟踪目标的描述本身就是NN模型的优势,检测也罢,分割或者识别也罢,都不是问题。运动特性的描述也可以借鉴RNN模型,不过目前看到的结果这部分不比传统方法好多少。

     

    先看一个单目标跟踪的CNN模型:

     

     

    这个展示的模型是一个基于R-CNN检测模型扩展的单目标跟踪方法:

     

     

    多目标跟踪模型有这么一个例子:

     

     

    下面是一个基于RNN的多目标跟踪模型:

     

     

    补充一个基于RGB图像和3-D点云的目标跟踪NN模型:

     

     

    顺便谈一下人体姿态和骨架跟踪问题。以前传统方法在人体姿态估计花了很大力气但效果不好,提出了part-based目标模型,比如constellation model, pictorial structure, implicit shape model, deformable model等等。

     

    最近CMU提出一个方法,基于Part Affinity Fields(PAF)来估计人体姿态和骨架,速度非常快。PAF是一个非参数描述模型,用来将图像像素和人体各肢体相关起来,看它的架构如图,采用的是two branch CNN结构,联合学习各肢体的相关性和位置。

     

    下面这个是其中双部图形匹配(Bipartie matching)算法的示意图。

     

    这种多目标快速姿态跟踪的实现对人体行为的理解是非常重要的工具。

     

    计算机视觉的推广领域

     

    这里我选了4个计算机视觉的应用谈谈深度学习对这些领域的推动,在CNN或者RNN“火”之前,这些应用已经存在,但在识别分类任务上性能有限罢了。自动驾驶的应用在另外文章已经提过了,在此忽略。

     

    1 内容检索

     

    CBIR(Content-based Image Retrieval)有两波人搞,一波是计算机科学的,把这个问题当数据库看待;另一波人是电子过程的,认为是图像匹配问题。刚开始大家也是对这个问题的semantic gap比较头疼,用了一些feature,比如颜色,纹理,轮廓,甚至layout,效果真不咋样。

     

    后来有了SIFT,用了Information Retrieval的概念Bag of Words,加上inverted Indexing,TF-IDF(term frequency–inverse document frequency),hashing之类的技术变得好多了,每年ACM MM会议上一堆的paper。深度学习进来,主要就是扮演特征描述的角色。

     

    这是一个CBIR采用CNN的框架:

     

     

    这个展示的是image matching用于CBIR的CNN模型:

     

     

    2 增强现实

     

    AR一开始就不好做,不说VR那部分的问题,主要是实时性要求高,无论识别还是运动/姿态估计,精度都不好。现在计算机硬件发展了,计算速度提高了,加上深度学习让识别变得落地容易了,最近越来越热,无论是姿态估计还是特征匹配(定位),都变得容易些了。希望这次能真正对社会带来冲击,把那些AR的梦想都实现。

     

    这个框架是Google Glass的AR应用平台,其中几个模块都可以基于CNN实现:

     

     

    下面给出的是camera motion 的encoder-decoder network框架:三个模型串联,其中一个有迭代。

     

     

    下面的模型展示了特征提取和描述的作用,AR中直接可以用做re-localization。

     

     

    3 内容加注/描述

     

    Captioning是计算机视觉和NLP的结合。你可以把它当成一个“检索”任务,也可以说是一个“翻译”工作。深度学习,就是来帮助建立一个语言模型并取样产生描述。

     

     

    4 内容问答(Q&A)

     

    Q&A 也是计算机视觉和NLP的结合,其实质是在图像描述和语言描述之间建立一个桥梁。有人说,Q&A是一个Turing Test的好问题,这里深度学习就是在帮助理解图像的描述,问题的组成,以及它们模式之间的交互。

     

     

     

     

    有些CNN的应用还是需要进一步改进模型,性能并没有达到满意。不过,大家高兴地看到深度学习已经进来了,以后随着研究的深入性能会越来越好。

     

    End

    附上原文地址 | https://zhuanlan.zhihu.com/p/55747295

    展开全文
  • 现在各种名词非常火,什么人工智能、机器学习、深度学习,那么我要学习它,当然是要在一个大的方向、轮廓上看到它。比如爬一座山,先远远的看看,对它有一个大致的了解。 好了,先上一张图,远远的看一下: 如何...

    目录

    现在各种名词非常火,什么人工智能、机器学习、深度学习,那么我要学习它,当然是要在一个大的方向、轮廓上看到它。比如爬一座山,先远远的看看,对它有一个大致的了解。

    好了,先上一张图,远远的看一下:

    如何理解人工智能、机器学习和深度学习三者的关系

    嗯嗯,这么一看是不是清楚了很多呢?再来一张:

     

    人工智能、机器学习和深度学习三者的关系

     

    概念

    深度学习(人工神经网络的研究的概念),英文:Deep Learning,简称:DL。

    PS:看到ML、DL不要再理解成Make Love、Do Love哦!还清晰的记得有个小伙伴看到HTML问我,这是“How To Make Love?”。

    以下内容来自百科:

    深度学习的概念源于人工神经网络的研究。含多隐层的多层感知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。

    深度学习的概念由Hinton等人于2006年提出。基于深度置信网络(DBN)提出非监督贪心逐层训练算法,为解决深层结构相关的优化难题带来希望,随后提出多层自动编码器深层结构。此外Lecun等人提出的卷积神经网络是第一个真正多层结构学习算法,它利用空间相对关系减少参数数目以提高训练性能。 

    深度学习是机器学习中一种基于对数据进行表征学习的方法。观测值(例如一幅图像)可以使用多种方式来表示,如每个像素强度值的向量,或者更抽象地表示成一系列边、特定形状的区域等。而使用某些特定的表示方法更容易从实例中学习任务(例如,人脸识别或面部表情识别)。深度学习的好处是用非监督式或半监督式的特征学习和分层特征提取高效算法来替代手工获取特征。深度学习是机器学习研究中的一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本。 

    同机器学习方法一样,深度机器学习方法也有监督学习与无监督学习之分.不同的学习框架下建立的学习模型很是不同.例如,卷积神经网络(Convolutional neural networks,简称CNNs)就是一种深度的监督学习下的机器学习模型,而深度置信网(Deep Belief Nets,简称DBNs)就是一种无监督学习下的机器学习模型。

    释意

    看完概念你懂了吗?我是没懂。

    在理解深度学习之前我们要先了解两个概念,机器学习和神经网络。

    机器学习和深度学习的具体区别和联系是啥?

    机器学习

    简单的说机器学习就是让机器去分析数据找规律,并通过找到的规律对新的数据进行处理。

    机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。机器学习算法是一类从数据中自动分析获得规律,并利用规律对未知数据进行预测的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。很多推论问题属于无程序可循难度,所以部分的机器学习研究是开发容易处理的近似算法。

    神经网络

    神经网络简单点将就是由好多个神经元组成的系统。这是模拟人类的神经网络。

    神经元是一个简单的分类器,你输入一个

    比如我们有一大堆猫、狗照片,把每一张照片送进一个机器里,机器需要判断这幅照片里的东西是猫还是狗。我们把猫狗图片处理一下,左边是狗的特征向量,右边是猫的

     

    神经元一个缺点是:它只能切一刀!你给我说说一刀怎么能把下面这两类分开吧。

     

    解决办法是多层神经网络,底层神经元的输出是高层神经元的输入。我们可以在中间横着砍一刀,竖着砍一刀,然后把左上和右下的部分合在一起,与右上的左下部分分开;也可以围着左上角的边沿砍10刀把这一部分先挖出来,然后和右下角合并。

    每砍一刀,其实就是使用了一个神经元,把不同砍下的半平面做交、并等运算,就是把这些神经元的输出当作输入,后面再连接一个神经元。这个例子中特征的形状称为异或,这种情况一个神经元搞不定,但是两层神经元就能正确对其进行分类。

    只要你能砍足够多刀,把结果拼在一起,什么奇怪形状的边界神经网络都能够表示,所以说神经网络在理论上可以表示很复杂的函数/空间分布。但是真实的神经网络是否能摆动到正确的位置还要看网络初始值设置、样本容量和分布。

    深度学习

    那什么是深度学习呢?深度学习简单点说就是一种为了让层数较多的多层神经网络可以训练,能够运行起来而演化出来的一系列的新的结构和新的方法。

    就像下图

    普通的神经网络可能只有几层,深度学习可以达到十几层。深度学习中的深度二字也代表了神经网络的层数。现在流行的深度学习网络结构有"CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的等。现在流行的深度学习框架有MXnet,tensorflow,caffe等,而在这些框架之上(或许不太准确),还有PyTorchKeras等。

    应用场景

    深度学习目前的行业应用、一些标志性公司、代表性的技术等

    语音识别技术:国内公司讯飞、百度、阿里,国外公司亚马逊,微软等,行业应用就是智能音箱等产品。

    图像识别技术:比如做安防的海康威视,图森科技,依图科技,旷视科技,代表性的就是面部识别,人脸识别,刷脸解锁、支付等。

    自动驾驶技术:比如特斯拉,uber,百度等公司开发的。

    金融领域的如:预测股价、医疗领域的疾病监测,教育领域的技术赋能等。

    小结

    看山是山,这里我们弄明白它属于机器学习,而机器学习属于人工智能,而人工智能呢?也就是由人来实现的东西,智能本不是机器的,而是人的;是人通过一些技术手段赋予机器的,而赋予它的一个强有力的方法就是深度学习。而深度学习中的神经网络模型,其设计灵感来自于生物神经网络。历史上,科学家一直希望模拟人的大脑,造出可以思考的机器。人为什么能够思考?科学家发现,原因在于人体的神经网络。

    神经网络似乎是比较难懂的,我们还要去再学习一下生物课程吗?

    推荐你看一下阮一峰老师写的:神经网络入门

    参考

    深度学习和机器学习有什么差别?

    深度学习如何入门?作者:毛玉博 来源:知乎

    深度学习入门实战(一):像Prisma一样算法生成梵高风格画像

    百科词条:深度学习

    下一篇

    为什么要用深度学习?

    相关:

    机器学习 vs. 深度学习

    神经网络入门 

    展开全文
  •  对于很多初入学习人工智能的学习者来说,对机器学习、深度学习、人工智能的概念和区别还不是很了解,那么接下来就给大家从概念和特点上进行阐述。先看下三者的关系。  人工智能包括了机器学习,机器学习包括...
  • 深度学习入门书籍推荐: 想入门深度学习却不知道该如何下手?我整理了这份知识清单。 希望能够节省你的时间,对你有所帮助。 2019 年最佳机器学习和深度学习书籍的名单: 《深度学习》by Ian Goodfellow, Yoshua ...
  •  之前本博客整理过数千道微软等公司的面试题,侧重数据结构、算法、海量数据处理,详见:微软面试100题系列,今17年,近期和团队整理BAT机器学习面试1000题系列,侧重机器学习、深度学习。我们将通过这个系列索引绝...
  • /* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ ... (想更系统地学习深度学习知识?请参考:深度学习枕边书)   聊天机器人(也可以称为语音助手、聊天助手、对话机器人...
  • 最近华为开源了深度学习框架MindSpore,一时成为了热点。我之前也点评了很多微软、Google、腾讯等厂商的框架,有些点评文章还被官方社区收录,今天为大家解析下MindSpore。 首先阐明下我个人的观点,华为开源深度...
  • 机器学习、深度学习、强化学习和人工智能的关系是什么?人工智能的学习算法大家庭1. 机器学习的定义2. 深度学习的定义3. 强化学习的定义4. 迁移学习的定义5. 人工智能的定义6. 机器学习 VS 深度学习 VS 强化学习 VS ...
  • 深度学习较其他机器学习方法在各类任务中都表现优异,各个机构或院校也花了巨大的精力和时间投入到深度学习,并取得了令人惊叹的成就。但深度学习近来也暴露出其内在缺陷,很多学界领军人物都在积极探讨解决办法和...
  • 边缘计算与深度学习综述摘要背景,度量与框架深度学习的背景深度学习性能的度量DNN推理和训练的可用框架深度学习在边缘侧的应用计算机视觉自然语言处理网络功能IOT虚拟现实和增强现实(VR and AR)边缘侧的快速推理...
  • 深度学习的昨天、今天和明天 深度学习的发展历程 发现不一样的美 机器学习是人工智能领域的一个重要学科。自从20世纪80年代以来,机器学习在算法、理论和应用等方面都获得巨大成功。2006年以来, 机器...
  • 概述2015年11月9日,Google发布人工智能系统TensorFlow并宣布开源。这两年在不管在国内还是在国外,人工智能、机器学习仿佛一夜...Facebook、苹果、微软,甚至国内的百度,Google 自然也在其中。去年早些时候 Google De
  • Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04-08   声明: 1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家...
  • 深度学习如何入门?

    2018-04-28 13:20:38
    序言人工智能现在这么火,很多人都想转行,跃跃欲试,但是如果方法不对,就会走很多弯路比如:有的人就非要系统学习数学知识、然后再系统学习Python、然后再学习机器学习,最后才学深度学习,其实如果想尽快入门并且...
  • 深度学习概述

    2016-03-06 20:59:05
    这篇文章主要是为了对深度学习(DeepLearning)有个初步了解,算是一个科普文吧,文章中去除了复杂的公式和图表,主要内容包括深度学习概念、国内外研究现状、深度学习模型结构、深度学习训练算法、深度学习的优点、...
  • 微软亚洲研究院刘铁岩博士:迎接深度学习的“大”挑战(一) 所属栏目: 科技资讯 发布时间: 2017-03-11 14:42:10 文章来源:雷锋网 阅读:2674 微软亚洲研究院刘铁岩博士:迎接深度学习的“大”...
  • 在俞栋接受CSDN专访解读基于深度学习的语音识别技术及CNTK开源软件的同时,《解析深度学习-语音识别实践》一书的另一位作者、微软人工智能首席科学家邓力也接受CSDN专访,以另外的视角诠释了语音识别领域的最新技术...
1 2 3 4 5 ... 20
收藏数 15,012
精华内容 6,004
关键字:

例子 微软深度学习