深度学习框架 应该学几个吗

随着越来越多的企业希望扩大业務规模它们已经成为他们吸收机器学习和预测分析的不可或缺的组成部分。AI与正确的深度学习框架相结合真正扩大了企业在其领域内實现和获得的总体规模。

机器学习范式不断发展关键是要转向开发在移动设备上运行的机器学习模型,以便使应用程序变得更智能和更智能化深度学习使解决复杂问题变得可能。

鉴于深度学习是执行更高级复杂任务的关键成功构建和部署它们被证明是全球数据科学家囷数据工程师面临的艰巨挑战。今天我们掌握了大量的框架,使我们能够开发工具提供更好的抽象级别,同时简化困难的编程挑战

為了不同的目的,每个框架都以不同的方式构建在这里,我们看一下排名前八的深度学习框架以便您更好地了解哪个框架将完美融入戓适用于解决业务挑战。

TensorFlow可以说是最好的深度学习框架之一并且已经被Airbus,TwitterIBM等几家巨头所采用,主要原因在于其高度灵活的系统架构

TensorFlow朂著名的使用案例是Google Translate,加上自然语言处理文本分类/汇总,语音/图像/手写识别预测和标记等功能。

TensorFlow可在桌面和移动设备上使用并且还支持诸如Python,C ++和R等语言以创建深度学习模型以及封装库。

TensorFlow附带两个广泛使用的工具:

  1. TensorBoard用于网络建模和性能的有效数据可视化
  2. TensorFlow服务于快速蔀署新算法/实验,同时保留相同的服务器体系结构和API它还提供了与其他TensorFlow模型的集成,这与传统实践不同并且可以扩展为服务于其他模型和数据类型。

如果您正在迈向深入学习的第一步那么选择TensorFlow是一件简单的事情,因为它基于Python得到了Google的支持,并且加载了文档和演练来指导您

Caffe是一个深度学习框架,支持CC ++,Python和MATLAB等界面以及命令行界面它以其速度和可移植性及其在卷积神经网络(CNN)建模中的适用性而闻洺。使用Caffe的C ++库(带有Python接口)的最大好处是可以从深度网络库Caffe Model Zoo访问可用网络这些网络是经过预先训练并可立即使用的。当涉及到建模CNN或解決图像处理问题时这应该成为您的首选库。

Caffe最大的USP是速度它可以使用单个Nvidia K40 GPU每天处理6000多万张图像。这是1毫秒/图像的推理和4毫秒/图像的学習 - 而最近的库版本更快

Caffe是一个流行的视觉识别深度学习网络。但是Caffe不支持像TensorFlow或CNTK中那样的精细网络层。鉴于架构对经常性网络的整体支持以及语言建模相当糟糕,并且建立复杂的图层类型必须以低级语言完成

Microsoft Cognitive Toolkit(以前称为CNTK)是一种开源的深度学习框架,用于培养深度学習模型这一模式以简单的训练和流行的模型类型跨服务器而广为人知。它执行高效的卷积神经网络和训练图像语音和基于文本的数据。与Caffe类似它由诸如Python,C ++和命令行界面等接口支持

考虑到资源的一致性使用,可以使用工具包轻松完成强化学习模型或生成对抗网络(GAN)嘚实施与在多台机器上运行时的Theano或TensorFlow等工具包相比,它提供更高的性能和可扩展性

与Caffe相比,当涉及到发明新的复杂图层类型时由于构建块的细粒度,用户无需使用低级语言来实现它们Microsoft Cognitive Toolkit支持RNN和CNN类型的神经模型,因此能够处理图像手写和语音识别问题。目前由于ARM架构缺乏支持,其在移动设备上的功能相当有限

Torch是一个科学计算框架,为机器学习算法提供广泛的支持这是一个基于Lua的深度学习框架,广泛应用于FacebookTwitter和Google等行业巨头之中。它采用CUDA和C / C ++库进行处理基本上可以扩展生成模型的生产规模并提供全面的灵活性。

最近PyTorch在深度学习框架社区中获得了高度的认可,并被认为是TensorFlow的竞争对手PyTorch基本上是Torch深度学习框架的一个端口,用于构建深度神经网络和执行高复杂度的张量计算

与Torch相反,PyTorch运行在Python上这意味着任何对Python有基本了解的人都可以开始构建自己的深度学习模型。

鉴于PyTorch框架的架构风格与Torch相比,整个深层建模过程要简单得多且透明

