2019-11-29 09:14:52 weixin_42137700 阅读数 47

2019-11-28 18:39:22

一文读懂深度学习:这个AI核心技术被美国掌控,很危险

 

 

“中国有多少数学家投入到人工智能的基础算法研究中?”

 

今年4月底,中国工程院院士徐匡迪等多位院士的发声,直击我国在算法这一核心技术上的缺失,引发业界共鸣,被称为“徐匡迪之问”。

 

由此,“依靠开源代码和算法是否足够支撑人工智能产业发展?”、“为什么要有自己的底层框架和核心算法?”等一系列问题,成为行业热议的话题。

 

事实上,除了核心算法之外,对底层框架的忽视,也成为影响我国人工智能发展的重要因素,甚至比“缺芯少魂”、“卡脖子”问题更危险!

 

然而,想要理清其中的缘由,就需要从读懂机器学习开始。

 

 

一文读懂深度学习:这个AI核心技术被美国掌控,很危险

 

什么是机器学习?

 

众所周知,AI的根本目的就是让计算机模拟人类的行为和思维,以实现解放人力,提升效率,降低成本。其中,机器学习(Machine Learning)则是AI的智慧源泉。

 

从学术上来说,机器学习涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多领域交叉的课题和技术。

 

从广义上来说,机器学习就是赋予计算机学习能力,并实现模仿人类的一种方法。

 

从技术应用上来说,机器学习是利用大量数据,训练出专用的算法模型,然后通过该模型实现类似人的预测、推理,从而获取决策的方法。

 

从层级上来说,机器学习位于AI的技术层,与其他技术的相融合,构成了计算机视觉、智能语音、模式识别、数据挖掘、统计学习等AI核心技术,并在应用层得以体现。

 

从AI发展来看,几乎所有核心技术和应用场景的背后,都离不开机器学习所赋予的学习能力,也就是智能。

 

一文读懂深度学习:这个AI核心技术被美国掌控,很危险

 

 

总之,机器学习既是人工智能的核心,也是计算机获得学习能力和智力的方法或途径。

 

而机器学习的核心则是算法。

 

 

一文读懂深度学习:这个AI核心技术被美国掌控,很危险

 

深度学习算法与底层框架

 

作为AI大三元素(数据、算力、算法),目前主流的算法主要面向机器学习领域。因此,机器学习也可以理解为用于训练和推理的算法合集。

 

目前,机器学习算法可以分为传统算法和深度学习(Deep Learning)算法两大类。

 

 

一文读懂深度学习:这个AI核心技术被美国掌控,很危险

 

 

深度学习是机器学习中一个新兴的研究方向,也是一个复杂的机器学习算法。深度学习的概念源于人工神经网络的研究,建立模拟人脑进行分析学习的神经网络,以模仿人脑的机制来解释数据,强调模型结构的深度和明确特征学习的重要性。

 

 

一文读懂深度学习:这个AI核心技术被美国掌控,很危险

 

 

因此,深度学习使计算机实现模仿视听和思考等人类的活动,解决了大量复杂的模式识别难题,从而推动计算机视觉、智能语音等复杂AI基础技术的落地。

 

可以说,深度学习算法决定了未来AI的发展趋势,乃是兵家必争之地。

 

现在,全球AI领域,深度学习已经超越传统机器学习,成为主流算法。但是,机器学习仍未被取代,两者呈现互补的态势。随着深度学习与神经网络算法的结合,不仅降低了算法训练的门槛,更衍生出大量热门算法以及相应的底层构架。

 

与依赖于芯片的算力不同,算法由于开源代码、自动化工具等助力,门槛相对降低不少,因而成为初创公司不错的切入点。现在,大多AI企业基本都是围绕算法及相应的应用场景做文章,在国内尤为普遍。

 

然而,这些基于开源代码和自动化工具的算法往往过于通用和初级,仅仅依托国内海量数据储备和丰富的应用场景的优势,实现最基本的功能而已。真正核心和关键算法仍然掌握在国外大厂手中,核心竞争力明显不足。

 

而且,不仅是核心算法,深度学习的底层框架也同样来自于国外厂商。

 

底层框架,一般被称作为开源框架或算法训练平台。通俗来说,就是AI工具包,其作用就是用以训练算法模型的平台。

 

如果将算法比作“子弹”的话,底层框架就是“军工厂”,重要性不言而喻。

 

仅仅是算法的缺失,可以通过企业、开发者及整个行业的共同努力来弥补,但连工具都被“卡脖子”的话,显然将大大制约我国深度学习,乃至整个AI产业的发展。

 

 

一文读懂深度学习:这个AI核心技术被美国掌控,很危险

 

外来的和尚好念经

 

目前,主流的深度学习底层框架虽然大多已经开源,但基本都来自于美国科技巨头及大学相关实验室,例如TensorFlow(谷歌)、PyTorch(Facebook)、MXNet(亚马逊)、CNTK(微软)、Deeplearning4j(美国AI初创公司Skymind)、Theano(蒙特利尔理工学院)、Caffe(加州大学伯克利/贾扬清开发)、Keras(谷歌工程师FrançoisChollet开发)等等。

 

一文读懂深度学习:这个AI核心技术被美国掌控,很危险

 

 

其中, TensorFlow和PyTorch应用最为广泛,全球AI企业都将其视为重要的工具包。据TensorFlow网站显示,京东、中国移动、美团、搜狗等中国企业都在使用该框架,用于深度学习的应用和开发。

 

