机器学习一种实现人工智能的方法,深度学习是一种实现机器学习的技术。深度学习是利用深度神经网络来解决特征表达的一种学习过程。神经网络一般包括:训练,测试两大阶段,而把训练过程所涉及的环节数据统一抽象,形成可使用的深度学习框架。

images.png

人工智能的浪潮正席卷全球,诸多词汇时刻萦绕在我们的耳边,如人工智能,机器学习,深度学习等。“人工智能”的概念早在1956年就被提出,顾名思义用计算机来构造复杂的,拥有与人类智慧同样本质特性的机器。经过几十年的发展,在2012年后,得益于数据量的上涨,运算力的提升和机器学习算法(深度学习)的出现,人工智能开始大爆发。但目前的科研工作都集中在弱人工智能部分,即让机器具备观察和感知能力,可以一定程度的理解和推理,预期在该领域能够取得一些重大突破。电影里的人工智能多半都是在描绘强人工智能,即让机器获得自适应能力,解决一些之前还没遇到过的问题,而这部分在目前的现实世界里难以真正实现。

若人工智能有希望取得突破,是如何实现的,“智能”又从何而来呢?这主要归功于一种实现人工智能的方法——机器学习。

一、机器学习概念

机器学习一种实现人工智能的方法。

机器学习最基本的做法是,使用算法来解析数据从中学习,然后对真实世界中的事件做出决策和预测。与传统的为解决特定任务、硬编码的软件程序不同,机器学习是用大量的数据来“训练”,通过各种算法从数据中学习如何完成任务。机器学习源于早期的人工智能领域,传统的算法包括决策树、聚类、贝叶斯分类、支持向量机、EM、Adaboost等等。从学习方法上来分,机器学习算法可以分为监督学习(如分类问题)、无监督学习(如聚类问题)、半监督学习、集成学习、深度学习和强化学习。

传统的机器学习算法在指纹识别、基于Haar的人脸检测、基于HoG特征的物体检测等领域的应用基本达到了商业化的要求或者特定场景的商业化水平,但每前进一步都异常艰难,直到深度学习算法的出现。

二、深度学习概念

深度学习是一种实现机器学习的技术。

其本身并不是一种独立的学习方法,也会用到有监督和无监督的学习方法来训练深度神经网络。但由于近几年该领域发展迅猛,一些特有的学习手段相继被提出(如残差网络),因此越来越多的人将其单独看作一种学习的方法。

最初的深度学习是利用深度神经网络来解决特征表达的一种学习过程。深度神经网络本身并不是一个全新的概念,可大致理解为包含多个隐含层的神经网络结构。为了提高深层神经网络的训练效果,人们对神经元的连接方法和激活函数等方面做出相应的调整。其实有不少想法早年间也曾有过,但由于当时训练数据量不足、计算能力落后,因此最终的效果不尽如人意。深度学习,作为目前最热的机器学习方法,但并不意味着是机器学习的终点。起码目前存在以下问题:

1、深度学习模型需要大量的训练数据,才能展现出神奇的效果,但现实生活中往往会遇到小样本问题,此时深度学习方法无法入手,传统的机器学习方法就可以处理;

2、有些领域,采用传统的简单的机器学习方法,可以很好地解决了,没必要非得用复杂的深度学习方法;

3、深度学习的思想,来源于人脑的启发,但绝不是人脑的模拟。

因此,机器学习框架和深度学习框架之间也是有区别的。本质上,机器学习框架涵盖用于分类,回归,聚类,异常检测和数据准备的各种学习方法,也可以包括神经网络方法。深度学习或深度神经网络(DNN)框架涵盖具有许多隐藏层的各种神经网络拓扑,包括模式识别的多步骤过程。网络中的层越多,可以提取用于聚类和分类的特征越复杂。常见的Caffe,CNTK,DeepLearning4j,Keras,MXNet和TensorFlow是深度学习框架。 而Scikit-learning和Spark MLlib是机器学习框架。 Theano则跨越了这两个类别。

三、主流的三大深度学习框架

神经网络一般包括:训练,测试两大阶段。训练就是把训练数据和神经网络模型(AlexNet、RNN等神经网络训练框架Caffe等)用CPU或GPU提炼出模型参数的过程。测试就是把测试数据用训练好的模型(神经网络模型+模型参数)运行后查看结果。而把训练过程所涉及的环节数据统一抽象,形成可使用框架。

  • TensorFlow:Google支持,其简化版是Keras;
  • PyTorch:Facebook支持,其工业版是Caffe2;
  • MXNet:中立,Apache孵化器项目,也被AWS选为官方DL平台。

TensorFlow

logo-color-tensorflow.png

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。当前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

PyTorch

v2-0ebe61d7d5b0530808a01f679eb9214c.jpg

PyTorch是一个开源的Python机器学习库,基于Torch,底层由C++实现,应用于人工智能领域,如自然语言处理。它最初由Facebook的人工智能研究团队开发,并且被用于Uber的概率编程软件Pyro。PyTorch主要有两大特征:类似于NumPy的张量计算,可使用GPU加速;基于带自动微分系统的深度神经网络。PyTorch包括torch.nn、torch.optim等子模块。

MXNet

2018051714231594.jpg

Apache MXNet是一个开源深度学习软件框架,用于训练及部署深度神经网络。MXNet具有可扩展性,允许快速模型训练,并支持灵活的编程模型和多种编程语言。 MXNet库可以扩展到多GPU和多台机器,并可移植。MXNet由公共云提供商亚马逊云计算服务和Microsoft Azure支持。

MXNet的高层接口是Gluon,Gluon同时支持灵活的动态图和高效的静态图,既保留动态图的易用性,也具有静态图的高性能,这也是官网介绍的flexible和efficient的出处。同时,MXNet还具备大量学术界的前沿算法,方便移植至工业界。

也许有其他的TOP列表,这并不重要。了解各个框架并做出适当的选择。不妨再额外介绍两个。

Microsoft认知工具包

hqdefault.png

Microsoft Cognitive Toolkit以前称为CNTK,是一个用于训练深度学习模型的开源深度学习框架。它可以针对几乎所有DL任务(包括基于图像,语音和基于文本的分析)有效地训练CNN和RNN。与在多台机器上运行时的TensorFlow相比,Microsoft Cognitive Toolkit提供了更高的性能和可伸缩性。Microsoft Cognitive Toolkit能够处理图像,手写和语音识别问题。

Deeplearning4j

DL4J.png

Deeplearning4j是用Java实现的,因此与Python相比,效率更高。它使用称为ND4J的张量库,该库提供了使用n维数组(也称为张量)的功能。该框架还支持CPU和GPU。

Deeplearning4j将加载数据和训练算法的任务视为单独的过程。功能的这种分离提供了很大的灵活性。

👍

本文由 CulmartPlay 整理发布,参考 CC-BY-SA 3.0 协议共享,欢迎转载、引用或改编。
感谢您的支持,以共同推动STEM公益教育!

楼主残忍的关闭了评论