专为高效率,高生产力和灵活性而设计的MXNet(发音为mix-net)是PythonR,C ++和Julia支持的深度学习框架

MXNet的美妙之处在于它使用戶能够使用各种编程语言进行编码。这意味着您可以使用您喜欢的任何语言来训练您的深度学习模型而无需从头学习新的东西。通过使鼡C++和CUDA编写的后端MXNet可以扩展并使用大量的GPU,这对企业来说是不可或缺的案例:亚马逊采用MXNet作为深度学习的参考资料库。

这种深度学习框架以其在成像手写/语音识别,预测和NLP方面的功能而闻名

Chainer是一个基于Python的神经网络深度学习框架,由运行策略设计非常强大,动态和直觀 与使用相同策略的其他框架相比,您可以在运行时修改网络从而允许您执行任意控制流程语句。

Chainer支持CUDA计算和多GPU这种深度学习框架主要用于使用RNN和CNN进行情感分析,机器翻译语音识别等。

以极简主义著称Keras神经网络库(带有Python支持接口)支持能够在TensorFlow或Theano上运行的卷积网络囷循环网络。该库是用Python编写的并且作为其USP进行快速实验开发。

由于事实上TensorFlow界面有点挑战性并且这是一个低层次的库,可能对新用户来說错综复杂Keras的构建是为了通过构建有效的快速原型来提供一个简单的界面可以与TensorFlow协同工作的神经网络。

轻量级易于使用,并且通过堆疊多个层来构建深度学习模型非常简单——这就是Keras这就是Keras成为TensorFlow核心API一部分的原因。

Keras的主要用途是分类文本生成和汇总,标记和翻译鉯及语音识别等。如果你碰巧是一名有Python经验的开发人员并希望深入学习,Keras你应该看看

通过减少迭代,适应微服务架构以及分布式CPU和GPU的並行培训是Deeplearning4j深度学习框架的一些显着特性 它以Java和Scala开发,并支持其他JVM语言

作为一个商业化的,以行业为中心的分布式深度学习平台该罙度学习框架的最大优势在于,您可以将整个Java生态系统汇集在一起以执行深度学习它也可以在Hadoop和Spark之上进行管理,以编排多个主机线程DL4J使用MapReduce来训练网络,同时依赖其他库来执行大型矩阵操作

Deeplearning4j通过RBM,DBN卷积神经网络(CNN),递归神经网络(RNN)递归神经张量网络(RNTN)和长短期记忆(LTSM)提供深度网络支持。

由于这个深度学习框架是用Java实现的与Python相比,它更高效当涉及到使用多个GPU的图像识别任务时,它与Caffe一样赽该框架为图像识别,欺诈检测文本挖掘,词类标注和自然语言处理展示了无与伦比的潜力

如果您使用Java作为您的核心编程语言,并苴您正在寻找将深度学习模型部署到生产环境的强大而有效的方法您当然应该选择这个深度学习框架。

很明显深度学习的出现已经引發了许多机器学习和人工智能的实际使用案例。通过深入的学习使最简单的任务以最有效的方式分解任务成为可能。

上面列出的哪个深喥学习框架最适合您的业务需求但是,如果您刚刚起步那么基于Python的深度学习框架(如TensorFlow或Chainer)是理想的选择。

如果您正在寻找更多的东西那么在为您的业务需求选择一个深度学习框架之前,应始终考虑速度、资源需求和使用情况以及经过训练的模型的一致性

这是一份用于理解深度学习内部運作方式的初学者指南作者根据自己从零开始学习用 Python 构建神经网络的经验,编写了一份攻略内容涵盖神经网络定义、损失函数、前向傳播、反向传播、梯度下降算法,对于想要了解深度学习运作原理的各位来说内容精彩不可错过。

动机:为了深入了解深度学习我决萣从零开始构建神经网络,并且不使用类似 Tensorflow 的深度学习库我相信,对于任何有理想的数据科学家而言理解神经网络内部的运作方式都非常重要。

在这里还是要推荐下我自己建的Python开发学习群:群里都是学Python开发的,如果你正在学习Python 小编欢迎你加入,大家都是软件开发党鈈定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2018最新的Python进阶资料和高级开发教程欢迎进阶中和进想深入Python的小伙伴

本文涵盖了我学到的所有东西,希望你也能从中获益!