任何企业和开发者都可以将数据馈入其中,并开始训练自己的算法模型,无需重头开始自行开发底层框架和开发平台,所谓 “站在巨人的肩膀”。

 

谷歌、Facebook、亚马逊、微软也在不遗余力地投入,对这些底层框架进行维护、升级和推广,以确保其受到全球开发者的欢迎。根本目的就是建立统一的标准和规范,进而形成完整的生态。最简单的例子就是谷歌的安卓操作系统,虽为开源,但也形成了技术壁垒,让其他厂商难以逾越。

 

同时,大量企业和开发者也在为这些开源构架默默地做着贡献,从而推动其不断壮大。从另一个层面来说,尽管底层框架均为开源、免费,但获得全球开发者助力的同时,也省去了建立国际性开发团队的巨额成本。

 

其实,国内巨头已经意识到了这个问题。BAT、华为、商汤、旷视、360以及浪潮等厂商都已经推出了各自的机器学习底层框架。

 

一文读懂深度学习:这个AI核心技术被美国掌控,很危险

 

 

尤其是百度飞桨(Paddle Paddle)自2016年开源起,一直在不断升级和推广,以吸引更多的企业和开发者的关注。2017年,腾讯Angel、360 Xlearning先后宣布开源。2018年年底,阿里x-deeplearning也正式开源。今年8月,华为推出了MindSpore深度学习框架,并将在2020年第一季度开源。此外,包括商汤、旷视、浪潮等厂商虽然已经拥有自己的底层构架,但遗憾的是并没有开源。

 

最近,小米宣布语音识别开源工具Kaldi 之父DanielPovey将出任语音首席科学家,很可能会加大相关底层构架的研发。

 

尽管中国厂商已经拥有了自研底层框架的实力,但在先入为主的国外开源构架面前,不仅用户量不足,而且缺乏贡献者,更有过于封闭的问题,因此底层构架的国产化可谓路漫漫。

 

一文读懂深度学习:这个AI核心技术被美国掌控,很危险

 

如何突围?

 

随着国内自研AI芯片成为全新的风潮,让人看到了突破芯片“卡脖子”,实现“弯道超车”的可能。

 

即便如此,现在中国AI基础研究和基础设施仍然相当薄弱,包括硬件在内的大量核心技术掌控在美国手中,更随时面临“技术封锁”和“断供”的风险。

 

同样的情况也发生在深度学习领域,核心算法和底层构架的缺失,一旦风险爆发,将对中国AI发展带来致命影响。

 

从国外厂商在AI领域的布局来看,无论是云计算、芯片,还是算法和底层框架,均以构建自己的生态为根本目的,从而建立起牢不可破的“护城河”。

 

好在,阿里、百度、华为等国内巨头已经从各个角度开展布局,阿里平头哥“含光800”、华为麒麟系列芯片、鸿蒙操作系统以及百度飞桨等都是典型的代表。其中,今年7月,百度宣布飞桨与华为麒麟展开合作,芯片与底层构架的联手,无疑将共同推动中国深度学习和AI产业的落地和发展。相信这也是建立中国力量生态圈最好范例。

 

此外,建立和推动开源文化,也是摆在中国企业面前的老生常谈的问题。唯有拥抱开放、共享,才能真正推动中国核心技术,尤其是AI技术的快速进步和发展,从而突破“卡脖子”封锁。

 

 

一文读懂深度学习:这个AI核心技术被美国掌控,很危险

 

 

目前,国内深度学习厂商主要分为云计算平台、AI初创企业、传统计算厂商以及大数据企业多个阵营。其中,云计算平台主要是BAT、华为、京东等互联网巨头为首;AI初创企业主要有第四范式、商汤、旷视、寒武纪等;浪潮、中科曙光等则发挥自身计算优势,占有一席之地;星环科技、美林数据、九章云极等大数据企业拥有数据挖掘的优势,也成为生态中不可获取的力量。

 

由此可知,除了AI本身之外,深度学习、机器学习与云、计算、数据等关键技术密不可分,这也恰恰证实了国内海量数据储备和互联网基础设施建设对AI行业起到的推动作用。然而,正如上文所述,唯有掌控核心算法和底层框架,拥有基础设施和核心技术的自研能力,才能真正主导深度学习及机器学习行业。

 

总之,就连机器学习、深度学习这样的AI工具包都一直掌控在美国手中,无疑比芯片、操作系统等核心技术的“卡脖子”问题更危险!

2017-11-12 22:13:20 huangjun124 阅读数 636
2017-11-10 新智元


中国人工智能资讯智库社交主平台新智元主办的 AI WORLD 2017 世界人工智能大会11月8日在北京国家会议中心举行,大会以“AI 新万象,中国智能+”为主题,上百位AI领袖作了覆盖技术、学术和产业最前沿的报告和讨论,2000多名业内人士参会。新智元创始人兼CEO杨静在会上发布全球首个AI专家互动资讯平台“新智元V享圈”。


全程回顾新智元AI World 2017世界人工智能大会盛况:


新华网图文回顾:

http://www.xinhuanet.com/money/jrzb20171108/index.html

爱奇艺(上)http://www.iqiyi.com/v_19rrdp002w.html

爱奇艺(下)http://www.iqiyi.com/v_19rrdozo4c.html

阿里云云栖社区:

https://yq.aliyun.com/webinar/play/316?spm=5176.8067841.wnnow.14.ZrBcrm


新智元AI World 2017世界人工智能大会开场视频

 新智元推荐  

来源:THU数据派

作者:Radu Raicea  翻译:程思衍


