深度学习的真正含义

在云计算的GPU把深层神经网络的预测能力中的每个开发人员的范围

或许2016年最积极的技术主题是姗姗来迟的人工智能、机器学习,尤其是深度学习的胜利。在这篇文章中,我们将讨论这意味着什么,以及您自己如何利用深度学习。

也许你注意到在2016年的秋天,谷歌翻译突然从生产,平均一个模糊的词沙拉连接到原始语言发出的,连贯的句子往往为受支持的语言——至少对,如English-French,英汉,英文日文。这种戏剧性的改进是a9个月的共同努力由谷歌Brain和谷歌翻译团队对Translate进行改造,将其从使用基于短语的统计机器翻译算法改为使用经过深度学习和单词嵌入训练的神经网络谷歌的TensorFlow框架

这是魔法吗?不,一点也不:它甚至不容易。从事翻译工作的研究人员可以使用大量的翻译语料库来训练他们的网络,但他们很快发现他们需要这样做数千GPU来训练和必须创造一种新的芯片,张量处理单元(TPU),运行在规模上他们的训练神经网络的翻译。他们还必须完善自己的网络数百次,他们试图训练系统,这将是远不如翻译人员。

你必须是谷歌的规模采取深度学习的优势在哪里?由于云产品,回答是断然否定的。您不仅可以运行云虚拟机和容器实例与许多CPU内核和大量的RAM,你可以访问图形处理器,以及包括深学习软件预置的图片。

传统的编程

要把握有多深学习工作,你需要了解一点的机器学习和神经网络,这实际上本身由他们从传统的节目有什么不同定义。

传统的编程涉及编写的计算机执行的具体说明。例如,以经典的“Hello,World”程序在C编程语言:

/ * Hello World程序* /#包括中的main(){printf的( “你好,世界”);}

这个程序,编译和链接时,做一件事情:它可以打印标准的输出端口上的字符串“你好,世界”。它只做什么程序员告诉它做的,它每次运行时同样的事情。

你可能想知道游戏程序有时如何给来自相同的输入不同的输出,如一条巨龙摆动你的性格的斧头。这需要使用随机数生成器和基于发生器返回的数量进行不同的动作的程序:

BOOL Swing_ax_at_dragon() {BOOL retval = rand()如果(retval) printf(“你的斧头击中。龙死了。”);否则printf(“你的斧头没砍到。”龙吐火焰。”);返回retval;}

换句话说,如果我们想让一个传统程序在统计上变化,而不是表现一致,我们就必须对这种变化进行编程。机器学习颠覆了这种想法。

机器学习

在机器学习(ML)中,最基本的任务是从一系列输入中预测出未来的输出。这是通过从历史数据中对预测器进行统计训练来实现的。

如果预测的值是实数,那么就解a回归问题,如“周二中午微软股票的价格会是多少?”可以通过培训了解MSFT股票交易的完整历史,以及与股票价格相关的所有相关股票、新闻和经济数据。

如果您预测是或否响应,那么你要解决一个二进制或二分类的问题,如“将MSFT股票的价齐升中午周二之间现在?”数据的语料库是一样的回归问题,但用于优化预测算法将是不同的。

如果您预测的类超过两个,那么您正在解决一个多类分类问题,例如“MSFT股票的最佳行动是什么?”买进,卖出,还是持有?”同样,数据的语料库是相同的,但是算法可能不同。

通常,在使用ML时,首先要准备历史数据(参见关于Azure ML的教程的例子),然后随机将其分成两组:一用于培训,一个用于测试。当你处理训练数据时,你使用已知的目标值;在处理用于测试的数据时,可以从其他数据(没有偷看!),并通过预测与已知的目标值计算错误率。

微软的机器学习算法备忘单上面所示是选择算法的一个很好的资源,特别是当您使用Azure ML或其他通用ML库或服务时。对于股票市场数据的情况下,决定森林(以准确性和快速培训)可能是一个不错的第一次回归算法,逻辑回归(快速培训,线性模型)可能是一个好的第一两级分类的算法,和决策丛林(准确性、小内存占用)可能是一个不错的多类分类算法。

顺便说一下,找到最好的算法就是全部尝试。一些ML包和服务,比如Spark。ML,可以帮你平行化,帮你挑选最好的效果。

请注意,对于这三种预测问题,神经网络都是一种选择。还要注意的是,神经网络的准确性和训练时间都是众所周知的。那么神经网络,比的更费时,但精确的方法来学习机另外一个?

神经网络

神经网络的想法可以追溯到20世纪40年代。其基本概念是,由相互连接的阈值开关构成的人工神经元网络,可以像动物的大脑和神经系统(包括视网膜)那样学会识别模式。

学习通过加强两个神经元当两者都在训练期间的同时活性之间的连接基本上发生;在现代神经网络软件,这是最常见的被称为使用规则的神经元之间的连接增加了权重值的问题误差反向传播、backprop或BP。

神经元是如何建模的?每一个都有一个传播函数,用来变换连接的神经元的输出,通常使用加权和。传播函数的输出传递给激活函数,激活函数在其输入超过阈值时触发。