许多有关神经网络的介绍资料会将神经网络与大脑进行类比但我发现,将神经网络简單地描述为一个从输入映射到输出的数学函数理解起来更容易

神经网络由以下部分组成:

每两层之间都有一组权重和偏置,W 和 b

每个隐藏層都要选择一个激活函数 σ。在本文中,我们选用 Sigmoid 激活函数

下图展示了 2 层神经网络的结构(请注意,在计算神经网络层数的时候通常鈈计入输入层)。

利用 Python 建立神经网络非常容易

一个简单 2 层神经网络的输出 ? 可以表示为:

你可能注意到,在上面的等式当中权重 W 和偏置 b 是影响输出 ? 的唯一变量。

自然权重和偏差的正确值决定了预测的强度。根据输入数据微调权重和偏置的过程称为神经网络训练

训練过程的每一次迭代包含以下步骤:

计算预测的输出 ?,称为前向传播

更新权重和偏置,称为反向传播

以下流程图说明了这个过程:

正如峩们在上图中所看到的前向传播只是一个简单的计算。对于一个基本的 2 层神经网络神经网络的输出计算如下:

我们可以在 Python 代码中添加┅个前向传播函数来做到这一点。简单起见我们假设偏置为 0。

然而我们仍然需要一种方法来评估我们的预测的「优秀程度」(即,我們的预测与真实值相差多少)这就需要用到损失函数了。

损失函数有很多种而我们问题的性质会决定我们使用哪种损失函数。在本文Φ我们将采用简单的误差平方和。

误差平方和即每个预测值和真实值之间差值的平均值。这个差值是取了平方项的所以我们测量的昰差值的绝对值。

在训练过程中我们的目标是找到一组最佳的权重和偏置,使损失函数最小化

现在,我们已经找到了预测误差的方法(损失函数)那么我们需要一种方法将错误「传播」回去,从而更新权重和偏置

为了确定权重和偏置调整的适当值,我们需要知道损夨函数对权重和偏置的偏导数

从微积分的角度来看,函数的偏导数也就是函数的斜率

如果我们知道了偏导数,我们可以通过简单增加戓减少偏导数(如上图所示)的方式来更新权重和偏置这就是所谓的梯度下降。

然而由于损失函数的方程不包含权重和偏置,所以我們不能直接计算损失函数对权重和偏置的偏导数因此,我们需要链式法则来帮助计算

以上是用于计算损失函数对权重偏导数的链式法則。简单起见我们只展示了一层神经网络的偏导数。

唷!这看起来不大好看但这能让我们获得所需——损失函数对权重的偏导数(斜率),以便相应调整权重

既然我们已经有了链式法则公式,接下来我们把反向传播函数添加到 Python 代码中

为了更深入地理解微积分和链式法则在反向传播中的应用,我强烈推荐 3Blue1Brown 的视频教程

既然我们已经有了做前向传播和反向传播的完整 Python 代码,我们可以将神经网络应用到一個示例中看看它的效果。

我们的神经网络应该能够习得理想的权重集合以表示这个函数请注意,对于我们来说仅通过检查来计算权偅并非一件小事。

如果我们将神经网络进行 1500 次迭代看看会发生什么。下图展示了每次迭代的损失函数值我们可以清晰地发现损失函数單调下降到最小值。这与我们前面讨论的梯度下降算法是一致的

让我们看看神经网络在进行 1500 次迭代后的最终预测(输出):

进行 1500 次迭代後的预测值

我们成功了!我们的前向传播和反向传播算法成功训练了神经网络,且预测值收敛到了真实值

请注意,预测值和真实值之间還是有一些轻微差异的这是可取的,因为它防止了过度拟合并且使得神经网络具有更强的泛化能力。

幸运的是我们的探索还没有结束。关于神经网络和深度学习还有很多需要学习的地方例如:

除了 Sigmoid 函数之外,我们还可以使用哪些激活函数

在训练神经网络时使用学習率

使用卷积进行图像分类任务

在撰写此文的过程中,我已经学到了很多希望本文也能对你有所帮助。

在没有完全了解神经网络内部工莋原理的情况下虽然使用诸如 TensorFlow 和 Keras 之类的深度学习库可以让我们很容易地建立深度网络,但我认为对于有抱负的数据科学家而言深入理解神经网络还是大有裨益的。

从零开始:教你如何训练神经网络

了解神经网络你需要知道的名词都在这里

从感知机到深度神经网络,带伱入坑深度学习

我要回帖

 

随机推荐