【新智元导读】Medium上获得接近2万赞的深度学习入门指南,结合图文为你缕清深度学习中的各个基础概念的内涵。



Image credit: Datanami

 

人工智能(AI)和机器学习(ML)都属于目前最热门的话题。

 

在日常生活中,AI这个术语我们随处可见。你或许会从立志高远的开发者那里听说她(他)们想要学习AI。你又或许会从运营者那里听到他们想要在他们的的服务中实施AI。但往往这些人中的绝大多数都并不明白什么是AI。

 

在你阅读完这篇文章之后,你将会了解AI和ML的基本知识。而更重要的是,你将会明白深度学习(https://en.wikipedia.org/wiki/Deep_learning),这类最热门的机器学习,是如何运作的。

 

这篇教程适用于所有人,所以本文并没有涉及高级数学。

 

背景


理解深度学习如何工作的第一步是掌握下列重要术语之间的区别。

 

  • 人工智能(AI)v.s.机器学习(ML)

 

人工智能是人类智能在计算机上的复制。

 

AI的研究之初,那时的研究人员尝试着复制人类智能来完成像玩游戏这样特定的任务。他们引入了大量的计算机需要遵守的规则。有了这些规则,计算机就有了一份包含各种可能行动的清单,并基于这些规则作出决定(https://en.wikipedia.org/wiki/Expert_system)

 

机器学习,指的是机器使用大量数据集而非硬编码规则来进行学习的能力。

 

ML允许计算机通过自身来学习。这种学习方法得益于现代计算机的强大性能,性能保证了计算机能够轻松处理样本数巨大的数据集。

 

  • 监督学习 v.s. 非监督学习

 

监督学习(https://en.wikipedia.org/wiki/Supervised_learning)指的是利用已标注数据集进行的学习,该数据中包含输入和期望输出。

 

当你利用监督学习来训练AI时,你提供给它一份输入,并告诉它预期的输出。

 

如果AI所生成的输出是错误的(译者注:与期望输出不同),它将重新调整计算(注:应该是对公式的参数进行重新计算)。这个过程将会在数据集上迭代运行,直到AI不再犯错误。

 

预测天气的AI便是监督学习的一个典型例子。它通过学习过往数据来预测未来天气。该训练数据拥有输入(气压,湿度,风速)和输出(温度)。

 

非监督学习(https://en.wikipedia.org/wiki/Unsupervised_learning)是机器学习应用没有指定结构的数据集来进行学习的任务。

 

当你应用非监督学习来训练AI时,你可以让AI对数据进行逻辑分类。

 

电商网站上的行为预测AI便是非监督学习的一个例子。它无法通过拥有输入和输出的已标注数据集来进行学习。相反地,它在输入数据上创建它自己的分类。它将会告诉你哪一种用户最可能购买差异化的商品。


深度学习又是如何运作的呢?


现在你已经准备好去理解什么是深度学习,以及它是如何运作的。

 

深度学习是机器学习中的一种方法。在给予它一组输入后,它使我们能够训练AI来预测结果。监督学习和非监督学习都能够用来训练AI。

 

我们将通过建立一个假设的机票价格预估系统来阐述深度学习是如何运作的。我们将应用监督学习方法来训练它。

 

我们想要该机票价格预估系统基于下列输入来进行预测(为了简洁,我们除去了返程机票):

 

  • 起飞机场

  • 到达机场

  • 起飞日期

  • 航空公司

 

神经网络

 

接下来我们将视角转向我们的AI的大脑内部。

 

和动物一样,我们预估系统AI的大脑中有神经元。将它们用圆圈表示。这些神经元在内部都是相互连接的。

 

Image credit: CS231n


这些神经元又被分为三种层次:

 

  • 输入层

  • 隐藏层

  • 输出层

 

输入层接收输入数据。在本案例中,在输入层中有4个神经元:起飞机场,到达机场,起飞日期以及航空公司。输入层将输入传递给第一个隐藏层。

 

隐藏层针对我们的输入进行数学运算。创建神经网络的一大难点便是决定隐藏层的层数,以及每层中神经元的个数。

 

深度学习中的“深度”所指的是拥有多于一层的隐藏层。

 

输出层返回的是输出数据。在本案例中,输出层返回的是价格预测。

 


那么它到底是如何来运算价格预测的呢?

 

这便是我们将要揭晓的深度学习的奇妙之处了。

 

每两个神经元之间的连接,都对应着一个权重。该权重决定了输入值的重要程度。初始的权重会被随机设定。

 

当预测机票价格时,起飞日期是决定价格的最重要的因素之一。因此,与起飞日期这个神经元相连的连接将会有更高的权重。

 

Image credit: CodeProject

 

每个神经元都有一个激活函数(https://en.wikipedia.org/wiki/Activation_function)。若没有数学推导,这些函数十分晦涩难懂。

 

简而言之,激活函数的作用之一便是将神经元的结果“标准化”。

 

一旦一组输入数据通过了神经网络的所有层,神经网络将会通过输出层返回输出数据。

 

一点也不复杂,是吧?


训练神经网络

 

训练AI是深度学习中最难的部分了。这又是为什么呢?

 

  • 你需要一个庞大的数据集

  • 你还需要强大的算力

 

对于我们的机票价格预估系统,我们需要得到过往的票价数据。由于起始机场和起飞时间拥有大量可能的组合,所以我们需要的是一个非常庞大的票价列表。

 

为了训练机票价格预估系统的AI,我们需要将数据集的数据给予该系统,然后将它输出的结果与数据集的输出进行比对。因为此时AI仍然没有受过训练,所以它的输出将会是错误的。

 

一旦我们遍历完了整个数据集,我们便能创造出一个函数,该函数告诉我们AI的输出和真实输出到底相差多少。这个函数我们称为损失函数。


在理想情况下,我们希望我们的损失函数为0,该理想情况指的是AI的输出和数据集的输出相等之时。 


如何减小损失函数呢?

 

改变神经元之间的权重。我们可以随机地改变这些权重直到损失函数足够小,但是这种方法并不够高效。

 

取而代之地,我们应用一种叫做梯度下降(https://en.wikipedia.org/wiki/Gradient_descent)的技巧。

 

梯度下降是一种帮助我们找到函数最小值的技巧。在本案例中,我们寻找损失函数的最小值。

 

在每次数据集迭代之后,该方法以小增量的方式改变权重。通过计算损失函数在一组确定的权重集合上的导数(梯度),我们便能够知悉最小值在哪个方向。

 

Image credit: Sebastian Raschka

 

为了最小化损失函数,你需要多次迭代数据集。这便是需要高算力的原因了。

利用梯度下降更新权重的过程是自动进行的。这便是深度学习的魔力所在!

 

一旦我们训练好机票价格预估的AI之后,我们便能够用它来预测未来的价格了。

 

拓展阅读

 

神经网络有非常多的种类:用于计算机视觉(https://en.wikipedia.org/wiki/Computer_vision)卷积神经网络(https://en.wikipedia.org/wiki/Convolutional_neural_network)以及应用于自然语言处理(https://en.wikipedia.org/wiki/Natural_language_processing)循环神经网络(https://en.wikipedia.org/wiki/Recurrent_neural_network)

 

如果你想要学习深度学习的技术细节,我建议你参加一个在线课程。

 

吴恩达(https://medium.com/@andrewng)的深度学习专项课程(https://www.coursera.org/specializations/deep-learning)是当下最好的深度学习课程之一。如果你并不需要一个证书,你便可以免费旁听这门课程。


小结

 

1. 深度学习应用神经网络来模仿动物智能。

2. 神经网络中有三个层次的神经元:输入层、隐藏层以及输出层。

3. 神经元之间的连接对应一个权重,该权重决定了各输入数据的重要程度。

4. 神经元中应用一个激活函数来“标准化”神经元输出的数据。

5. 你需要一个庞大的数据集来训练神经网络。

6. 在数据集上迭代并与输出结果相比较,我们将会得到一个损失函数,损失函数能告诉我们AI生成的结果和真实结果相差多少。

7. 在每次数据集的迭代之后,都会利用梯度下降方法调整神经元之间的权重,以减小损失函数。

 

原文链接:https://medium.freecodecamp.org/want-to-know-how-deep-learning-works-heres-a-quick-guide-for-everyone-1aedeca88076

2019-05-28 11:03:25 weixin_43850408 阅读数 53

一文读懂深度学习中ResNet、Inception和Xception三大变革性结构

深度学习

博主最近在阅读很多论文的时候,发现很多不同领域的经典论文,在很多方面都有ResNet、Inception和Xception这些论文的影子,比如举个例子。

博主最近在阅读语义分割(Semantic Segmentation)相关的一些论文,以旷世提出的大卷积核为例。
在这里插入图片描述在左边的全局卷积网络(Global Convolutional Network, GCN)和边界细化(Boundary Refinement,BR)的简单残差模块。我们看到了ResNet中残差块和Inception中提出的削减参数的方式。

所以博主想要追根溯源,去找一下,这些最经典的网络结构到底是怎么提出的。

机器之心上有一篇文章写的很好,这里给大家附上链接:https://www.jiqizhixin.com/articles/2017-08-19-4
作者:吴攀

本文是在该作基础上添加了细节和作者自己的理解。

ResNet(残差网络)

ResNet 诞生于一个美丽而简单的观察:为什么非常深度的网络在增加更多层时会表现得更差?

直觉上推测,更深度的网络不会比更浅度的同类型网络表现更差吧,至少在训练时间上是这样(当不存在过拟合的风险时)。

让我们进行一个思想实验,假设我们已经构建了一个 n 层网络,并且实现了一定准确度。那么一个 n+1 层网络至少也应该能够实现同样的准确度——只要简单复制前面 n 层,再在最后一层增加一层恒等映射就可以了。类似地,n+2、n+3 和 n+4 层的网络都可以继续增加恒等映射,然后实现同样的准确度。

但是在实际情况下,这些更深度的网络基本上都会表现得更差。具体的原因就是在进行梯度下降进行参数更新的时候,会出现梯度消失的情况。对于这些有着深层次网络结构而言,训练过程中梯度信号总是很快就变成了0,会造成梯度下降的速度慢到你想哭。

ResNet 的作者将这些问题归结成了一个单一的假设:直接映射是难以学习的。而且他们提出了一种修正方法:不再学习从 x 到 H(x) 的基本映射关系,而是学习这两者之间的差异,也就是「残差(residual)」。然后,为了计算 H(x),我们只需要将这个残差加到输入上即可。

假设残差为 F(x)=H(x)-x,那么现在我们的网络不会直接学习 H(x) 了,而是学习 F(x)+x。

这就带来了你可能已经见过的著名 ResNet(残差网络)模块:
在这里插入图片描述ResNet 的每一个「模块(block)」都由一系列层和一个「捷径(shortcut)」连接组成,这个「捷径」将该模块的输入和输出连接到了一起。然后在元素层面上执行「加法(add)」运算,如果输入和输出的大小不同,那就可以使用零填充或投射(通过 1×1 卷积)来得到匹配的大小。

回到我们的思想实验,这能大大简化我们对恒等层的构建。直觉上就能知道,比起从头开始学习一个恒等变换,学会使 F(x) 为 0 并使输出仍为 x 要容易得多。一般来说,ResNet 会给层一个「参考」点 x,以 x 为基础开始学习。

简单来说,在构建这个shortcut以前。

这一想法在实践中的效果好得让人吃惊。在此之前,深度神经网络常常会有梯度消失问题的困扰,即来自误差函数的梯度信号会在反向传播回更早的层时指数级地下降。本质上讲,在误差信号反向回到更早的层时,它们会变得非常小以至于网络无法学习。但是,因为 ResNet 的梯度信号可以直接通过捷径连接回到更早的层,所以我们一下子就可以构建 50 层、101 层、152 层甚至 1000 层以上的网络了,而且它们的表现依然良好。那时候,这在当时最佳的基础上实现了巨大的飞跃——这个 22 层的网络赢得了 ILSVRC 2014 挑战赛。

ResNet 是神经网络领域我个人最喜欢的进展之一。

很多深度学习论文都是通过对数学、优化和训练过程进行调整而取得一点点微小的进步,而没有思考模型的底层任务。ResNet 则从根本上改变了我们对神经网络及其学习方式的理解。

Inception

如果 ResNet 是为了更深,那么 Inception 家族就是为了更宽。Inception 的作者对训练更大型网络的计算效率尤其感兴趣。换句话说:我们怎样在不增加计算成本的前提下扩展神经网络?

Inception 最早的论文关注的是一种用于深度网络的新型构建模块,现在这一模块被称为「Inception module」。究其核心,这种模块源自两种思想见解的交汇。

第一个见解与对层的操作有关。在传统的卷积网络中,每一层都会从之前的层提取信息,以便将输入数据转换成更有用的表征。但是,不同类型的层会提取不同种类的信息。5×5 卷积核的输出中的信息就和 3×3 卷积核的输出不同,又不同于最大池化核的输出……在任意给定层,我们怎么知道什么样的变换能提供最「有用」的信息呢?

见解 1:为什么不让模型选择?

Inception 模块会并行计算同一输入映射上的多个不同变换,并将它们的结果都连接到单一一个输出。换句话说,对于每一个层,Inception 都会执行 5×5 卷积变换、3×3 卷积变换和最大池化。然后该模型的下一层会决定是否以及怎样使用各个信息。
在这里插入图片描述这种模型架构的信息密度更大了,这就带来了一个突出的问题:计算成本大大增加。不仅大型(比如 5×5)卷积过滤器的固有计算成本高,并排堆叠多个不同的过滤器更会极大增加每一层的特征映射的数量。而这种计算成本增长就成为了我们模型的致命瓶颈。

想一下,每额外增加一个过滤器,我们就必须对所有输入映射进行卷积运算以计算单个输出。如下图所示:从单个过滤器创建一个输出映射涉及到在之前一层的每个单个映射上执行计算。

在这里插入图片描述假设这里有 M 个输入映射。增加一个过滤器就意味着要多卷积 M 次映射;增加 N 个过滤器就意味着要多卷积 N*M 次映射。换句话说,正如作者指出的那样:「过滤器数量的任何统一增长都会导致计算量的 4 倍增长。」我们的朴素 Inception 模块只是将过滤器的数量增加了三四倍。但从计算成本上看,这简直就是一场大灾难。

这就涉及到了见解 2:使用 1×1 卷积来执行降维。

见解 2:使用 1×1 卷积来执行降维

为了解决上述计算瓶颈,Inception 的作者使用了 1×1 卷积来「过滤」输出的深度。一个 1×1 卷积一次仅查看一个值,但在多个通道上,它可以提取空间信息并将其压缩到更低的维度。比如,使用 20 个 1×1 过滤器,一个大小为 64×64×100(具有 100 个特征映射)的输入可以被压缩到 64×64×20。通过减少输入映射的数量,Inception 可以将不同的层变换并行地堆叠到一起,从而得到既深又宽(很多并行操作)的网络。
在这里插入图片描述这能达到多好的效果?Inception 的第一个版本是 GoogLeNet,也就是前面提及的赢得了 ILSVRC 2014 比赛的 22 层网络。一年之后,研究者在第二篇论文中发展出了 Inception v2 和 v3,并在原始版本上实现了多种改进——其中最值得一提的是将更大的卷积重构成了连续的更小的卷积,让学习变得更轻松。比如在 v3 中,5×5 卷积被替换成了两个 连续的 3×3 卷积。

Inception 很快就变成了一种具有决定性意义的模型架构。最新的版本 Inception v4 甚至将残差连接放进了每一个模组中,创造出了一种 Inception-ResNet 混合结构。但更重要的是,Inception 展现了经过良好设计的「网中有网」架构的能力,让神经网络的表征能力又更上了一层楼。
有趣的事实:

最早的 Inception 论文确实引用了来自电影《盗梦空间(Inception)》的「我们需要更深」的互联网模因作为其名字的来源,参见:http://knowyourmeme.com/memes/we-need-to-go-deeper。这肯定是 knowyourmeme.com (http://knowyourmeme.com/) 第一次出现在一篇谷歌论文的参考文献里。
第二篇 Inception 论文(提出 v2 和 v3)是在最早的 ResNet 论文发布之后的第二天发布的。2015 年 12 月真是深度学习的好日子。

Xception

Xception 表示「extreme inception」。和前面两种架构一样,它重塑了我们看待神经网络的方式——尤其是卷积网络。而且正如其名字表达的那样,它将 Inception 的原理推向了极致。

它的假设是:「跨通道的相关性和空间相关性是完全可分离的,最好不要联合映射它们。」

这是什么意思?在传统的卷积网络中,卷积层会同时寻找跨空间和跨深度的相关性。让我们再看一下标准的卷积层:
在这里插入图片描述在上图中,过滤器同时考虑了一个空间维度(每个 2×2 的彩色方块)和一个跨通道或「深度」维度(4 个方块的堆叠)。在输入图像的输入层,这就相当于一个在所有 3 个 RGB 通道上查看一个 2×2 像素块的卷积过滤器。那问题来了:我们有什么理由去同时考虑图像区域和通道?

在 Inception 中,我们开始将两者稍微分开。我们使用 1×1 的卷积将原始输入投射到多个分开的更小的输入空间,而且对于其中的每个输入空间,我们都使用一种不同类型的过滤器来对这些数据的更小的 3D 模块执行变换。Xception 更进一步。不再只是将输入数据分割成几个压缩的数据块,而是为每个输出通道单独映射空间相关性,然后再执行 1×1 的深度方面的卷积来获取跨通道的相关性。
在这里插入图片描述其作者指出这本质上相当于一种已有的被称为「深度方面可分的卷积(depthwise separable convolution)」的运算,它包含一个深度方面的卷积(一个为每个通道单独执行的空间卷积),后面跟着一个逐点的卷积(一个跨通道的 1×1 卷积)。我们可以将其看作是首先求跨一个 2D 空间的相关性,然后再求跨一个 1D 空间的相关性。可以看出,这种 2D+1D 映射学起来比全 3D 映射更加简单。

而且这种做法是有效的!在 ImageNet 数据集上,Xception 的表现稍稍优于 Inception v3,而且在一个有 17000 类的更大规模的图像分类数据集上的表现更是好得多。最重要的是,它的模型参数的数量和 Inception 一样多,说明它的计算效率也更高。Xception 非常新(2017 年 4 月才公开),但正如前面提到的那样,这个架构已经在通过 MobileNet 助力谷歌的移动视觉应用了。

有趣的事实:

Xception 的作者也是 Keras 的作者。Francois Chollet 是真正的大神。

2019-10-16 13:56:57 yoggieCDA 阅读数 9
13825820-ae3eda47976e0c0c.jpg

作者 | Prakhar Ganesh
编译 | 安然
来源 | 图灵TOPIA

近日,发表在《DataScience》上的一篇文章,使用深度学习方法,从数据处理、循环网络、RNN上的LSTM、CNN-LSTMs等方面介绍了时间序列分析,同时解释了时间序列的概念以及为什么选择深度学习的方法等问题。

什么是时间序列分析?

时间序列是一系列数据点,使用时间戳进行排序,是对时间序列数据的分析。

从水果的每日价格到电路提供的电压输出的读数,时间序列的范围非常大,时间序列分析的领域也是如此。分析时间序列数据通常侧重于预测,但也可以包括分类,聚类,异常检测等。

例如,通过研究过去的价格变化模式,可以尝试预测曾经想要购买的一款手表的价格,判断它的最佳购买时间!

为什么选择深度学习?

时间序列数据可能非常不稳定且复杂。深度学习方法不假设数据的基本模式,而且对噪声(在时间序列数据中很常见)的鲁棒性更强,是时间序列分析的首选方法。

数据处理

在继续进行预测之前,重要的是首先以数学模型可以理解的形式处理数据。通过使用滑动窗口切出数据点,可以将时间序列数据转换为监督学习问题。然后,每个滑动窗口的预期输出是窗口结束后的时间步长。

13825820-3bf0e12a4eb78201.jpg

循环网络

循环网络一种复杂的深度学习网络。它们可以记住过去,因此是序列处理的首选。RNN单元是循环网络的骨干。

RNN单元具有2个传入连接,即输入和先前状态。同样,它们还具有2个传出连接,即输出和当前状态。这种状态有助于他们结合过去和当前输入的信息。

一个简单的RNN单元太简单了,无法统一用于跨多个域的时间序列分析。因此,多年来提出了各种各样的变体,以使循环网络适应各个领域,但核心思想保持不变!、

RNN上的LSTM

LSTM单元格是特殊的RNN单元格,其中带有“门”,其本质上是介于0到1之间的值,对应于状态输入。这些门背后的直觉是忘记或保留过去的信息,这使他们不仅可以记住过去,还可以记住更多。

CNN-LSTMs

由于状态信息要经过每一个步长,所以RNNs只能记住最近的过去。

另一方面,像LSTM和GRU这样的门控网络可以处理相对较长的序列,但是即使这些网络也有其局限性!!为了更好地理解这一问题,还可以研究消失和爆炸的梯度。

那么如何处理很长的序列呢?最明显的解决办法就是缩短它们!!但如何?一种方法是丢弃信号中呈现的细粒度时间信息。

这可以通过将一小组数据点累积在一起并从中创建特征来完成,然后将这些特征像单个数据点一样传递给LSTM。

13825820-a15b824557a7373b.jpg

多尺度分层LSTMs

看看CNN-LSTM架构,有一件事浮现在我的脑海中……为什么要使用CNNs来合并那些组?为什么不使用不同的LSTM呢!多尺度分层LSTMs是基于相同的思想构建的。

输入是在多个尺度上处理的,每个尺度都致力于做一些独特的事情。适用于更细粒度输入的较低标度专注于提供细粒度(但仅是最近的)时间信息。

另一方面,较高的比例集中在提供完整的图片(但没有细粒度的细节)上。多个刻度可以一起更好地理解时间序列。

下一步是什么?

时间序列分析是一个非常古老的领域,包含各种跨学科的问题,每种陈述问题都有其自身的挑战。

然而,尽管每个领域都根据自己的要求调整了模型,但是时间序列分析中仍然有一些一般性的研究方向需要加以改进。

例如,从最基本的RNN单元到多尺度分层LSTM的每项开发都以某种方式专注于处理更长的序列,但是即使最新的LSTM修改也有其自身的序列长度限制,并且目前仍然没有一种架构可以真正处理极长的序列。

2017-11-09 00:00:00 eNohtZvQiJxo00aTz3y8 阅读数 1488

原文标题:Want to know how Deep Learning works? Here’s a quick guide for everyone

作者:Radu Raicea

翻译:程思衍

校对:冯羽

本文长度为2500字,建议阅读6分钟

Medium上获得超过一万五千赞的深度学习入门指南,结合图文为你缕清深度学习中的各个基础概念的内涵。


Image credit: Datanami

 

人工智能(AI)

(https://en.wikipedia.org/wiki/Artificial_intelligence)

和机器学习(ML)

(https://en.wikipedia.org/wiki/Machine_learning)

都属于目前最热门的话题。

 

在日常生活中,AI这个术语我们随处可见。你或许会从立志高远的开发者哪那里听说她(他)们想要学习AI。你又或许会从运营者那里听到他们想要在他们的的服务中实施AI。但往往这些人中的绝大多数都并不明白什么是AI。

 

在你阅读完这篇文章之后,你将会了解AI和ML的基本知识。而更重要的是,你将会明白深度学习(https://en.wikipedia.org/wiki/Deep_learning),这类最热门的机器学习,是如何运作的。

 

这篇教程适用于所有人,所以本文并没有涉及高级数学。

 

背景

 

理解深度学习如何工作的第一步是掌握下列重要术语之间的区别。

 

  • 人工智能(AI)v.s.机器学习(ML)

 

人工智能是人类智能在计算机上的复制。

 

AI的研究之初,那时的研究人员尝试着复制人类智能来完成像玩游戏这样特定的任务。

他们引入了大量的计算机需要遵守的规则。有了这些规则,计算机就有了一份包含各种可能行动的清单,并基于这些规则作出决定(https://en.wikipedia.org/wiki/Expert_system)

 

机器学习,指的是机器使用大量数据集而非硬编码规则来进行学习的能力。

 

ML允许计算机通过自身来学习。这种学习方法得益于现代计算机的强大性能,性能保证了计算机能够轻松处理样本数巨大的数据集。

 

  • 监督学习 v.s. 非监督学习

 

监督学习

(https://en.wikipedia.org/wiki/Supervised_learning)

指的是利用已标注数据集进行的学习,该数据中包含输入和期望输出。

 

当你利用监督学习来训练AI时,你提供给它一份输入,并告诉它预期的输出。

 

如果AI所生成的输出是错误的(译者注:与期望输出不同),它将重新调整计算(注:应该是对公式的参数进行重新计算)。这个过程将会在数据集上迭代运行,直到AI不再犯错误。

 

预测天气的AI便是监督学习的一个典型例子。它通过学习过往数据来预测未来天气。该训练数据拥有输入(气压,湿度,风速)和输出(温度)。

 

非监督学习

(https://en.wikipedia.org/wiki/Unsupervised_learning)

是机器学习应用没有指定结构的数据集来进行学习的任务。

 

当你应用非监督学习来训练AI时,你可以让AI对数据进行逻辑分类。

 

电商网站上的行为预测AI便是非监督学习的一个例子。它无法通过拥有输入和输出的已标注数据集来进行学习。相反地,它在输入数据上创建它自己的分类。它将会告诉你哪一种用户最可能购买差异化的商品。

 

深度学习又是如何运作的呢?

 

现在你已经准备好去理解什么是深度学习,以及它是如何运作的。

 

深度学习是机器学习中的一种方法。在给予它一组输入后,它使我们能够训练AI来预测结果。监督学习和非监督学习都能够用来训练AI。

 

我们将通过建立一个假设的机票价格预估系统来阐述深度学习是如何运作的。我们将应用监督学习方法来训练它。

 

我们想要该机票价格预估系统基于下列输入来进行预测(为了简洁,我们除去了返程机票):

 

  • 起飞机场

  • 到达机场

  • 起飞日期

  • 航空公司

 

神经网络

 

接下来我们将视角转向我们的AI的大脑内部。

 

和动物一样,我们预估系统AI的大脑中有神经元。将它们用圆圈表示。这些神经元在内部都是相互连接的。

 

Image credit: CS231n


这些神经元又被分为三种层次:

 

  • 输入层

  • 隐藏层

  • 输出层

 

输入层接收输入数据。在本案例中,在输入层中有4个神经元:起飞机场,到达机场,起飞日期以及航空公司。输入层将输入传递给第一个隐藏层。

 

隐藏层针对我们的输入进行数学运算。创建神经网络的一大难点便是决定隐藏层的层数,以及每层中神经元的个数。

 

深度学习中的“深度”所指的是拥有多于一层的隐藏层。

 

输出层返回的是输出数据。在本案例中,输出层返回的是价格预测。

 


那么它到底是如何来运算价格预测的呢?

 

这便是我们将要揭晓的深度学习的奇妙之处了。

 

每两个神经元之间的连接,都对应着一个权重。该权重决定了输入值的重要程度。初始的权重会被随机设定。

 

当预测机票价格时,起飞日期是决定价格的最重要的因素之一。因此,与起飞日期这个神经元相连的连接将会有更高的权重。

 

Image credit: CodeProject

 

每个神经元都有一个激活函数(https://en.wikipedia.org/wiki/Activation_function)。若没有数学推导,这些函数十分晦涩难懂。

 

简而言之,激活函数的作用之一便是将神经元的结果“标准化”。

 

一旦一组输入数据通过了神经网络的所有层,神经网络将会通过输出层返回输出数据。

 

一点也不复杂,是吧?

 

训练神经网络

 

训练AI是深度学习中最难的部分了。这又是为什么呢?

 

  • 你需要一个庞大的数据集

  • 你还需要强大的算力

 

对于我们的机票价格预估系统,我们需要得到过往的票价数据。由于起始机场和起飞时间拥有大量可能的组合,所以我们需要的是一个非常庞大的票价列表。

 

为了训练机票价格预估系统的AI,我们需要将数据集的数据给予该系统,然后将它输出的结果与数据集的输出进行比对。因为此时AI仍然没有受过训练,所以它的输出将会是错误的。

 

一旦我们遍历完了整个数据集,我们便能创造出一个函数,该函数告诉我们AI的输出和真实输出到底相差多少。这个函数我们称为损失函数。


在理想情况下,我们希望我们的损失函数为0,该理想情况指的是AI的输出和数据集的输出相等之时。 

 

如何减小损失函数呢?

 

改变神经元之间的权重。我们可以随机地改变这些权重直到损失函数足够小,但是这种方法并不够高效。

 

取而代之地,我们应用一种叫做梯度下降(https://en.wikipedia.org/wiki/Gradient_descent)的技巧。

 

梯度下降是一种帮助我们找到函数最小值的技巧。在本案例中,我们寻找损失函数的最小值。

 

在每次数据集迭代之后,该方法以小增量的方式改变权重。通过计算损失函数在一组确定的权重集合上的导数(梯度),我们便能够知悉最小值在哪个方向。

 

Image credit: Sebastian Raschka

 

为了最小化损失函数,你需要多次迭代数据集。这便是需要高算力的原因了。

利用梯度下降更新权重的过程是自动进行的。这便是深度学习的魔力所在!

 

一旦我们训练好机票价格预估的AI之后,我们便能够用它来预测未来的价格了。

 

拓展阅读

 

神经网络有非常多的种类:用于计算机视觉(https://en.wikipedia.org/wiki/Computer_vision)的卷积神经网络(https://en.wikipedia.org/wiki/Convolutional_neural_network)以及应用于自然语言处理(https://en.wikipedia.org/wiki/Natural_language_processing)的循环神经网络(https://en.wikipedia.org/wiki/Recurrent_neural_network)

 

如果你想要学习深度学习的技术细节,我建议你参加一个在线课程。

 

吴恩达(https://medium.com/@andrewng)的深度学习专项课程(https://www.coursera.org/specializations/deep-learning)是当下最好的深度学习课程之一。如果你并不需要一个证书,你便可以免费旁听这门课程。

 

小结

 

1. 深度学习应用神经网络来模仿动物智能。

2. 神经网络中有三个层次的神经元:输入层、隐藏层以及输出层。

3. 神经元之间的连接对应一个权重,该权重决定了各输入数据的重要程度。

4. 神经元中应用一个激活函数来“标准化”神经元输出的数据。

5. 你需要一个庞大的数据集来训练神经网络。

6. 在数据集上迭代并与输出结果相比较,我们将会得到一个损失函数,损失函数能告诉我们AI生成的结果和真实结果相差多少。

7. 在每次数据集的迭代之后,都会利用梯度下降方法调整神经元之间的权重,以减小损失函数。

 

原文链接:

https://medium.freecodecamp.org/want-to-know-how-deep-learning-works-heres-a-quick-guide-for-everyone-1aedeca88076

程思衍,本科毕业于北航计算机系,美国南加州大学 Data Informatics 专业在读硕士。曾进行过问答系统、机器学习预测、高并发等方面的开发,目前主要从事问答领域的学习和研究。

翻译组招募信息

工作内容:将选取好的外文前沿文章准确地翻译成流畅的中文。如果你是数据科学/统计学/计算机专业的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友,数据派翻译组欢迎你们加入!

你能得到:提高对于数据科学前沿的认知,提高对外文新闻来源渠道的认知,海外的朋友可以和国内技术应用发展保持联系,数据派团队产学研的背景为志愿者带来好的发展机遇。

其他福利:和来自于名企的数据科学工作者,北大清华以及海外等名校学生共同合作、交流。


点击文末“阅读原文”加入数据派团队~


为保证发文质量、树立口碑,数据派现设立“错别字基金”,鼓励读者积极纠错

若您在阅读文章过程中发现任何错误,请在文末留言,或到后台反馈,经小编确认后,数据派将向检举读者发8.8元红包

同一位读者指出同一篇文章多处错误,奖金不变。不同读者指出同一处错误,奖励第一位读者。

感谢一直以来您的关注和支持,希望您能够监督数据派产出更加高质的内容


转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派THUID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。

点击“阅读原文”加入组织~

没有更多推荐了,返回首页