目标:仔细研究认知技术,看是否可应用到工作项目中
介绍
概念
- 机器学习是专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能的一门学科
- 是人工智能的核心,是使计算机具有智能的根本途径
学科基础
是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科
应用领域
数据挖掘、计算机视觉、自然语言处理、生物特征识别、搜索引擎、医学诊断、检测信用卡欺诈、证券市场分析、DNA序列测序、语音和手写识别、战略游戏和机器人等
趋势
当下非常热门,各大互联网、IT巨头均推出了相关的项目,各类研报也是一致看好,譬如
- 德勤重磅报告-2016:认知技术成为80%世界百强企业标配
2016年对商业和公共领域领导者们来说最先进的几种认知技术包括 语音识别-计算机视觉-机器学习-自然语言处理-优化-计划与安排-机器人-规则基系统,其中,机器学习,自然语言处理和语音识别对企业软件市场最为重要
局限
- 神经网络(浅度)提出好几十年了,为什么最近才火呢?其中一个原因就是之前它的效果并不比非深度学习算法好,比如支持向量机(SVM),Boosting,逻辑回归(LR)等
- 深度学习也不是万能的,至少现在的一个问题是它需要更强的计算能力才能训练出一个比较好的模型。它还不能像人类那样通过很少的训练样本就能学习很好的效果,当然模型越复杂(网络层数越多),效果越好,但训练所花费的时间也成倍越长
- 目前来看,深度学习只是在Speech和Image这种比较“浅层”的智能问题上效果是比较明显的,而对于语言理解和推理这些问题效果就不那么好了
- 在一个完整的工业级的识别系统里, 除了深度学习算法外,还有很多工作是专业领域相关的算法,以及海量数据收集和工程系统架构的搭建,这就大大增加了构建完整系统的难度和复杂度
- 机器学习模型的训练目前还没更有效的简便方法,在训练过程中,layer的数量、每个layer的node数、卷积层与全连接层的组合模式、卷积kernel的大小、max-pooling层的位置、输出层的log-transform、输入层的数据模式,甚至训练的方法等等,大都需要专家经验去手工调优,所以举例真正的全自动化学习、进化还差距很远
- 了解下来,现有的开源项目做的事情基本上就是将经典的机器学习模型、算法程序化,提供分布式的计算框架(机器学习训练相当耗费计算资源)或者做一套利用机器学习方案解决问题的流程范式
现状
业界动态
Facebook
- Facebook最近宣布对与其自主设计的Open Rack服务器相兼容的硬件设计进行开源
- Facebook已经开源了它的深度学习模块——Torch,Torch是以一种机器学习的开源环境,如今向Torch提供AI工具,结合使用Torch和Big Sur的开源设计将有利于初创公司开展业务,相信将会加速整个行业的进展脚步
百度 Warp-CTC
Google
开源了其机器学习库TensorFlow
关于TensorFlow实现
TensorFlow一大亮点是支持异构设备分布式计算,它能够在各个平台上自动运行模型,从电话、单个CPU / GPU到成百上千GPU卡组成的分布式系统。支持CNN、RNN和LSTM算法,这都是目前在Image,Speech和NLP最流行的深度神经网络模型。
在论文里的例子来看,这个架构有点像Spark或者Dryad等图计算模型。就像写Map-reduce代码一样,我们从高层的角度来定义我们的业务逻辑,然后这个架构帮我们调度和分配计算资源(甚至容错,比如某个计算节点挂了或者太慢)。目前开源的实现分布式Deep learning的GraphLab就是GAS的架构,我们必须按照它的抽象来编写Deep Learing代码(或者其它分布式代码,如果PageRank),而Deeplearning4j直接使用了Spark。Google的TensorFlow应该是一种抽象方式,可惜现在开源的部分并没有这些内容。有点像Google开源了一个单机版的Hadoop,可以用这种抽象(Map-reduce)来简化大数据编程,但是实际应用肯定就大大受限制了。AlphaGo围棋程序在没有任何让子的情况下,以5:0完胜欧洲冠军、职业围棋二段选手樊麾 。在围棋人工智能领域,实现了一次史无前例的突破。
关于AlphaGo实现:
AlphaGo的核心是两种不同的深度神经网络:“策略网络”和“值网络”。它们的任务在于合作“挑选”出那些比较有前途的棋步,抛弃明显的差棋,从而将计算量控制在计算机可以完成的范围里,本质上和人类棋手所做的一样。
其中,“值网络”负责减少搜索的深度——人工智能会一边推算一边判断局面,局面明显劣势的时候,就直接抛弃某些路线,不用一条道算到黑;而“策略网络”负责减少搜索的宽度——面对眼前的一盘棋,有些棋步是明显不该走的,比如不该随便送子给别人吃。将这些信息放入一个概率函数,人工智能就不用给每一步以同样的重视程度,而可以重点分析那些有戏的棋着。
AlphaGo利用这两个工具来分析局面,判断每种下子策略的优劣,就像人类棋手会判断当前局面以及推断未来的局面一样。这样AlphaGo在分析了比如未来20步的情况下,就能判断在哪里下子赢的概率会高。
研究者们用许多专业棋局训练人工智能,这种方法称为监督学习,然后让人工智能和自己对弈,这种方法称为强化学习,每次对弈都能让人工智能棋力精进。然后他就能战胜冠军啦!
人类在下棋时有一个劣势,在长时间比赛后,他们会犯错,但机器不会。而且人类或许一年能玩1000局,但机器一天就能玩100万局。所以AlphaGo只要经过了足够的训练,就能击败所有的人类选手
Microsoft
微软开源分布式机器学习工具包DMTK(Distributed Machine Learning Toolkit)
微软 2.5 亿美元收购 AI 公司 Swiftkey,该公司的产品是基于 AI 的有预测能力的输入法,在 IOS 和安卓平台都有上线,装机量超 3 亿。IBM
IBM开源机器学习系统SystemML,基于Java语言编写,可支持描述性分析、分类、聚类、回归、矩阵分解及生存分析等算法, 可支持单机和分布式部署,支持的框架包括Hadoop和Spark
开源项目
Google TensorFlow
An open source software library for numerical computation using data flow graphs.
Microsoft MDLT
Distributed Machine Learning Toolkit
Badidu warp-ctc
A fast parallel implementation of CTC( Connectionist Temporal Classification ), on both CPU and GPU
Torch
provides a Matlab-like environment for state-of-the-art machine learning algorithms in lua (from Ronan Collobert, Clement Farabet and Koray Kavukcuoglu) 参见快速教程
core features:
- a powerful N-dimensional array
- lots of routines for indexing, slicing, transposing, …
- amazing interface to C, via LuaJIT
- linear algebra routines
- neural network, and energy-based models
- numeric optimization routines
- Fast and efficient GPU support
- Embeddable, with ports to iOS, Android and FPGA backends
Others
- scikit-learn - Numpy / Scipy / Cython implementations for classic machine learning algorithms and provide simple an efficient solutions to learning problems
- GoLearn - machine learning library for Go
…
附录
参考文章
Deep Learning software links
人工智能和机器学习领域有哪些有趣的开源项目?
11 open source tools to make the most of machine learning
The Best Machine Learning Libraries in Python
Spark 2015年回顾:四个大版本更迭、数以百计的改进 ( 新增了数据科学API,包括DataFrames,机器学习流水线(Machine Learning Pipelines)及R语言支持 )
python tools for machine learning
TensorFlow、DMTK与SystemML孰优孰劣
揭秘TensorFlow:Google开源到底开的是什么?
工业4.0时代的物联网架构实践之道
助你玩转机器学习技术的十三套框架
机器视觉与深度神经网络—洗去浮华,一窥珠玑
深度学习在图像识别中的研究进展与展望