我想回答一些我经常被问到的问题:我需要什么样的电脑来进行深度学习?为什么fast.ai推荐Nvidia GPU?你为初学者推荐什么深度学习库?你如何把深度学习引入生产?我认为这些问题都属于一个总的主题:你需要什么(硬件、软件、背景和数据)来进行深入学习? 这篇文章是针对那些新进入这个领域的,并且对入门感兴趣的人。
我们感谢游戏业
电子游戏行业(收入方面)大于电影和音乐行业的总和。 在过去的20年里,视频游戏产业推动了GPU(图形处理单元)的巨大进步,其用于绘制图形所需的矩阵数学。幸运的是,这些正是深度学习所需的计算类型。GPU技术的这些进步是为什么现在的神经网络比几十年前更强大的一个关键部分。在没有GPU的情况下训练深度学习模型在大多数情况下将会非常缓慢。
并非所有的GPU都是一样的
大多数深度学习从业者不是直接编程GPU; 我们使用处理这个问题的软件库(如PyTorch或TensorFlow)。但是,要有效使用这些库,你需要访问正确类型的GPU。在几乎所有情况下,这意味着可以从Nvidia公司获得GPU。
CUDA和OpenCL是GPU编程的两种主要方式。CUDA是迄今为止最发达,拥有最广泛的生态系统,也是深度学习库最有力的支持。CUDA是由Nvidia创建的专有语言,因此它不能被其他公司的GPU使用。当fast.ai推荐使用Nvidia GPU时,我们并不是对Nvidia有特别的亲近或信任,而是这是迄今为止深度学习的最佳选择。
Nvidia在GPU市场占据主导地位,其次是竞争对手AMD公司。 今年夏天,AMD宣布发布一个名为ROCm的平台,为深度学习提供更多的支持。 PyTorch,TensorFlow,MxNet和CNTK等主要深度学习库的ROCm状态仍在开发中。虽然我希望看到一个开源的替代方案取得成功,但我不得不承认,我发现ROCm的文档很难理解。我刚刚阅读了ROCm网站的Overview,Getting Started和Deep Learning页面,但仍然不能用我自己的话来解释ROCm,尽管我想在这里把它包括在内以便完整。(我承认没有硬件背景,但我认为像我这样的数据科学家应该成为这个项目的目标受众之一。)
如果你没有GPU ...
如果你的电脑没有GPU或者没有Nvidia GPU,那么你有几个很好的选择:
使用Crestle,通过你的浏览器:Crestle是一项服务(由fast.ai学生Anurag Goel开发),为你提供在云上的已经预先安装并配置为在GPU上运行的所有流行的科学和深度学习框架的云服务。它很容易通过你的浏览器访问。新用户可免费获得10小时和1 GB的存储空间。之后,GPU使用率是每小时59美分。我向那些刚接触AWS或新手的人推荐使用这个选择来使用控制台。
通过你的控制台设置AWS云实例:你可以按照这个fast.ai设置课程中的步骤创建一个AWS实例(远程为你提供Nvidia GPU)。AWS每小时收取90美分。尽管我们的设置材料都是关于AWS(并且你会发现对AWS最多的论坛支持),但是一位fast.ai学生创建了一个设置Azure虚拟机进行深度学习的指南。如果有人写关于Google云端引擎的博客文章,我很乐意分享和添加一个链接。
建立你自己的框架。这是我们的fast.ai论坛中的一个冗长的话题,在论坛里人们可以提出问题,分享他们正在使用的组件,并发布其他有用的链接和提示。最便宜的新型Nvidia GPU是300美元左右,一些学生在eBay或Craigslist上发现了更便宜的旧版GPU,而另外一些则是为了更强大的GPU支付更多的费用。我们几个学生写博客文章记录他们如何建立他们的机器:
深度困惑:建立深度学习机的不幸事件(Mariya Yao)
建立一个便捷的深度学习机器(Sravya Tirukkovalur)
建立你自己的深度学习框(Brendan Fortuner)
深度学习是一个相对年轻的领域,库和工具正在迅速改变。 例如,Theano,在2016年我们选择使用在我们的课程的第1部分,它刚刚退休。目前我们正在使用的PyTorch仅在今年(2017年)发布。 就像Jeremy之前写的那样,你应该假定你今天学到的任何特定的库和软件都会在一两年内被淘汰。最重要的是理解底层概念,为此,我们在Pytorch上创建了自己的库,我们相信深度学习概念更清晰,并将最佳实践编码为默认值。
Python是深度学习中最常用的语言。有许多深度学习库可供选择,几乎所有主要科技公司都支持不同的库,尽管这些公司的员工经常使用各种工具。深度学习库包括TensorFlow(谷歌),PyTorch(Facebook),MxNet(华盛顿大学,由亚马逊改编),CNTK(微软),DeepLearning4j(Skymind),Caffe2(也是Facebook),Nnabla(索尼),PaddlePaddle(百度),以及Keras(在此列表中的其他几个库之上运行的高级API)。所有这些都有可用的Python选项。
动态与静态图计算
在fast.ai,我们优先考虑程序员可以进行实验和迭代(通过更容易的调试和更直观的设计)比理论性能提速更重要的速度。这就是我们使用PyTorch的原因,PyTorch是一个具有动态计算功能的灵活的深度学习库。
深度学习库之间的一个区别是它们是使用动态还是静态计算(一些库,如MxNet和现在的TensorFlow,两个都允许)。动态计算意味着程序按照你编写的顺序执行。这通常使得调试更容易,并且更容易将你的想法转换成代码。静态计算意味着你预先为你的神经网络构建一个结构,然后对其执行操作。从理论上讲,这允许编译器进行更大的优化,尽管这也意味着在你的程序和编译器执行的程序之间可能存在更多的断开。这也意味着,错误可能会更多地从导致错误的代码中移除(例如,如果你在构建图形时存在错误,那么直到你稍后执行操作时,你才可能意识到)。尽管理论上有静态计算图的语言比具有动态计算的语言具有更好的性能,但我们常常发现,在实际中,这种情况并非如此。
谷歌的TensorFlow大多使用静态计算图,而Facebook的PyTorch使用动态计算。(注:TensorFlow在两周前宣布了一个动态计算选项Eager Execution,然而它还很早,大多数TensorFlow文档和项目都使用静态选项)。今年9月,fast.ai宣布,我们选择了PyTorch而不是TensorFlow来在今年的课程中使用,并用于开发我们自己的库(PyTorch的高级包装器,用于编码最佳实践)。简单地说,下面是我们选择PyTorch的几个原因(在这里更详细地解释):
更容易调试
动态计算更适合于自然语言处理
传统的面向对象的编程风格(这对我们来说更自然)
TensorFlow使用如范围和会话等不寻常的约定可能会令人困惑,而且需要更多的学习
谷歌已经投入了比任何其他人更多的资源来营销TensorFlow,我认为这是TensorFlow如此知名的原因之一(对于许多深度学习以外的人来说,TensorFlow是他们听说过的唯一的DL框架)。 如上所述,TensorFlow几周前发布了一个动态计算选项,解决了上述一些问题。 许多人都在问fast.ai我们是否要切换回TensorFlow。动态选项还是相当新的,而且还不太成熟,所以我们现在会继续使用PyTorch。 然而,TensorFlow团队非常乐意接受我们的想法,我们很乐意看到我们的fastai库被移植到TensorFlow。
注意:我们更新的课程的个人版本,其使用PyTorch以及我们自己的fastai库,目前正在进行。课程结束后将免费在线发布(预计发布时间:1月)。
你生产所需要的东西:不是GPU
许多人把生产中深度学习的想法过于复杂,认为他们需要比他们实际做的更复杂的系统。你可以在生产中使用CPU和你选择的网络服务器进行深入学习,事实上,这是我们推荐的大多数使用情况。 这里有几个关键点:
生产中进行训练是非常罕见的。即使你想每天更新你的模型权重,你也不需要在生产中进行训练。这意味着你只是在生产过程中进行推理(通过你的模型向前传递),比培训更快更容易。
你可以使用任何你喜欢的Web服务器(例如Flask),并将其设置为简单的API调用。
如果你能够有效地批量处理数据,GPU只会提供更快的速度。 即使你每秒获得32个请求,使用GPU也可能会使你减慢速度,因为从第一次到达收集全部32个时,你必须等待一秒钟,然后执行计算,然后返回结果。 我们建议在生产中使用CPU,并且可以根据需要添加更多的CPU(比使用多个GPU更容易)。
对于大公司来说,在生产中使用GPU可能是有意义的——然而,当你达到这个规模的时候,这将会是明确的。过早地尝试在需要之前进行扩展只会增加不必要的复杂性,并会使你放慢速度。
激励我和Jeremy为程序员创建用于编码的实践深度学习的一个挫折是,大多数深度学习材料分为两类:
如此肤浅和高水平,以至于不能提供实际在工作场所深度学习所需的信息或技能,或创造出最先进的模型。如果你只是想要一个高层次的概述,这是好的,但如果你想成为一个有工作的从业者,那就太令人失望了。
高度理论化并承担研究生水平的数学背景。对于许多人来说,这是一个阻挡的障碍,即使是有数学博士学位的人,我也发现这个理论在学习如何编写实用的解决方案方面并不是特别有用。许多材料都有这个倾向并不奇怪。直到最近,深度学习几乎完全是一门学科,很大程度上是由在顶级学术刊物上发表的内容引发的。
我们免费的实践深度学习课程的独特之处在于,唯一的先决条件是1年的编程经验,但它仍然教你如何创造最先进的模型。你的背景可以是任何语言,但在开始课程之前你可能需要学习一些Python,因为这是我们所使用的。我们根据需要介绍数学概念,我们不建议你尝试提前学习数学理论。
如果你不知道如何编写代码,我强烈建议学习,如果你对数据科学感兴趣的话,Python是一个很好的语言。
虽然很多人声称你需要Google大小的数据集来深入学习,但这是错误的。迁移学习的力量(结合数据增强等技术)使得人们可以将预先训练的模型应用于更小的数据集。 正如我们在别处谈到的那样,在医疗初创企业Enlitic,Jeremy Howard领导的一个团队只使用了1000例肺癌CT扫描与癌症相比,建立了一个比一组4位专家放射科医师更准确的诊断肺癌的算法。C ++库Dlib有一个例子,其中一个人脸检测器只使用4个图像进行精确训练,只包含18个人脸!
关于入门的说明
对于绝大多数与我交谈的人来说,进入深度学习的门槛远远低于他们的预期,成本也在预算之内。但是,我意识到事实并非如此。我定期联系想要参加我们的在线课程,但无法承担AWS成本的学生。不幸的是,我没有办法。同时还有其他的障碍。BrunoSánchez-Nuño撰写了关于在没有可靠互联网接入的地方进行数据科学的挑战,而且国际学者Tahsin Mayeesha在孟加拉国等国家描述了MOOC访问的隐藏障碍。我关心这些入门的问题,然而这是无解的。
文章原标题《What you need to do deep learning》,作者:Rachel Thomas,译者:董昭男,审校:李烽
目前,机器学习在医疗、金融、安防等领域应用广泛,并替代了一些流程化低级劳动,因此有人认为未来人类的工作将被机器学习所取代,人们面临失业的危险。
近日,《Science》发表了麻省理工学院数字经济倡导行动主任Erik Brynjolfsson和卡内基梅隆大学计算机科学学院机器学习系主任Tom Mitchell的文章,他们从机器学习和经济学角度分析了人类会不会“被失业”的问题。
引言:机器学习改变的太多了
在过去的几十年里,数字计算机已经改变了几乎所有经济领域的工作,现在的我们正处于一个更大、更快速变革的开端,这一切归功于机器学习的最新进展,它有能力加快自动化的步伐。
对机器学习的进展至关重要的是改进算法的组合,包括深度神经网络和相当快的计算机硬件。例如,Facebook基于短语的机器翻译模型,每天有超过45亿的语言翻译。图像识别的算法在ImageNet上造成了越来越低的错误率,使其从2010年的超过30%下降到今天的不到3%。同样,自2016年7月以来,语音识别方面错误了从8.4%降低到4.9%。
然而,机器学习是一个“通用技术”,就像蒸汽机和电力一样,它将产生大量的创新和功能。但对于具体的劳动力的影响和因此产生的更广泛的经济问题而言,我们还没有深刻的认识。现实也并不像我们有时所宣称的那样,人们面对即将到来的“失业”问题。
尽管机器学习的进步能力让人印象深刻,但它并不适用于所有任务,并且在在决策能力上也比人类弱的多。
八个关键标准来判别深度学习在任务中成功与否
1、能够学习函数,将定义明确的输入映射到明确输出
其中包括分类(例如,根据癌症发生的可能性给狗狗的图片做标记或标记医疗记录)和预测(例如,分析贷款申请来预测未来违约的可能性)。尽管机器学习可能学会预测与给定输入X相关的Y值,但这是一种学习的统计相关性,也许机器学习不会理解因果关系。
2、存在或者能够创建含有输入-输出对的大数据集
训练的例子越多,学习的准确度就越高。深度神经网络的显著特征之一是,它在许多领域的性能在一定数量的示例之后似乎并不具有渐近性。尤其重要的是,所有相关的输入特性都要在训练数据中获取。尽管原则上任何任意的函数都可以用深度神经网络表示,但是计算机很容易模仿和延续训练数据中存在的不需要的偏差,并忽略那些包含了它们不能观察到的变量的规则。通过对现有流程和客户交互进行监督,可以通过雇佣人员标记或创建全新的数据集,或者通过模拟相关的问题设置来创建数字数据。
3、能够提供明确反馈,具有明确的目标和指标的任务
当我们能够清晰地描述目标时,机器学习就能很好地工作,即使我们不能确定实现这些目标的最佳过程。尽管机器学习能模仿个体,但由于在获取个体的输入输出决策能力上的缺失,因此它可能不会形成最佳的全系统性能。因此,为性能定义了系统范围的度量标准,为深度学习系统提供了一个黄金标准。当训练数据按照这样的黄金标准进行标记时,深度学习尤其强大,从而定义了预期的目标。
4、摆脱对背景知识或常识的依赖,缩短甚至跳脱逻辑推理的长链
机器学习系统在学习数据中的经验关联方面非常强大,但是当任务需要依赖计算机未知的常识或背景知识的长推理链或复杂计划时,它的效率较低。 一般来说,机器学习在视频游戏中表现不错,这种游戏需要快速反应,并提供即时反馈,但在游戏中选择最佳动作取决于记忆先前事件的时间以及关于世界的未知背景知识 (例如,知道房间里新引入的物品可能在哪里找到)。 例外的是,围棋和象棋这样的游戏,因为这些非物理的游戏可以以非常精确的速度快速模拟,所以可以自动收集数百万个完全自我标记的训练样例。 但是,在大多数现实世界中,我们缺乏完美的模拟。
5、不需要详细解释决定是如何做出的
大型神经网络通过巧妙地调整数以亿计的数字权重来学习做出决定,这些数字权重互连了他们的人造神经元。 解释这种决定对人类的推理可能是困难的,因为深度神经网络通常不会使用与人类相同的中间抽象。 例如,虽然计算机可以诊断特定类型的癌症或肺炎,或者比专家医生更好,但与人类医生相比,他们解释为什么或如何提出诊断的能力较差。
6、具有容错性,不需要最佳解决方案,或者证明是正确的解决方案
几乎所有的机器学习算法都是从统计和概率上推导出他们的解决方案。 因此,很难将其训练到100%的准确度。 即使是最好的语音,物体识别和临床诊断计算机系统也会犯错(就像最好的人类一样)。 因此,容忍学习系统的错误是制约采用的重要标准。
7、学会的现象或函数/功能不要随时间发生快速的变化
一般来说,只有当未来测试例子的分布类似于训练样例的分布时,机器学习算法才能很好地工作。 如果这些分布随着时间而改变,则通常需要再培训,因此成功取决于相对于新培训数据获取率的变化率(例如,电子邮件垃圾邮件过滤器做得很好, 部分原因是与垃圾邮件发生变化的速度相比,新电子邮件的获得率the rate of acquisition较高)。
8、没有专门的灵巧性,身体技能或移动性要求
在处理非结构化环境和任务中的物理操作时,机器人与人类相比仍然笨拙。 这不是机器学习的缺点,而是机器人的一般物理机械操纵器的现有技术的结果。
六个非技术影响因素
除了上述标准外,还有许多非技术因素会影响到机器学习对劳动力的影响。 具体而言,机器学习对劳动力需求和工资的总体影响可以写成六个不同经济因素的函数:
1、劳力替代
2、价格弹性
3、互补性
4、收入弹性
5、劳动力供给弹性
6、业务流程重新设计
(经济学内容在此不做详细叙述)
最后,任何关于机器学习够和不能做什么,以及如何影响经济的讨论,都应该首先认识到两个基本的考虑因素:1、我们仍非常远离通用人工智能,机器也不能做全方位的任务。2、尽管技术创新通常能够影响和改善整体生活水平,但技术进步导致工资不平等表明,机器学习带来的经济效应可能具有极大的破坏性,既造造就了赢家,又造就了输家。
这就要求决策者、商业领袖、技术人员和研究人员相当重视这些问题。
文章地址:
http://science.sciencemag.org/content/358/6370/1530
作者介绍:
Erik Brynjolfsson
麻省理工学院数字经济倡导行动(the MIT Initiative on the Digital Economy)主任,斯隆学院教授。
Tom Mitchell
卡内基梅隆大学计算机科学学院机器学习系主任、教授,美国工程院院士,著有《机器学习》等。
云栖社区
序列预测问题曾经被认为是数据科学行业最难解决的问题之一。涉及序列问题的包括:预测销售、发现股票市场走势、了解电影情节、了解你的演讲方式、语言翻译、在iPhone键盘上预测下一个单词等等。
随着近年来数据科学的发展,人们发现所有的这些序列预测问题都可以被长短期记忆网络(LSTM)解决。
LSTM在许多方面比传统的前馈神经网络和RNN都有优势,本文的目的是解释LSTM,并使你能够将其用于解决现实生活中的问题。
注意:要阅读本文,你必须具备神经网络的基本知识以及Keras是如何工作的。你可以参考这些文章来理解这些概念:
从零开始理解神经网络
深度学习基础 - 循环神经网络简介
教程:使用Keras优化神经网络(带图像识别案例研究)
回顾神经网络(RNN)
RNN的限制
RNN改进:长期短期记忆(LSTM)
LSTM的体系结构
(1)Forget Gate
(2)Input Gate
(3)Out Gate
使用LSTM生成文本
一个简单的机器学习模型或一个人工神经网络可以学习基于许多特征来预测股票价格。虽然股票的价格取决于很多因素,但它也很大取决于前几天的股票价格。实际上对于交易者来说,前几天(或趋势)的这些价值是预测的一个主要决定因素,当然一些公司的重大事项影响是最大的。
在传统的前馈神经网络中,所有的测试都被视为是独立的,没有前几天考虑股票价格。这种时间依赖性是通过递归神经网络实现的。典型的RNN:
这样看起来可能会有一些困惑,但一旦展开,看起来简单得多:
RNN可以很大程度的解决我们序列处理的目的,但并不是完全的。比如,我们希望我们的电脑可以写莎士比亚的十四行诗。RNN在短期时间内表现的非常棒,但要建立一个故事并记住它,如果要模型能够理解和记忆序列背后的背景,就像人脑一样,这对RNN来说是不可能的。
当我们处理短期的依赖性时,递归神经网络(RNN)表现得很好。像这样的问题:
这时RNNs变得相当有效,因为这个问题与上下文无关。RNN不需要记住之前所说的话或者说它的含义,它只需要知道在大多数情况下天空是蓝色的。因此,预测将是:
然而,普通的RNNs并不能了解上下文在预测下一个输出。之前很久以前出现的词,现在做出预测的时候并不能发挥作用。比如这个例子:
在这里,我们人可以理解,由于在西班牙工作了20年,他很可能掌握了西班牙语。但是,为了得到这个预测,RNN需要记住这个上下文。但是遗憾的是,这是RNN失败的地方!
这里面的原因就是梯度消失。为了理解这一点,你需要掌握前馈神经网络学习的一些知识。对于传统的前馈神经网络,在特定层上应用的权重更新是学习率的倍数,来自前一层的误差项以及该层的输入。因此,特定图层的误差项可能是以前所有图层误差的积累。当处理像S形激活函数时,随着我们移向起始层,它的微分值(出现在误差函数中)会倍增倍数。其结果是:随着朝向起始层移动,梯度几乎消失,难以训练这些层。RNN只记得一小段时间的事情,也就是说,如果我们在一段时间之后需要这些信息,它可能是可重复的,但是一旦大量的单词被输入,这些信息就会在某处丢失。
当我们安排日程时,我们优先考虑约会?如果我们需要为重要的事情腾出空间,我们知道哪个会议可以取消,以满足其他会议的时间。
但RNN不这样做。为了增添一个新的信息,它通过一个函数转换现有的信息。但整个信息总体上都是修改的,即没有考虑“重要”信息和“不那么重要”的信息。
LSTM通过乘法和加法对信息进行小的修改,信息流经称为单元状态的机制。这样,LSTM可以选择性地记住或忘记事物。特定单元状态下的信息有三种不同的依赖关系。
我们用一个特定股票的股价预测解释它,今天的股价将取决于:
股票在前几天走势可能是下跌趋势或上升趋势。
前一天股票的价格,因为很多交易者在购买之前比较股票的前一天价格。
今天可能影响股票价格的因素。这可能是一个新的公司政策,正在被广泛的批评或者公司的利润下降或者是公司高层领导层的意外变化。
这些依赖关系可以概括为任何问题:
之前的单元状态(即在前一时间步骤之后存在于存储器中的信息)。
前一个隐藏状态(即与前一个单元格的输出相同)。
当前时间步骤的输入(即当时正在馈送的新信息)。
我们可以通过模拟新闻频道的团队的运作情况,将LSTM的功能可视化。一个新闻故事是围绕许多人的事实、证据和陈述而建立的。比方说,我们假设谋杀是通过“毒害”受害人来完成的,但是刚刚出现的尸检报告说死亡原因是“对头部的影响”。作为这个新闻小组,你会做什么?你马上忘记以前的死亡原因和所有围绕这个事实编织的故事。如果一个全新的嫌疑人被引入到图片,一个曾经与受害者勾结,可能成为凶手的人。你一定会将这个信息添到你的新闻源。
现在我们来详细介绍一下LSTM网络的体系结构:
这与我们之前看到的简化版本是完全不同的,典型的LSTM网络由称为单元的不同存储块组成(我们在图像中看到的矩形)。内存块负责记住事物,对这个内存的操纵是通过三个主要的机制来完成的,称为门。
4.1: Forget Gate
我们假设一个LSTM被输入下面的句子:
遇到“ person”之后的第一个句点,Forget Gate就意识到下一个句子中可能有语境的变化。因此,句子的主旨就被遗忘,空间被腾空。而当我们开始谈论“ Dan” 这空间就被分配给了“ Dan”,这个忘记的过程是Forget Gate完成的。
Forget Gate负责从细胞单元中去除信息。这些信息是LSTM不再需要的或不太重要的信息,可以通过滤波器的乘法来消除,这是优化LSTM网络性能所必需的。
这个门接受两个输入:h_t-1和x_t。
h_t-1是前一个单元的隐藏状态或前一个单元的输出,x_t是该特定时间步的输入。给定的输入乘以权重矩阵并添加偏差,之后,sigmoid函数被应用于这个值。sigmoid函数输出一个向量,值范围从0到1,对应于单元状态中的每个数字。基本上,sigmoid函数负责决定要保留哪些值和丢弃哪些值。如果在单元状态中为特定值输出“0”,则意味着Forget Gate要完全忘记该信息。类似地,“1”意味着Forget Gate要记住整个信息。
4.2 Input Gate
让我们再举一个LSTM分析一个句子的例子:
现在这里重要的信息是“Bob”会游泳,他服役了四年的海军。这可以添加到单元状态,但是,他通过电话告诉我这一事实是一个不太重要的事情,可以忽略。添加一些新信息的过程可以通过输入门完成。
这是它的结构:
输入门负责将信息添加到单元状态,这个信息的添加基本上是从上图看出的三步过程。
通过sigmoid函数来调节需要添加到单元状态的值。这与Forget Gate基本上非常相似,并且充当来自h_t-1和x_t的所有信息的过滤器。
创建一个矢量,该矢量包含所有可以添加的值(可以从h_t-1和x_t中感知)到单元状态。这是使用tanh函数完成的,该函数输出从-1到+1的值。
将过滤器(sigmoid gate)的值乘以创建的向量(tanh函数),然后通过加法操作将这些有用的信息添加到单元状态。
4.3 Out Gate
并非所有沿着单元状态运行的信息都适合在特定时间输出。我们用一个例子来证实:
在这句话中,我们知道,“Brave”的当前输入是用来形容名词的形容词。因此,无论如何,有一个很强的作为名词的倾向。因此,Bob可能是一个合适的输出。
从当前单元状态中选择有用信息并将其显示为输出的工作是通过输出门完成的。这是它的结构:
输出门的功能可以再次分解为三个步骤:
在将tanh函数应用到单元状态后创建一个向量,从而将值缩放到范围-1到+1。
使用h_t-1和x_t的值创建一个过滤器,以便它可以调节需要从上面创建的向量中输出的值。这个过滤器再次使用一个sigmoid函数。
将此调节过滤器的值乘以在步骤1中创建的向量,并将其作为输出发送出去,并发送到下一个单元格的隐藏状态。
另外,滤波器需要建立在输入和隐藏状态值上,并应用于单元状态向量。
我们已经了解了关于LSTM足够的理论概念。现在我们建立一个模型:可以预测Macbeth原始文本后的n个字符。大多数经典文本可以在这里找到,txt文件的更新版本可以在这里找到。
我们将使用Keras,它可以在TensorFlow或Theano之上工作。因此,在深入研究这些代码之前,请确保你已经安装了Keras 。
5.1:导入依赖关系
# Importing dependencies numpy and kerasimport numpyfrom keras.models import Sequentialfrom keras.layers import Densefrom keras.layers import Dropoutfrom keras.layers import LSTMfrom keras.utils import np_utils
5.2:加载文本文件并创建字符到整数映射
# load textfilename = "/macbeth.txt"text = (open(filename).read()).lower()# mapping characters with integersunique_chars = sorted(list(set(text)))char_to_int = {}int_to_char = {}for i, c in enumerate (unique_chars): char_to_int.update({c: i}) int_to_char.update({i: c})
文本文件已打开,所有字符都转换为小写字母。为了便于下面的步骤,我们将映射每个字符到相应的数字。这样做是为了使LSTM的计算部分更容易。
5.3:准备数据集
# preparing input and output datasetX = []Y = []for i in range(0, len(text) - 50, 1): sequence = text[i:i + 50] label =text[i + 50] X.append([char_to_int[char] for char in sequence]) Y.append(char_to_int[label])
数据准备的格式是,如果我们想让LSTM预测'HELLO'中的'O',我们会输入['H','E','L','L']作为输入,[' O']作为预期产出。同样,我们在这里修改我们想要的序列的长度(在这个例子中设置为50),然后保存X中前49个字符的编码和期望的输出,即Y中的第50个字符。
5.4:重新塑造X
# reshaping, normalizing and one hot encodingX_modified = numpy.reshape(X, (len(X), 50, 1))X_modified = X_modified / float(len(unique_chars))Y_modified = np_utils.to_categorical(Y)
LSTM网络输入的形式是[样本,时间步骤,特征],其中样本是我们拥有的数据点的数量,时间步长是单个数据点中存在的与时间相关的步数,特征指的是我们对于Y中相应的真值的变量数目。然后我们将X_modified中的值在0到1之间进行缩放,并且在Y_modified中对我们的真值进行热编码。
5.5:定义LSTM模型
# defining the LSTM modelmodel = Sequential()model.add(LSTM(300, input_shape=(X_modified.shape[1], X_modified.shape[2]), return_sequences=True))model.add(Dropout(0.2))model.add(LSTM(300))model.add(Dropout(0.2))model.add(Dense(Y_modified.shape[1], activation='softmax'))model.compile(loss='categorical_crossentropy', optimizer='adam')
使用一个线性堆栈的顺序模型。第一层是具有300个存储器单元的LSTM层,并且它返回序列。这样做是为了确保下一个LSTM层接收序列,而不仅仅是随机分散的数据。在每个LSTM层之后应用一个丢失层,以避免模型过度拟合。最后,我们将最后一层看作一个完全连接的图层,其中' softmax'激活和神经元等于唯一字符数,因为我们需要输出一个热编码结果。
5.6:拟合模型和生成字符
# fitting the modelmodel.fit(X_modified, Y_modified, epochs=1, batch_size=30)# picking a random seedstart_index = numpy.random.randint(0, len(X)-1)new_string = X[start_index]# generating charactersfor i in range(50): x = numpy.reshape(new_string, (1, len(new_string), 1)) x = x / float(len(unique_chars))#predictingpred_index = numpy.argmax(model.predict(x, verbose=0))char_out = int_to_char[pred_index]seq_in = [int_to_char[value] for value in new_string]print(char_out)new_string.append(pred_index)new_string = new_string[1:len(new_string)]
该模型需要100训练次数,批量大小为30。然后,我们修复随机种子并开始生成字符。来自模型的预测给出预测字符的字符编码,然后将其解码回字符值并附加到该模式。
这是网络输出的样子:
LSTM是序列和时间序列相关问题的一个非常有前途的解决方案。唯一的缺点就是训练难度大,但这只是一个硬件限制。
人工智能赛博物理操作系统
AI-CPS OS
“人工智能赛博物理操作系统”(新一代技术+商业操作系统“AI-CPS OS”:云计算+大数据+物联网+区块链+人工智能)分支用来的今天,企业领导者必须了解如何将“技术”全面渗入整个公司、产品等“商业”场景中,利用AI-CPS OS形成数字化+智能化力量,实现行业的重新布局、企业的重新构建和自我的焕然新生。
AI-CPS OS的真正价值并不来自构成技术或功能,而是要以一种传递独特竞争优势的方式将自动化+信息化、智造+产品+服务和数据+分析一体化,这种整合方式能够释放新的业务和运营模式。如果不能实现跨功能的更大规模融合,没有颠覆现状的意愿,这些将不可能实现。
领导者无法依靠某种单一战略方法来应对多维度的数字化变革。面对新一代技术+商业操作系统AI-CPS OS颠覆性的数字化+智能化力量,领导者必须在行业、企业与个人这三个层面都保持领先地位:
重新行业布局:你的世界观要怎样改变才算足够?你必须对行业典范进行怎样的反思?
重新构建企业:你的企业需要做出什么样的变化?你准备如何重新定义你的公司?
重新打造自己:你需要成为怎样的人?要重塑自己并在数字化+智能化时代保有领先地位,你必须如何去做?
AI-CPS OS是数字化智能化创新平台,设计思路是将大数据、物联网、区块链和人工智能等无缝整合在云端,可以帮助企业将创新成果融入自身业务体系,实现各个前沿技术在云端的优势协同。AI-CPS OS形成的数字化+智能化力量与行业、企业及个人三个层面的交叉,形成了领导力模式,使数字化融入到领导者所在企业与领导方式的核心位置:
精细:这种力量能够使人在更加真实、细致的层面观察与感知现实世界和数字化世界正在发生的一切,进而理解和更加精细地进行产品个性化控制、微观业务场景事件和结果控制。
智能:模型随着时间(数据)的变化而变化,整个系统就具备了智能(自学习)的能力。
高效:企业需要建立实时或者准实时的数据采集传输、模型预测和响应决策能力,这样智能就从批量性、阶段性的行为变成一个可以实时触达的行为。
不确定性:数字化变更颠覆和改变了领导者曾经仰仗的思维方式、结构和实践经验,其结果就是形成了复合不确定性这种颠覆性力量。主要的不确定性蕴含于三个领域:技术、文化、制度。
边界模糊:数字世界与现实世界的不断融合成CPS不仅让人们所知行业的核心产品、经济学定理和可能性都产生了变化,还模糊了不同行业间的界限。这种效应正在向生态系统、企业、客户、产品快速蔓延。
AI-CPS OS形成的数字化+智能化力量通过三个方式激发经济增长:
创造虚拟劳动力,承担需要适应性和敏捷性的复杂任务,即“智能自动化”,以区别于传统的自动化解决方案;
对现有劳动力和实物资产进行有利的补充和提升,提高资本效率;
人工智能的普及,将推动多行业的相关创新,开辟崭新的经济增长空间。
给决策制定者和商业领袖的建议:
超越自动化,开启新创新模式:利用具有自主学习和自我控制能力的动态机器智能,为企业创造新商机;
迎接新一代信息技术,迎接人工智能:无缝整合人类智慧与机器智能,重新
评估未来的知识和技能类型;
制定道德规范:切实为人工智能生态系统制定道德准则,并在智能机器的开
发过程中确定更加明晰的标准和最佳实践;
重视再分配效应:对人工智能可能带来的冲击做好准备,制定战略帮助面临
较高失业风险的人群;
开发数字化+智能化企业所需新能力:员工团队需要积极掌握判断、沟通及想象力和创造力等人类所特有的重要能力。对于中国企业来说,创造兼具包容性和多样性的文化也非常重要。
子曰:“君子和而不同,小人同而不和。” 《论语·子路》云计算、大数据、物联网、区块链和 人工智能,像君子一般融合,一起体现科技就是生产力。
如果说上一次哥伦布地理大发现,拓展的是人类的物理空间。那么这一次地理大发现,拓展的就是人们的数字空间。在数学空间,建立新的商业文明,从而发现新的创富模式,为人类社会带来新的财富空间。云计算,大数据、物联网和区块链,是进入这个数字空间的船,而人工智能就是那船上的帆,哥伦布之帆!
新一代技术+商业的人工智能赛博物理操作系统AI-CPS OS作为新一轮产业变革的核心驱动力,将进一步释放历次科技革命和产业变革积蓄的巨大能量,并创造新的强大引擎。重构生产、分配、交换、消费等经济活动各环节,形成从宏观到微观各领域的智能化新需求,催生新技术、新产品、新产业、新业态、新模式。引发经济结构重大变革,深刻改变人类生产生活方式和思维模式,实现社会生产力的整体跃升。
产业智能官 AI-CPS
用“人工智能赛博物理操作系统”(新一代技术+商业操作系统“AI-CPS OS”:云计算+大数据+物联网+区块链+人工智能),在场景中构建状态感知-实时分析-自主决策-精准执行-学习提升的认知计算和机器智能;实现产业转型升级、DT驱动业务、价值创新创造的产业互联生态链。
长按上方二维码关注微信公众号: AI-CPS,更多信息回复:
新技术:“云计算”、“大数据”、“物联网”、“区块链”、“人工智能”;新产业:“智能制造”、“智能农业”、“智能金融”、“智能零售”、“智能城市”、“智能驾驶”;新模式:“财富空间”、“数据科学家”、“赛博物理”、“供应链金融”。
官方网站:AI-CPS.NET
本文系“产业智能官”(公众号ID:AI-CPS)收集整理,转载请注明出处!
版权声明:由产业智能官(公众号ID:AI-CPS)推荐的文章,除非确实无法确认,我们都会注明作者和来源。部分文章推送时未能与原作者取得联系。若涉及版权问题,烦请原作者联系我们,与您共同协商解决。联系、投稿邮箱:[email protected]