在20世纪40年代和50年代,人工神经元使用阶跃激活函数并被称为感知器。现代神经网络可以参考感知器,但实际上具有平滑的激活函数,如logistic或s型函数、双曲正切和直线单元(ReLU)。ReLU通常是快速收敛的最佳选择,尽管它有一个问题,即如果学习率设置得太高,神经元会在训练过程中“死亡”。

激活函数的输出可以传递到用于附加的整形的输出功能。然而,通常,所述输出功能是恒等函数,即激活函数的输出被传递到下游连接的神经元。

既然我们已经了解了神经元,我们就需要了解常见的神经网络拓扑。在前馈网络中,神经元被组织成不同的层:一个输入层、N个隐藏处理层和一个输出层,每一层的输出只会到达下一层。

与快捷方式连接的前馈网络的一些连接可以跳过一个或多个中间层。在复发性神经网络,神经元可以影响本身,无论是直接,或间接地通过下一层。

神经网络的监督学习与其他机器学习完全一样:向网络提供一组训练数据,将网络输出与期望输出进行比较,生成一个错误向量,然后根据错误向量对网络进行修正。在应用校正前一起运行的训练数据批次称为epoch。

对于那些对细节感兴趣的人,反向传播使用误差(或代价)函数的梯度相对于模型的权值和偏差来发现正确的方向,使误差最小化。有两件事控制着校正的应用:优化算法和学习速率变量,学习速率变量通常需要很小,以保证收敛性和避免造成死亡的ReLU神经元。

神经网络的优化器通常使用某种形式的梯度下降算法来驱动反向传播,通常带有一种机制来帮助避免陷入局部极小值,例如优化随机选择的小批量(随机梯度下降)和应用动力对梯度的修正。一些优化算法也通过查看梯度历史(AdaGrad, RMSProp,和Adam)来调整模型参数的学习率。

与所有的机器学习一样,你需要根据单独的测试数据集来检查神经网络的预测。如果不这样做,你将冒着创建神经网络的风险,它只记住它们的输入,而不是学习成为广义预测器。

深度学习

现在你对机器学习和神经网络有了一些了解,这只是理解深度学习算法本质的一小步。

占主导地位的深学习算法是深神经网络(DNNs),它们是从交替的许多层(因此称为“深”)的线性和非线性处理单元构成神经网络,并使用大型算法和训练大量被训练数据。深神经网络可能有10到20个隐藏层,而典型的神经网络可能只有几个。

网络的层数越多,可以识别的特征就越多。不幸的是,网络的层数越多,计算所需的时间就越长,训练起来也就越困难。

另一种深度学习算法是随机决策森林(RDFs)。同样,它们是由许多层构造的,但RDF不是由神经元构造的,而是由决策树构造的,并输出单个树预测的统计平均值(模式或平均值)。RDFs的随机方面是对单个树使用自举聚合(bagging),并对特征取随机子集。

理解为什么深度学习算法的工作是重要的。我不会这么说没有人知道它们为什么起作用,因为已经有关于这个主题的论文,但我要说的是,对于它们为什么起作用或如何最好地构建它们,似乎没有广泛的共识。

为新的谷歌翻译创建深度神经网络的谷歌脑的人事先并不知道什么算法会起作用。他们不得不反复试验,以使他们的网络更好,但有时会陷入死胡同,不得不返回。(据《纽约时报》早些时候的一篇文章称,“有一天,一个模特无缘无故地把她在句子里遇到的所有数字都取下来,然后扔掉。”)哦。)

有许多方法可以实现深度学习,但没有一种是完美的,至少目前还没有。对于每个应用程序,只有更好和更坏的策略。

深度学习战略,战术和应用

作为深度学习应用的一个例子,让我们以图像识别为例。由于生物用它们的视觉皮层处理图像,许多研究人员已经把视觉皮层的结构作为神经网络的模型来设计执行图像识别。生物学上的研究可以追溯到20世纪50年代。

在视觉神经网络领域的突破是亚·莱卡1998年LeNet-5,七通一平卷积神经网络(CNN)用于识别用32×32像素图像数字化的手写数字。为了分析更高分辨率的图像,该网络将需要更多的神经元和更多的层。

从那时起,用于创建细胞神经网络等深层神经网络包激增。这些包括咖啡微软认知工具包MXNet霓虹灯TensorFlowTheano,火炬

卷积神经网络通常使用卷积层、池层、ReLU层、全连接层和损失层来模拟视觉皮层。卷积层基本上取许多小的重叠区域的积分。池化层执行一种形式的非线性下采样。我们前面提到的ReLU层应用非饱和激活函数f (x) = max (0, x)。在一个完全连接的层中,神经元与前一层的所有激活都有完整的连接。损失层计算网络训练如何惩罚预期标签和真实标签之间的偏差,使用Softmax或交叉熵损失进行分类,或使用欧几里得损失进行回归。

12 第1页
页面1的2
工资调查:结果是