2016年10月18日, 世界人工智能大会技术分论坛,特设“新智元智库院长圆桌会议”,重量级研究院院长 7 剑下天山,汇集了中国人工智能产学研三界最豪华院长阵容:美团技术学院院长刘江担任主持人,微软亚洲研究院常务副院长芮勇、360人工智能研究院院长颜水成、北京理工大学计算机学院副院长黄华、联想集团副总裁黄莹、Intel 中国研究院院长宋继强、新华网融媒体未来研究院院长杨溟联袂出席。
百度开源 DeepBench 基准测试工具,AI研究者和芯片制造商可以用它测试不同的芯片运行软件时的性能,尤其是哪款硬件加速深度学习性能最好。从计算角度看,深度学习多样化而且演化迅速,就连微软也刚刚推出了针对深度学习的FPGA系统。百度的这次开源将推动深度学习专用芯片蓬勃发展。想了解深度学习硬件与技术发展?10 月 18日下午,来世界人工智能大会技术分论坛,向 Intel 中国研究院院长宋继强提问。点击阅读原文抢票参会!
DeepBench 介绍以及测试结果
深度学习生态系统包括不同的模块,百度开源的DeepBench位置在哪里呢?
如下图,顶部是深度学习框架(Deep Learning Frameworks),例如百度的PaddlePaddle, Theano, TensorFlow, Torch等能用于建立深度学习模型。为了训练这些模型,框架需要利用基础神经网络库(Neural Network Libraries)例如NVIDIA的cuDNN和英特尔的MKL。最后,模型要在硬件平台例如NVIDIA CPU或英特尔的Xeon Phi处理器上训练。
DeepBench 使用神经网络库测量基础运算在不同硬件上的表现。它对深度学习框架和应用性的深度学习模型不起作用,也没法用于测量训练整个模型所需的时间。为不同任务建立的不同模型的性能特性彼此间差别很大。因此,DeepBench测试的是深度学习模型训练中的基础运算。测试这些运算有助于提高硬件供应商的意识,也有助于软件开发者了解深度学习训练的瓶颈。
DeepBench 包括一系列基础操作(稠密矩阵相乘、卷积和通信)以及一些循环层类型。在开源代码中有一个 Excel 表格描述了这些操作的大小。前向和后向的运算都会被测试。该基准的第一版将注重在 32 位浮点算法中的训练表现。未来的版本可能扩展到推理工作负载(inference workloads)和更低精度的算法。我们将使用供应商提供的库,即使存在更快的独立库或公开了更快的结果。因为大部分用户默认使用供应商提供的库,这种库更能代表用户体验。
百度发布在 4 个硬件平台上的结果:NVIDIA的 TitanX、M40、TitanX Pacal 和英特尔的 Knights Landing。硬件供应商或独立用户可运行大致的基准,并将结果输入到表格中。 我们在DeepBench库中提供了结果的概述以及所有的结果。
稠密矩阵相乘计算方法及测试结果
现在几乎所有深度学习网络都包含稠密矩阵相乘。它们被用于执行全连接层和 vanilla RNN,以及为其他类型的循环层建立基石。有时它们也被用于快速执行自定义代码缺失的新类层。当执行 GEMM 运算 A * B = C 时,A 和 B 中的一个或两个都可随意换位。描述一个矩阵问题的常用术语是 triple(M,N,K), 该术语描述了矩阵的大小。下图描述了triple(M,N,K)如何对应相乘的矩阵。
卷积计算方法及测试结果
卷积构成了网络中图像和视频操作的绝大多数的浮点计算,也是语音和自然语言模型网络的重要部分,从性能角度看,它可能也是唯一最重要的层。卷积有 4 或 5 维的输入和输出,这些维提供了大量可能的排序。在该基准的第一版,我们只考虑了在 NCHW format 中的表现,即数据在图像、特征映射、行和列中的性能。更多深度学习解读:www.yangfenzi.com/tag/shenduxuexi
不同大小的过滤器和图像可选择不同的卷积计算方法,例如,direct approaches、基于矩阵相乘的方法、基于 FFT 的方法以及基于 Winograd 的方法。在该基准的第一版,我们不考虑不同方法的准确率,因为普遍共识是 32 位浮点计算对它们每个方法而言都是足够准确的。
循环层计算方法及测试结果
循环层总是由之前的运算与一元(unary)或二元(binary)运算这样的简单计算结合而成的——这些简单运算不是计算密集型的,通常只需占据总体运算时间的一小部分。然而,在循环层中,GEMM 和卷积运算相对较小,所以这些更小运算的成本变得有极大影响。如果开始计算就有一个很高的固定成本,那上述内容就尤其准确。也可以为循环矩阵使用额外的存储格式,因为转换成一个新的存储格式的成本可被分摊到循环计算的许多步骤上。如果能做到这一点,那么从一个自定格式转换或转换成一个自定义格式的时间应该被包含在整体时间之内。
在一个时间步骤内和跨序列的时间步骤上,这些因素会导致很多优化的可能性,因此测定运算的原始性能并不一定能够代表整个循环层的的性能。在这样的基准上,我们仅关注一个循环层,即使还存在其它更多的优化机会(如果考虑它们的层叠(stack))。
输入的计算不应该被包含在用于循环层计算的时间内,因为其可以作为一个大的乘法计算,然后被实际的循环运算所消化。所以在 h_t = g(Wx_t + Uh_t-1) 中,Wx_t 对于所有 t 的计算时间不应被包含在循环层的时间内。反向计算应该在考虑权重而非输入的基础上计算更新(update)。所有的循环工作完成以计算权重更新,所以同时考虑输入来计算更新会掩盖我们想要测定的内容。
vanilla RNN 的非线性应该是一个 ReLU。LSTM 的内在非线性应该是标准运算——门是 S 型函数,激活是双曲正切函数。LSTM 不应该有窥视孔连接(peephole connections)。
All-Reduce 计算方法及测试结果
现在的神经网络通常在多 GPU 或多系统与 GPU 并行的情况下训练,这主要有两个技术分类:同步和异步。同步技术依赖于保持参数和所有模型实例的同步,它通常要保证在优化步骤执行前,所有模型实例有一些梯度的备份。最简单运行这些计算结果的 Message Passing Interface (MPI) 被称为 All-Reduce。有很多可以执行 All-Reduce 的方法,我们可以依靠数字的排列、数据的大小和网络的拓扑结构来执行。这种基准测试的方式在执行时是没有限制的,所以它的结果是不确定的。异步的方法则非常的不同,在这个版本的基准测试中我们不会测试这些方法。
为了评估 All-Reduce,我们使用了下面的库和基准:NVIDIA’s NCCL Ohio State University (OSU) Benchmarks。NCCL 库包括一组标准的通信程序。这个库支持在单个节点任意数量的 GPU 运行,并且它能在单个或多个进程中运行,但 NCC 程序不支持多节点下的 All-Reduce。为了能够在多节点下评估 All-Reduce,我们使用了 OSU 下的 benchmark。我们在三个执行过程中 (NCCL single process, NCCL MPI, OpenMPI) 报告了最短的延迟。
深度学习专用芯片研发火热,微软加入战场
目前为止,DeepBench还只能测试训练深度学习模型,但未来它可能测试用于图像和语音识别之类任务的“推论”模型。同时,DeepBench能提供在三种Nvidia GPU和一种Intel Xeon Phi处理器的基准化测试结果。
百度高级研究员Greg Diamos在一次采访中说,“百度希望DeepBench能鼓励更多的特定深度学习算法的处理器,例如语音和图像识别、翻译以及其它任务。我们希望这能降低更高性能处理器的障碍,GPU显然不是终点,我们希望这能鼓励竞争。”
深度学习神经网络的瓶颈在于计算机性能,虽然不断升级的CPU有助于深度学习模型,但计算机处理能力仍显不足。
其他公司,例如Google 和Wave Computing,就在为深度学习开发的处理器。Intel之前收购的 Movidius和Nervana Systems,也在模仿 GPU 的并行计算能力制作芯片,但是着眼于把数据更快转移和分摊给图像所需要的功能。
其中,作为 GPU 在算法加速上强有力的竞争者,FPGA 硬件配置灵活且单位能耗通常比 GPU 低。更重要的是,FPGA 相比 GPU 价格便宜。但是,使用 FPGA 需要具体硬件的知识,而许多研究者和应用科学家并不具备,因此 FPGA 常被视为一种行家专属的架构。
在前几天的Orlando的微软技术大会上,微软展示了由FPGA升级的定制芯片驱动的服务器于眨眼间完成Wikipedia上全部文字的直译。微软把这项技术成为“global hypescale”,能在1/10秒完成翻译500万篇文章共计30亿单词的翻译。
微软的定制可编程逻辑元件,或称可编程门阵列(FPGA),已经加入到每个计算节点。该公司意识到更智能、计算密集的技术需要后端更强大的计算能力。FPGA的好处在于,它可以为特定任务优化或调整,以便快速执行该任务,然后随着微软自有算法的改进快速重新配置。微软首席工程师Doug Burger说,它不仅能加快传送率,而且在四种高端CPU内核和四种FPGA主板的测试中,结果表明FPGA的耗电量仅为前者的四分之一。
微软首席执行官Satya Nadella称,设计新的计算基础设施的动力来自微软的人工智能方案,包括Cortana和bot 框架。他说,过去微软的目标是创造和获取数据,现在,同样的方法被应用于人工智能。
【来源:siliconangle.com,Github 译者:刘小芹,李静怡】
·氧分子网(http://www.yangfenzi.com)延伸阅读:
➤ Facebook开源深度学习框架Torchnet与谷歌TensorFlow有何不同
➤ 地平线机器人李星宇:复杂的中国驾驶场景,正是深度学习的优势
➤ 百度吴恩达谈深度学习局限:AI经济价值目前仅来自监督学习
➤ 卡耐基梅隆大学邢波:为人工智能装上引擎—忆格拉丹东登山之旅
➤ 傅盛:深度学习是什么?企业核心竞争力正在从算法转变为数据
DL 适合处理感知, 而非逻辑(or结构)
感知与逻辑的重要区别在于输入数据在输入空间中做连续变化还是离散变化
图片/语音这类感知问题中, 输入的都是裸的信号, 这一点的好处在于, 输入数据具有连续性:
一个苹果, 它稍微胖一点瘦一点红一点, 点几个噪点上去, 对于人类来说仍然是苹果.
一句话, 稍微大声一点尖锐一点卡顿一点加点噪声变点音色, 对于人类来说仍然是这句话.
也即: 输入数据可以在它的小邻域内做连续变化而不改变自身意义, 或者说输入点可以做小的扰动而不改变自身意义
然而对于其他问题, 如NLP, 推荐系统, 乱七八糟的DM问题, 输入数据不再是裸的信号了, 人类还没有找到很好对这些问题的输入数据的描述方式, 也即feature, 使得这种描述的信息损失很小, 且具有连续变化, 或者说抗扰动的能力, 同时这种描述最好别在输入空间中太sparse..
比如说, NLP 里如果要给document分类, 或者识别’情绪’什么的, 还是有解决的比较好的..因为这个问题抗扰动: document里多几个词少几个词不影响分类. 同时对于人类来说, 它比很多问题更像一个感知问题: 扫一眼文章就可以大致知道它的类别. 最近比较火的image description, 也比较类似于这种.
反之, 如果给一句话, 标POS, 指代消解等等…这些逻辑问题实在是太不抗扰动了…
推荐问题的输入算是抗扰动了吧..但是感觉又太sparse了. 你看一张图片的输入才几千个dimension..
毕竟神经网络啊..还有其他不少ML算法..其实就是在输入空间中找一个很可能很扭曲的manifold把人标好的那些数据点强行连到一起. 当然manifold一定是连续的, 所以如果数据点和它邻域的点就已经不在一类里了那这个manifold得多扭曲? 如果维度太高数据点太sparse这个manifold轻易就拟合上了那得多废柴…
adversarial 相关的paper已经说了, 即使做图像, 神经网络搞出来的manifold其实已经很扭曲了….比如最早的一篇http://arxiv.org/abs/1312.6199 对输入做一做perturbation就可以分错类..
1. 图像识别比自然语言处理中的很多问题,比如词义消歧本身要简单。我自己个人判断的土办法是,如果人容易处理的(在人工智能这方面),那么计算机就相对容易处理,反之亦然。
2. 图像处理比较容易并行化,适合GPU计算,计算周期较小,这样可以更好地调整参数。语言处理一算就要好几个星期,调整参数很难。从理论上而言,神经网络可以模拟任何潜在函数,如果数据太少就会过度拟合。但是我们目前还没有这么多计算能力来计算如此庞大的数据。
对图像不是很懂,就语音识别领域说一下吧。在语音识别领域有一则广为人知的轶事,曾经提出基于统计的语音识别框架的贾里尼克教授在IBM工作时说:我们每开除一个语言学家,我们的语音识别系统识别率就上升一点。如今的语音识别,基于统计的方法占据绝对的主流优势,而三四十年前的基于规则的方法越来越式微。为什么要说这个呢,其实DNN在语音识别中的应用很有限。整体的HMM框架是没有人会动的,DNN只是其中的一部分,而DNN代替的这一部分,有很多优化策略是基于规则的,至少是基于经验的,这正是统计学习方法里面的大忌。当大家不能确定一件事情的对错时,总是希望把它假设为随机的,引入的知识越少就越靠谱,因为你无法保证你的引入是正确的。DNN很多时候都是在消除人为引入的先验知识。至于说为什么人们明知道有问题还会引入这些知识,那实在是因为以前的学习方法实在学习不了如此复杂的模型。至于图像里面,我个人的直观印象应该与图像邻域结构有关吧。
而且你说进展很大或者进展不大,这个标准实在不好界定。现在很多地方都在用DNN,而且也有不少结果出现,只能说语音识别和图像处理有比较完善的模型,在结果上也更好比较更加容易为人所知,但至少就语音识别领域而言,我个人的意见是,DNN的意义并没有它所宣传的那么大。
Deep Learning大概是现在的机器学习算法里最接近人脑思维的一种,因为人脑的神经网络就是非常深层的。为什么需要Deep?因为据说人脑对问题的认识和分类就是非常深的层级结构。
举两个例子:
看一幅图时对特征的提取大概是:像素–>边缘–>基本形状–>纹理–>各种复杂–>各种复杂。
对于一句话:音节–>单词–>分句–>句子–>各种复杂–>各种复杂。
显然,传统神经网络算法两三层那样是不行的,而传统神经网络往往两三层就能解决大多数问题(理论上三层网络可以逼近任意函数),当网络层数多了的情况下反而训练误差又难以接受。不够Deep,另外一些比如有阵子很流行的SVM,不仅不够Deep,还有很严重的Local Generalization的问题(因为support vector本质是某个training data)。
所以能够解决Deep Architecture和对特征的有效表征,大概就是在语音识别领域和图像识别领域,相对于其他办法,取得巨大进展最主要的原因吧。
这背后的一些特点比如分布式的表征(不知道是不是这么翻译,Distributed Representation),无监督学习的应用,也使得特征的提取和容错都变得更好,打个比方"He is good", "You are better",这种在传统的办法里是非常localized的(Markov Chain和一些相关性模型),也就是说“xx is/are xxx”这种模式不容易学习,而对于deep learning就相对容易。具体的可以参考06年的三篇让deep learning崛起的paper(见链接),以及他们作者的一些文档。
DL当然有它的优势,有一些进展,对于AI有些贡献。但是个人觉得,人工神经网络,还是人工凑出来的网络结构,打着模拟人脑的旗帜,不论你怎么学习,我们还不知道大脑是到底如何处理信息,神经网络只是结构上的模拟,内部机制呢,所以最近搞生物研究结合计算机的挺热的。最终还是得从生物方面弄清楚大脑机制才是王道。
所以个人不同的观点是,大佬手一挥,大部队往上涌,其实离人工智能还远着。不过毕竟研究就是各种新鲜的尝试。一万次实验成功一次就是成功。DL应该是最近看来比较好的尝试之一,不过稍稍热多了一点。
有些时候我们神话了DeepLearning。在很多 IR 和NLP的领域,已有的模型已经取得了很好的效果。比如英语的Parser已经快95%了,你怎么指望DNN去给你做的更高。很多时候明明可以用很简单的模型就可以解决的,我们就别用DNN了。。。而自然语言正是很多事情简单的模型已经搞定了,就不需要DNN了,不能很好的提升效果
这两个方向的问题比较容易转化为ML的模型
如果关注一下SVM在哪个领域用的最多的话,多半应该是计算机视觉
其实很多问题看起来是不同领域,但都是有潜在关联的
比如语句与文字的处理,本身就是一个研究语义的问题
实际上语音以及图像也是可以提炼出“语义”的
deep learning现在应该是谷歌做的比较深,谷歌是一家搜索引擎的企业,每天面对的主要问题也就是各种检索、分类、打标签乱七八糟的问题。而细化一下,就是处理文字、图片以及视频的问题
所以绕了一圈之后,还是会回到图像处理上面来。
人工智能的问题分为两类,一类是模式识别,另一类是逻辑推理。问题越靠近与前者,deep learning的效果就越好。所以你可以指望deep learning做人脸识别,但是反正不能指望他来替你答数学题,更不能指望他能跟人脑一样做各种阴暗的策划。biological analogy是胡扯的。dropout的analogy是什么?人类的每个神经元有一半的随机概率会失灵?
这个问题不应该先说DL有什么技术特点,而应该先回答图像和语音识别这类问
题的特性是什么?
人工智能类问题的特点是最优解的复杂程度较高,但是质量也很高(起码人脑的识别率就很高,定量点说就是存在MSE很小的解),训练样本也不缺。
这就和某些最优解质量都很低以及样本量很小的问题区别开来了,比如通过一个人的学历、性别、族裔预测收入,或者通过昨天前天的股票量价预测今天的股票价格。
本质上来说就是目标函数不一样,样本信噪比不一样,样本大小不一样,合适的方法不一样。神经网络类的模型不可能包打天下。
首先,图像语音应该是比较简单的信号(分别是二维,一维,对每个样本而言)。简单的信号一般容易成为方法论的实验对象,比如小白鼠。(其实也不完全对,图像由像素组成,拉成列向量处理其实也是高维。)
第二,图像是海量的啊,现在大家都有相机,随手就能上传照片。语音在翻译,交流,交互方面也有很大需求。所以它们都有很大需求是另外一个原因吧。另外,语音应该说还有nlp的渊源。
第三,这两种数据就是我们生活中最经常接触的数据类型,如果可以实现智能理解,人工智能可能就不远了。而dl模拟多层神经网络的架构,其实也是希望实现一定程度的智能化。因此,生活中最经常接触的数据自然成为了研究最多的数据。
所以这不仅是dl的广泛研究对象,也是人工智能研究的对象吧。
另外,其实dl除了这两类数据外,应该还有很多对复杂文本的分析,对于行为的分析(高维数据)。所以问题本身可能有点ill-posed。想了解是否ill-posed其实只要谷歌学术一下就知道了。用手机我就不打算查了。
总结,由于数据类型比较简单,与生活密切联系有极大需求,以及与人工智能紧密联系,可能是让题主有提出该问题的主要原因。(注意该问题可能是ill-posed)
个人认为,半黑箱框架,如果对某类效果好的话,会有两个值得注意的地方:
1 存在一个全新的、更简单的框架。
2 能找到一个更深层次的、更fundamental的原因来解释,这类问题的具备哪些特征,才正好适用于此个框架。
这两个方向,都值得探究。
It is a capital mistake to theorize before one has data. – Sir Arthur Conan Doyle
但感觉现在是,有了data,却很难theorize。也许深度学习本身会是终级theory?
其实不只深度学习了,现在火的在范数L1 norm到Lp norm上做文章也是。
说些题外话。
算法细分的话:有产品型的,一般要求算法够鲁棒,street smarts,什么情况都能处理,虽然往往牺牲效果(因为很多时候是考虑最差情况,乃至最优最差情况,当然如何formulate也是问题);有精英项目型的,属于温室,要创造很好的条件才能成功;有做实验发论文型的,属于温室中的温室了,简直就是没有问题创造问题也要解决,不值得去说了。
简而言之,可能又失偏颇:做产品的,最差情况要能接受;做精英项目的,一般情况要能接受;做实验发论文的,最好情况,要能接受,至少针对某个问题来说。。。
但现在多见的却是,为了发论文,到处找例子证明比别人好,就像拿着自己的斧子,看见螺丝也想锯一下;也像射箭,先射了之后,再去画耙子,当然百发百中,当然比别人效果好。
深度学习适用的范围是比较广的,但是你要发论文证明自己的算法好,必须要跟一些大家公认的bench mark去比,而且这样的数据也都是现成的比较好收集,所以很多研究会最先发生在语音识别和图像处理上。试想你搞出来一个通过屁股识别人的,以前没有类似的bench mark,即便识别率100%,谁知道比其他方法有没有进步呢?
深度学习已经在语音识别、图像处理等方面取得了巨大成功。从2013、2014年开始,也在自然语言处理领域出现深度学习的应用浪潮,例如今年ACL上有人(应该是BBN公司?)利用深度学习极大地提升了统计机器翻译的性能,颇值得期待。
关于深度学习的挑战与方向,其实可以关注深度学习重要学者们的相关综述文章和专著,例如Yoshua Bengio曾经写过的Learning Deep Architectures for AI (2009年)、Practical Recommendations for Gradient-Based Training of Deep Architectures(2012年)、Representation Learning: A Review and New Perspectives (2013年)。
限于自己的研究方向和兴趣,我比较关注的一个方向如下,希望与大家交流。人们一般认为深度学习在语音识别和图像处理方面能够取得长足进度,是因为这两个领域的相关特征信息都是相对低层次的,可以借助深度学习的强大学习能力学习其中的复杂信息;而到了自然语言处理领域,人们利用深度学习做过很多尝试,发现很难取得像语音识别和图像处理那么大的突破,原因在于自然语言的相关特征信息都是相对高层次的(如自然语言的基本单位——词汇——本身就有丰富的语义内涵,与图像中的“线条”、“纹理”等特征相比尤其如此),在深度学习之前就由语言专家编制了很多精致而复杂的知识库,如WordNet等,这些知识已经将相关处理性能推到了较高层次。因此,当深度学习进入自然语言时,如果还是像语音识别、图像处理那样从零知识开始做特征学习,相当于将丰富的语言知识弃之不用而另起炉灶,是不符合自然语言处理特点的。所以,深度学习的一个可能重要的发展方向是,如何在深度学习框架中高效地融合人们已经构建出来的丰富先验知识(包括语言知识、世界知识)。
需要注意的是,与LDA(latent Dirichlet allocation)等之前流行的机器学习算法不同,深度学习不是某个具体算法,而是采用”深度“学习思想的一系列算法的统称,在机器学习领域中(如ICML、NIPS),貌似很少有论文会以deep learning命名,而是具体算法的名称,如autoencoder,等等。因此,建议首先阅读一些tutorial,了解深度学习中的主要算法和人物,然后再去了解具体算法。
1. 无监督学习。无监督学习在深度学习刚火的那几年有很重要的作用,比如用无监督方式训练深度信念网络还有稀疏自编码器等,使用无监督学习主要是为了预训练,以得到一个较好的初始值,随后再使用有监督训练进行微调。但是随着计算能力的发展,人们发现只要在数据集足够大的情况下使用纯有监督学习也能得到较好性能,所以近几年无监督学习发展不是很大,Hinton他们希望在未来无监督学习能有更大发展,因为人类和动物的学习在很大程度上都是无监督的:我们通过观察这个世界来学习,而不是有个老师在教我们这个世界的原理。
2. 深度强化学习。深度强化学习的主要思想简而言之就是将深度学习与强化学习相结合,是一种从感知到动作的端到端学习。简单的说,就是和人类一样,输入感知信息比如视觉,然后通过深度神经网络,直接输出动作,中间没有人工特征的工作。深度增强学习具备使机器人实现真正完全自主的学习一种甚至多种技能的潜力。深度强化学习最突出的代表就是DeepMind公司了,该公司在NIPS 2013上发表的Playing Atari with Deep Reinforcement Learning一文,在该文中第一次提出深度强化学习这个名称,之后在Nature上发表了改进版的文章Human-level control through deep reinforcement learning,引起了广泛的关注,深度强化学习从此成为深度学习领域的前沿研究方向。最近的李世石大战阿法狗中,阿法狗背后的技术也是深度强化学习,DeepMind将阿法狗背后用到的技术发表在了2016年的Nature上Mastering the game of Go with deep neural networks and tree search。
3. 自然语言理解。自然语言理解也是深度学习在未来几年能大有作为的领域。使用深度学习技术的各种应用比如神经机器翻译,问答系统,文摘生成等都取得了不错的效果,效果的提升主要归功于注意力机制和循环神经网络相结合的强大能力。相信未来几年内还会有大量相关工作出现。
NLP:
1.机器翻译会成为热点。
2.各种xxx2vec被玩坏了。
3.各种架构杂交,如CNN, 两种RNN,LSTM,ResNet,attention
CV:
图像分类被玩坏了,检测也快了,可能下面这两个方向会出很多论文。
1.semisupervised leanring
2.视频上的语义理解
强化学习:
alphago带了一波节奏,可能还会火一阵子。
语音我不懂。
unsupervised leanring和inference是深度学习大牛hinton和lecun等想挖的大坑,感觉inference没戏,unsupervised leanring也不好做,不知道谁会把大招憋出来。从现在的情况看,没什么突破性进展。
谷歌的张量处理器,名字来源于程序名。在7年前,就启动了这一研究。过去一年,谷歌已经在其数据中心的服务器内部署了“数千颗”TensorFlow处理器(TPU)。
Google’s Tensor Processing Unit
谷歌使用自己公司的处理器来提升人工智能软件的性能,可能会对英特尔、英伟达等传统芯片供应商的业务构成威胁。但是外部人士预测不会替代GPU和CPU。
谷歌新CEO“劈柴”说,阿法狗使用了这种处理器,最终打败了李世石。
TPUs have been a closely guarded secret of Google, but Pichai said the chips powered the AlphaGo computer that beat Lee Sedol,
谷歌在一年多以前就开始应用这种处理器了,它有更高效能(每瓦计算能力),大致上,相对于现在的处理器(个人猜测是GPU,对于DSP或ASIC,不会有如此大差距)有7年的领先优势。
“We’ve been running TPUs inside our data centers for more than a year, and have found them to deliver an order of magnitude better-optimized performance per watt for machine learning. This is roughly equivalent to fast-forwarding technology about seven years into the future (three generations of Moore’s Law),” the blog said. “TPU is tailored to machine learning applications, allowing the chip to be more tolerant of reduced computational precision, which means it requires fewer transistors per operation. Because of this, we can squeeze more operations per second into the silicon, use more sophisticated and powerful machine learning models, and apply these models more quickly, so users get more intelligent results more rapidly.”
信息来源
Google’s Tensor Processing Unit could advance Moore’s Law 7 years into the future
IBM SyNAPSE 神经网络芯片应该比较接近于商业。
@李云逸 曾提出的问题 为什么人工智能的研究都是基于算法,而不是基于“硬件”?
现实的需求加上芯片的架构一直在进化,现今确实有这样的趋势了。有了云端智能和互联网还是需要离线版的人工智能。
1943年,有人预言:“我想,5台主机足以满足整个世界市场。”
1977年,有人预言:“人们没有理由想要在家里拥有一台电脑。”
了芯片厂商在DL芯片领域的概况和最新进展,读后收益匪浅。作为一个DL芯片的潜在用户,我感觉ADAS是其可能实现突破的一个重要方向。从应用上看,ADAS有巨大的市场和行业需求(辅助驾驶),资金充沛,可以很快产生效益。且ADAS应用的需求相对明确,集中在目标的检测、识别、跟踪、预测。另外车载应用对芯片功耗和体积的要求还是要低于一般的移动设备。
经过一段时间的学习,我们团队已经开始使用caffe开发目标分类器,虽然效果还不令人满意,但是潜力很大。
从我个人的应用角度看,movidus提供的导入caffe/tensorflow数据的方式肯定是最方便易用的。或者提供一些DNN计算的固件,也能解决很大的问题。
继续关注几个指标,计算能力,功耗。
1,寒武纪这种科研所出来的东西,产业化道路根本不明确。
2,比特大陆核心是个硬件团队,没有软件系统的东西,道路还早呢。
3,地平线这种公司,还没证明自己。
三者来说,目前都算不上有希望。
Nvdia应该是最成熟的。毕竟目前主流DL目前都是GPU啊。
Movidius 行业时间最早,可能经验多些。
这个行业目前还太早,Intel 的成本结构注定了其无法竞争。
目前最大的问题还是应用吧。比如如果DL不仅是能分辨猫狗,而是直接能够分析
得出视频中人的身份,就是很强大的安防市场了,登时就会爆发。
目前大家也在等着医学领域的爆发,如果google 某天说其疾病诊断率已经超越最佳人类,
这个市场就更加大了。
前不久听过Sergey Levine(这个项目的第一作者)来CMU RI给的Job Talk, 简单说思路是这样的:(1)在Trajectory optimization(比如LQG)和supervised learning(比如neural network(relatively deep))之间迭代。相当于最后训练出的neural network是一种trajectory interpolation,可以应付的初始条件和鲁棒性更强一些。但其实Chris Atkeson早年已经提出过类似trajectory-based method。(2)提出了一些针对manipulation task的cost function。
值得指出的一点是讲reinforcement learning用在robotics中一个关键问题是数据获取代价很大(因为运行机器人耗时,难以控制),所以和deepmind在atari上跑是不一样的(从simulator里头获取数据),所以作者很大程度上是在提出一种sample-efficient的算法。
其实还有大量hack/trick没有在paper里头讲清楚,做出来的demo挺炫酷的。至于你想拿这样的框架在你的机器人很快跑起来,我觉得可能不太现实,离human-level manipulation skill还差之甚远。
总体确实是很不错的work!
文献一 主要讲的是用迭代的方式用Trajectory Optimization(TO)的结果 作为数据集训练一个Policy, 也就是基于Trajectory Optimization结果的Policy优化。 作者说的原因是,直接在Policy空间优化很难让算法收敛,但是如果supervised learning和TO迭代反而会效果更好。
能提出这个想法,主要原因是作者是Guided Policy Search的发明人。传统Reinforcement Learning界的人都主要是想用单一的基于Reward-based方法来学习一件事情。但是机器人的Degrees of Freedom太大,成为了机器人学习领域的One of Four Curses。于是很多人就开始寻找方法把Policy集中到一个子空间,在加上Randomness进行优化。
个人觉得这个工作可圈可点,但是主要还是作者之前想法的延续。 传统方法比如Bayesian Optimization , Policy Gradient With Parameter Exploration ,甚至是基于进化算法的 都可以在一定程度上解决自由度空间过大的问题。
具体讲来就是有一个CNN加上多层神经网络的控制器(Policy CNN)
前者是计算机视觉的一个重要的神经网络模型。
后者是通过调整每个参数的Mean和Variance来优化的多层神经网络
每个weight符合高斯分布
要在这样一个线性或者非线性空间找到参数使得整个网络输出可以控制机器人完成一个动作, 是一个基于RL的学习任务。一般来说学习算法是不敢和控制算法比速度和精确度的。因为控制算法在较短时间类就可以找到一个有效解决方案,只是对特定任务的鲁棒性不是很好。
于是作者找到了 Linear-quadratic-Gaussian control(LQG),一个控制算法。首先用这个方法找出几个解,然后指导多层神经网络的控制器进行训练。
文献二 主要讲的是如何把视觉信号集成到模型当中。估计是二作做的,其实很好玩。她先训练了一个pose regression CNN 然后 吧这个参数放进Policy CNN当中。然后再整个网络一起训练。CNN里面没有Max Pooling Layer。我的感觉是不知道为什么用这种方法找物体的具体位置,如果是为了速度的话可以理解。要不然点分类会更加精确一些。
总之,作者一方面单独训练改变后的CNN,另一方面单独训练多层神经网络,然后粘合,再训练训练就成了。综合来看文献二更牛逼一些,文献一基于环境优化的学习算法相似问题很多,解决方法很多。但是把视觉直接当做机器人学习系统的输入信号的,而且还是一个bit一个bit输入, end to end的,然后直接控制电机信号输出的,太少见了。 这个也是Sensor Fusion的进步。
引自文献二
http://rll.berkeley.edu/icra2015gps/robotgps.pdf
http://arxiv.org/pdf/1504.00702v1.pdf
https://www.icub.org/images/b/bc/VVV13BayesianGaitOptimization.pdf
http://www6.in.tum.de/Main/Publications/Sehnke2008a.pdf
http://www.ics.uci.edu/~rickl/courses/cs-271/lit/2013-TOG-MuscleBasedBipeds.pdf
学习的定义: 是透过教授或体验而获得知识、技术、态度或价值的过程,从而导致可量度的稳定的行为变化,更準确一点来说是建立新的精神结构或审视过去的精神结构。学习必须倚赖经验才可以有长远成效。(http://zh.wikipedia.org/wiki/%E5%AD%A6%E4%B9%A0)
鸭子类型法则: 当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。
计算机科学有个方向叫机器学习:它主要研究如何在经验学习中改善具体算法的性能。(http://zh.wikipedia.org/wiki/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0)
现代机器学习领域至少是基于之前提到的两个共识之上的,而这个工作用了现在机器学习分支-强化学习和监督学习方向几乎是最好的算法。如果这篇工作不能被叫做机器人学习的话,那就至少部分否认了现代机器学习的在这两个方向上的努力。因此我认为,伯克利的这个机器人一定是具有学习的能力的。
另外现代机器学习是一门严肃学科。严格来讲,各大网站上的推荐算法,图片搜索都是机器学习方向的分支。而且有些方向(声称)比人类做的好了,比如人脸识别,图像分类。加上量子电脑的发展速度加快,比人类更会学习的机器人到来是可以预料的事情,这一点其实并不需要惊讶。
如果了解强化学习在Motor Skill控制的应用和监督学习在计算机视觉上的应用的话,这篇文章的主要贡献点就是拼命凑神经网络的参数,让整个系统能通过视觉信号直接控制电机。
通过视觉信号直接控制电机最难的点在于他处理视觉信号的神经网络是一个叫CNN的网络。里面的参数有大约92000个,如何通过尝试-错误的方式优化这92000参数是个非常麻烦的事情。原因有几个。
1. 机器人必须识别物体,且分辨物体的位置。
2. 就算是最好的强化学习的方法能训练的参数也有限(大约2000个左右)。
3. 如何把人给的示范动作告知机器人且让机器人学习。
4. 机器人如何实现在不同位置的初始化都可以完成最后的结果。
那么这篇文章具体的解决方案(具体贡献)是
1 -> 识别物体位置用的算法是 CNN 的相似结构(CNN和它的变种是最经典的物体分类算法,很多新闻都有写)
2 -> 先做示范引领机器人
3 -> Guided Policy Search, 作者自己发明的一个强化学习算法
4 -> End to End 训练
BRETT 是一个很赞的工作,但BRETT并不是学习新的技能,而是学习自己的硬件设置。对应到现实生活中,有点像是每辆车的长宽都不一样,松下油门移动的距离也不一样,怎么样让人适应这个车的配置。但是学习开车是在适应配置之前的工作。
BRETT 所实现的功能,有大量的机器人都能实现,甚至实现地更好。论文里面也提到,他们所使用的训练集,就是用一个 simple trajectory-centric algorithms 生成的。他们通过修改机械手臂的初始状态,根据之前的简单算法,计算出正确的运动轨迹,记录下运动过程中的图片纪录和其他相关信息,之后用这个数据去作为标注数据去训练。
这篇论文的核心卖点是,在不知道硬件结构的情况下,怎么去控制机器人?现有的机器人系统随着自由度,关节的增加,编程难度也是几何倍数增加。如何操作一个和人手臂一样灵活的机械臂,肩部的运动是会影响到手腕的位置的。这篇论文,把这些参数丢进了deep learning这个黑盒子里,然后自动把硬件操作和任务绑定在一起。
思路上和deepmind的atari小游戏没什么区别,但二维变三维并不简单,真实世界里的数据标注要晦涩很多。机器人有某种“学习”能力,但是这个学习不是类似人类的主动学习或者是智慧行为,而是属于机器学习里面通过不断得输入样本和标签让机器人学到一个数学模型,即一个x->y的函数映射。
首先要定义你问题里面的“学习”两个字的含义了,猜测楼主的意思是类似人类的主动学习。首先使用深度学习这个关键词就可以知道这肯定不是类似人类的主动学习。深度学习也只是机器学习的一种算法,无非是根据输入样本(x,y)来学到一个x->y的映射,并没有所谓的“智能”在里面。这个产品的亮点是它能够不断的试错来学习,那么问题就集中在在没有外力的帮助下,它是如何得知一条样本的label(标签,也就是y值)的,也就是如何定义一次尝试是对的还是错的?这个就是这个新机器人的核心。从新闻里只用「Trial and Error」来描述了,所以我们并不知道是怎么做到的。但是我大胆猜测还是通过程序完成的这一标注过程(labeling)。
一个最基础的学习闭环是:
1.从输入信号中区分环境信号和焦点信号;
2.将不同信号,主要是焦点信号映射到变量集中;
3.尝试对变量建立关系,制定试错计划;
4.执行试错计划,验证结果;
5.根据验证结果对先前的试错过程进行激励或惩罚,并按照行动路径存储经验;
6.根据可行路径完成任务。
先说结论,可以断定这台机器人没有“学习”能力,这里说的“学习”是指创造知识的能力,就是说今天学会了A,明天给我B我也知道怎么处理,而处理B的能力不是学来的,是通过对A的分析与推理得出的。通俗点说,这里定义的“学习”指的是“举一反三”,而不是“熟能生巧”,不知道这么说是否严谨,大概就这么个意思,题主你感受下……
人工智能要真有了学习能力,那它本身就是可以脱离算法存在的(因为它能给自己写算法),它的存在形式应该是一条一条的规则。那规则与算法有啥区别咧?嗯,类似于C++/Java等与C/汇编之间的区别;类似于中医与西医之间的区别(别喷我);类似于“吃饭”和“吃米饭”之间的区别……脑洞不够了,先这样吧。这种能学习的人工智能也就是所谓的强人工智能,算是人工智能的终极形式吧,科幻片里的那些整天勾心斗角不干正事的机器人就属于这种。悄悄说一句,新出的那个《机械姬(Ex.Machina)》算是比较高智商的关于机器人的科幻电影了,不过有些镜头实在是,咳咳……
再说说这个叫啥啥BRETT的机器人吧,就像题主描述里说的,它用的是基于神经网络的深度学习算法,至于这个基于/神经网络的/深度/学习算法是个什么鬼,题主有兴趣可以搜搜文献,专业解释这里就不贴了。顺便吐个槽,真心感觉在知乎最好不要秀逼格,毕竟隔行如隔山,大家交流知识为的是开心,又不是搞科研,整那么些苦瓜脸的符号干啥。。。科研大神们请出门左转谷歌学术不谢~~
吐槽完毕,接着上面说,“学习算法”就像它字面的意思,就是教人工智能怎么学习的,曾经简略地写了一点,有兴趣可以看一下。
如何让机器人具有学习能力? – 晴天的回答
基于神经网络,就是说用的算法模型是个神经网络,没啥新奇的,关键点就在“深度”上,那啥叫“深度学习”咧,这个稍微有点专业了,下面一段需要一定的背景知识,要题主没兴趣,请跳至下一段。
基于神经网络的学习算法实际上是个通过样本训练对网络节点权重值进行调整的过程,只要节点足够多,理论上就能模拟任意非线性。但权重值怎么调整这本身也要算法啊,现在一般用最速下降法,快成默认的了,但实际上它的结果并不见得是最优的,学过自控的人应该知道PID的D调的太大有什么后果,所以有人提出了“深度学习”的概念,就是在正式对网络训练之前先进行一次无监督的预训练,为后续的正式训练找到相对较好的初始值,这样不管用什么学习算法,都能保证权值是在一个较小范围内波动,不至于对结果有太坏的影响。
通俗回答就是,小明(神经网络)要去买书,但他只知道上个月不同种类书的价格(学习样本),这时候老师对小明说:“你给我……“,啊不是,导演换剧本!!老师对班里同学说:”我昨天刚给你们订了五年高考三年模拟,明天每人带××元来,班长负责收起来……“,这就相当于对小明提前进行了一次训练,让小明对书的价格这件事有了一个初步的了解,也就是所谓的”深度学习“。。。我发现我真是有段子手的潜质啊,都快点给我点赞!!
好了,说到这其实结果就比较明显了,如果那个机器人真就只采用了这种算法,那它离有”学习“能力还早着呢,最多也就优化做的比较好,知识库丰富一点罢了。不过话又说回来,我个人到觉得没必要过度追求所谓的机器智能,毕竟学习与思考才是人类立足于自然界的最大倚仗,要真到了连这些事都想让机器来帮我们干的时候,人类存在的价值也就没多少了。现阶段机器智能的发展水平也远没有一般人想象的那么夸张,据说谷歌最新的研究成果能让人工智能具有相当于人类5~6岁儿童的认知水平,注意不是学习水平,只是根据拥有的知识对世界进行一个简单的认识,这已经算黑科技了。所以么,机器人想要逆袭,还早着呢……
而且,题主你要知道,要是真有谁解决了”机器学习“的本质问题,那他的知名度绝对不下于爱因斯坦,肯定不会像现在这样,弄个新闻链接都打不开……
他的初始条件是,
(1) an initial ontology defining hundreds of categories (e.g., person, sportsTeam, fruit,emotion) and relations (e.g., playsOnTeam(athlete,sportsTeam), playsInstrument(musician,instrument)) that NELL is expected to read about, and
(2) 10 to 15 seed examples of each category and relation
简单说一下就是
几百种归类的学习范畴和定义了一下简单的关系
对于各种分类提供了很少的几个例子
今天点开看的时候,随机刷新出来的几个结果是,
在某种程度上来说,这个项目和这里提到的BRETT机器人很类似。对比来看,我也相信这个机器人在不远的几年内的未来,可以独立完成一些小的任务。似乎这些系统已经完全具有了学习的能力?!!
但是,等等!!这个东西和20年前就可以做的不错的supervised learning有很大区别么?给我一些数据,然后fit数据之后得到结论。根据得到的结论修正一下数据,那不也就是reinforcement learning么?数据量足够大,不断地修正模型,总有一天我的模型会越来越好,让人有了一种强人工智能出现了的错觉。而就我不多的经历来看,神经网络的各种实现过程基本都还是依靠经验。
总之,确实是可以认为是在学习,但也就只是已有的机器学习里面一点点比较有意思的应用罢了。
编辑于 2015-05-26 添加评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利
李晓朋 天外飞仙的霍比特人黑暗料理狂热者
学习应该基于记忆的基础之上吧,我们首先应该进行记忆 然后在利用记忆进行决策。
目前人类对于神经系统的各种研究到了一个极致了,每时每刻都有新的成果出来。但是目前人们对于脑科学的研究缺乏一个大框架,如果有一个相应的框架的话我们就能把所有的研究成果组合在一起,从而实现对于人类大脑的理解。
从感觉、认知、思维的角度对大脑的工作流程进行分析,理解大脑的运作形式,从而提出人工智能的新算法。
人类大脑的工作流程:
人工智能新算法的主要的核心思想就是:进行固定事物的模型特征提取,从而形成固定的人工神经网络认知模型。通过事物模型特征进行对取得的时序相关的数据流进行编码从而生成专属匹配于人工智能的记忆模式。
在记忆模式的基础上进行思维活动的展开和语言的学习,从而让思维和语言都具有了相应的意义;就是通过概念定义的形式让相应的语言和思维具有相应的意义。从而进行强人工智能的实现。“有意义”就是我们能够理解语言相应符号组合本身的含义,比如我说桃子,那么在做的每一位都能够明白桃子的含义,如果你对你一个深度学习的人工神经网络说“桃子”,它能理解桃子吗,很明显不同,现阶段人工智能缺乏的就是这种理解能力和基于这种理解能力的主动思维能力。目前我的工作已经完成了对于大脑工作框架和工作流程的分析与结构。进行人工智能新算法的提出,与实验阶段。希望通过新算法的提出,极大的减少当前阶段人工神经网络构建和深度学习等等方面所需眼的计算量。
对于现阶段的人工神经网络的构建来说,主要分为两个方面:即学习训练阶段和应用阶段。训练阶段通过无监督的学习算法对于深度神经网络进行逐层和综合调优;而应用阶段则是通过训练好的神经网络对于输入的数据进行分辨,得到结果。
但是人类的神经网络并非是如此工作的,通过深度学习得到的深度神经网络本身,通过层级神经元之间的链接权值和偏置以及相应的链接方式来表示知识本身,即是链接主义的方式。而大脑则是通过神经认知模型的方式来实现认知的,一旦模型形成那么我们便可以应用模型来认知和思考,即使我们失去了相应的感官,但是我们的神经认知模型也不会失去,他依然能够进行工作,可以在百度上搜索新闻“能让盲人「看见」周围物体的舌部刺激器”,这难道不是让人觉着很神奇吗。但是现在的人工神经网络做不到这一点。
因此我个人觉得应该对现阶段的神经算法进行分解,即把需要大运算量的学习训练阶段和需要极小计算量的应用阶段分解开来。我们可以通过训练得到相应的事物模型特征。这种事物模型特征应该是通用的;而后我们在应用这种事物模型特征,对于获得的数据进行辨析。这样我们就可以在很小的设备上进行人工智能的应用,比如手机等等等等。
1. 深度学习与AI。本质上来讲,人工智能相比深度学习是更宽泛的概念。人工智能现阶段分为弱人工智能和强人工智能,实际上当下科技能实现的所谓“人工智能”都是弱AI,奥创那种才是强AI(甚至是boss级的)。而深度学习,是AI中的一种技术或思想,曾被MIT技术评论列为2013年十大突破性技术(Deep Learning居首)。或者换句话说,深度学习这种技术(我更喜欢称其为一种思想,即end-to-end)说不定就是实现未来强AI的突破口。
2. 深度学习与ML。DL与ML两者其实有着某种微妙的关系。在DL还没有火起来的时候,它是以ML中的神经网略学习算法存在的,随着计算资源和big data的兴起,神经网络摇身一变成了如今的DL。学界对DL一般有两种看法,一种是将其视作feature extractor,仅仅用起提取powerful feature;而另一种则希望将其发展成一个新的学习分支,也就是我上面说的end-to-end的“深度学习的思想”。
1.让深度学习自动调超参。最近看到有人在一个AI群里推广自己的一篇论文《Deep Q-Networks for Accelerating the Training of Deep Neural Networks》https://arxiv.org/abs/1606.01467,大致是用强化学习的方法训练一个控制器来自动控制学习率以及在一个batch中各个类的样本占比。虽然它那篇论文问题很大,训练出来的控制器极其不通用,只能用在它原本的任务上,但是感觉很容易解决掉,这个另说。想象一下,如果能够训练出一个通用的控制器,对于各类任务都能够自动调整超参(或者只在某个子领域比如图像分类做到通用也好),那我们就再也不用自称调参狗了,同时也可以解放出更多的时间用于设计模型、验证架构,想必深度学习的发展步伐会得到极大加速。
2.自动学习网络架构。其实说起来这个问题也可以归入自动调超参,但是感觉应该还是有很大的不同。说起来无非就是两个方面,一是加法二是减法。加法方面可以参考《Net2Net: Accelerating Learning via Knowledge Transfer》https://arxiv.org/abs/1511.05641,这篇是让CNN自动根据需要自动拓展架构,包括横向的增加filter和纵向的增加layer。减法方面可以参考各类Network Compression(网络压缩)的论文中的所谓Network Pruning(网络剪枝),比如《Deep Compression – Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding》http://arxiv.org/abs/1510.00149,虽然这些论文出发点不在于自动学习网络架构而在于压缩网络规模,而且它们往往是在训练收敛之后才对网络进行裁剪而非边训练边裁剪,但是感觉只需要再跨一步就可以了。我个人觉得,自动学习网络架构需要解决的最根本问题就是“应该在什么时机进行架构变动”以及“应该怎么变”,第二个问题感觉上述论文算是回答得可以了,但是第一个问题似乎还有很多可以探索的地方。对于第一个问题,似乎强化学习就很适合解决,因为显然可以把它看成一个控制问题。
3.迁移学习。众所周知,深度学习的直接训练依赖大量数据,而transfer和finetune能够有效利用数据量大的外部任务训练出来特征来迁移到数据量小的目标任务上,使得目标任务对于数据量的要求大大减小。现在的问题在于,迁移学习的思想现在大家其实都在用,很多论文中都可以看到finetune的做法,但是对于两个任务之间需要“多像”才能够迁移这么一个问题还没有一个很好的回答。即使我们不奢求能够给出一个严格的数学理论,至少,如果有人能够做一个非常系统的对比实验,总结出一些规律,使得我们有信心说在如何如何这样一个边界内的任务都是基本上可以transfer的,那将会是一个很大的进步。这个问题也可以这么看,如今我们应该有信心说两个图像分类任务可以transfer,但是这个边界太过狭窄,我个人期待的就是能够有一套理论或者方法论使得这个边界大大拓展,然后在这个边界内我们可以像对两个图像分类任务一样自信满满地用迁移学习。
4.无监督/半监督学习。像LeCun等大佬其实一直在鼓吹这方面,但似乎还没有搞出像当年CNN(AlexNet)、最近强化学习(阿法狗)这样级别的大新闻来。我理解在这个问题上的努力方向应该是确定“何种representation最有用”。具体来说,就是找到一个指标,然后用深度网络优化这个指标,使得满足这个指标的data representation能够具有非常好的特性。再具体一些,下面举三个实际例子:
autoencoder以重构损失作为指标来学习一个representation。
之前听一个讲座,演讲人介绍他的论文《Why Deep Learning Works: A Manifold Disentanglement Perspective》IEEE Xplore Abstract,其中定义了三个指标来描述深度网络每一层中data representation的“蜷曲程度”,并发现,越高层的数据蜷曲度越低,换言之,越平展。那么无监督学习是否能够直接以这个蜷曲度作为损失函数来学习一个representation呢?
这篇论文《Context Encoders: Feature Learning by Inpainting》提出通过预测周边上下文像素来无监督学习视觉特征,感觉很像word2vec从一维变成二维。
除了上述的重构损失、蜷曲度、预测上下文精度,还有没有别的指标学习出来的representation更好呢?个人认为这些问题就是推动无监督/半监督学习进展的关键所在。
5.基于外部存储(external memory)的模型。如果说RNN、LSTM这样的模型属于internal memory / long-term memory的话,那么以神经图灵机(Neural Turing Machine,http://arxiv.org/abs/1410.5401)、记忆网络(Memory Network,http://arxiv.org/abs/1410.3916)为代表的模型就应该称为external memory / really long-term memory了。不过这两个模型刚出来的时候还太过naive,只能做一些很无聊的task,比如序列复制和排序以及非常简单的QA,但是现在已经开始看到它们被用到更加实际的问题上面,例如One-shot Learning:《One-shot Learning with Memory-Augmented Neural Networks》,http://arxiv.org/abs/1605.06065。往大了说,如果未来要实现强AI,这种外部存储的机制肯定是必不可少的。现在的问题在于,神经图灵机和记忆网络用的外部存储虽然比LSTM那样简单的一个hidden state向量更进一步,但也其实就是很简单的一片矩阵,没有任何结构和层次可言,换言之,就是还不够复杂。所以我猜想接下来可能external memory会和知识图谱(Knowledge Graph)结合起来或至少是向知识图谱类似的做法靠拢,因为知识图谱更加结构化。
滴滴研究院院长也有类似的思考: 微软、腾讯、头条、清北专家解析机器学习的局限与明天 。
人的思考和见识总是离不开个人阅历的,所以还是循例介绍一下我的个人经历和背景,曾经游走在计算机视觉技术产品化的一线技术开发,现在逐步回到学术界做人工智能的学术研究,所以对技术产品以及研究都有所覆盖,因此考虑得稍微会全面一点。
有一点我觉得必须要想清楚的是,到底机器学习这个领域的研究目的是什么?个人的观点是,无论研究哪个领域,首先要做的是清楚了解好这个领域研究的目的和发展的目标。机器学习这个领域的研究目的和发展的目标其实都离不开解决实际问题,脱离不了真实是数据,所以,机器学习这个领域注定不可能是一个自然学科,他本质就是一个业务导向的工程学科,所以,他未来的发展注定是要在应用的发展,例如计算机视觉的应用,数据挖掘价值/推荐,自然语言的应用以及将这些应用应用到各个领域。
所以,只要是把机器学习考虑到如何做到应用上的都是他的下一步发展。
1. 通用化。我一直认为深度学习还是有点过热了,深度学习只是机器学习的一个方法,但是他自身有很多局限,通用化和数据量的要求上,使得在应用层面受到很大的影响,而我前面的观点提到,下一步的发展一定不能脱离“应用”二字。
2. 众包。鉴于通用化非常难实现,强人工智能也一直是个未知数,那么当下能尽快的让机器学习走向应用的方式之一就是众包,每人做一点,每个研究者都可以往一个局限性大的环境去研发,最终聚合到一个平台,这个也就是极视角推出的PaaS所做的事情。
3. 自学习。深度学习对数据的依赖导致了他的局限性,其实在说宽泛一点这个就是有监督学习在实际应用中的局限,还是不能脱离“应用”二字,所以,要尽可能拜托这个局限性的方法就是建立有限的自学习方式,例如最近提出的GCGAN(生成式对抗模型),SAE(堆栈自编码)以及各种做无监督的新方法等等。
其实自从Deep Learing 兴起后就已经横扫computer vision 这个领域(从low level 的去噪去模糊超分辨 到 high level 的 recognition)。各大库的正确率已经刷得巨高无比,虽然不停的有新论文出来但是基本上没有逃离Deep Learning (各种NN)的思路。此时不得不羡慕Hinton, Bengio 占了个大坑让大家拼命引用他们的论文然后默默的跑去搞NLP,Unsupervised Learning。留下一众苦逼的CV PhD 默默的调参各种改各种拼。
个人觉得未来应该有几个不错的方向
1.深度学习的数学理论,从而得到更理性而不是那种玄乎的解释性(包括如何定义那些玄乎的提取到的特征等等)
2.机器的推理能力(现在的机器学习基本上都是data-driven类型)
3.将现在机器学习/计算机视觉的技术移植到其他生物化学物理,特别是人文学科的领域形成交叉学科。
4.研究数据处理方向(如何利用小样本的数据,质量参差不齐的数据,如何让模型不停的适应新出现的数据)
总的而言,如果还想用改改CNN的思路跟微软研究院这些机器多工程能力强的研究机构拼正确率基本不可能的了。。。
这是我目前在知乎上见过的最好的问题。
1.问题描述特别清楚,思路清晰。
2.已经有自己的想法,问题戳中行业关键点。
先占个坑,初步分析一下,后续会持续更新,跟业内朋友一起讨论。
首先我是比较认可周老师的看法的,深度学习很多人做的工作就是调参,虽然调参也是有技术含量的,但这很难解决一个问题:如何做到规模化。换一种场景就得调参,而客户又没有这方面的能力,也就只能做定制化项目。边际成本太高,关于这一点,可以看一下我的另一个问答:
计算机视觉在国内已经研究几十年了,但把计算机视觉成功带入应用的大公司几乎没有。相比欧美的计算机视觉,中国计算机视觉的前途在哪?机器视觉工程师又何去何从? –
其次,关于大公司牢牢抓住数据,我认为还是有机会的,深度学习的准确度跟特定领域的训练集有关,大公司确实是有数据优势,但别忘了,垂直领域他们未必数据占优,我在另一个问答里也分析过:
第三,关于突破的方向问题,我其实也在苦苦思索,总体感觉还是要从业务上找突破口,我在以前的问答中也分析过。找到合适的应用场景,解决实际问题,这话说起来容易,做起来难啊。关于这一点,关注的人多了以后,可以继续讨论。
想起了前一段时间,我在某个人工智能群里,发感慨说:国内做CV的人真苦,没想到另一个群友,幽幽的说到:国外做CV的也很苦:)
人工智能是一个婴儿的大脑,而深度学习就是让这个婴儿的大脑又能力看世界、听世界、感受世界。直观的说,深度学习只是服务于人工智能一个工具(也许若干年后,一种全新的工具可以代替深度学习实现人工智能),把这个工具用在语音识别领域,就能让机器更会听;把他用在了计算机视觉领域,就能让机器更会看。
深度学习的本质就是各种神经网络,从最早最简单的感知机,再到多层神经网络,再到现在很火的CNN、RNN,其目的都是构建一个合适的神经网络结构,让机器有能力“自己思考”——我们也称之为“智能”。
关于机器学习,它是比深度学习更为广泛的概念,发展的也比较早。在人工智能届有一种说法:认为机器学习是人工智能领域中最能够体现智能的一个分支。从历史上看,机器学习似乎也是人工智能中发展最快的分支之一。机器学习发展早期,限于计算机计算能力、样本量等因素,很多算法无法实现。而近些年来,计算机的计算能力和存储能力都有了很大的提高,数据发掘引领了大数据时代的到来,使得原来复杂度很高的算法能够实现,得到的结果也更为精细。理论上,只要计算机计算能力足够强、样本数据量足够大,就可以不断增加神经网络的层数以及改变神经网络的结构,这就是“深度学习”,在理论和技术上,并没有太多的创新。只是深度学习代表了机器学习的新方向,同时也推动了机器学习的发展。
深度学习是个工具,人工智能是个结果
也就是说(1)人工智能不是非要用深度学习来实现,它也有其他多种多样的算法来做。
而(2)深度学习也不是只能去做人工智能的工作
只不过目前深度学习在一些领域里表现的最佳,所以就总提到它
但是:深度学习=/=人工智能
当然,还有一类包含与被包含的理解,其实两种理解都是可以成立的
如上面的图所示,具体两者是什么关系,取决于你选择什么分类法
如今其实人工智能是个很飘渺的定义,学术界目前也不是很好界定这东西的边界到底在哪里
因为其实很多机器学习的问题都可以算成人工智能
但是如今处理方式,是把大问题拆成小问题、子问题
所以才会分出更多的学科来:比如有自然语言处理(NLP)、计算机视觉(CV)。
上面的学科,是需要用到机器学习,乃至深度学习的有关知识
但是也会使用学科内部所特有的概念来解决问题。
如果你非要笼统的跟别人介绍,这些其实都规划到人工智能也未尝不可。
但是真正学术界的人自己心里很清楚,每一个问题都会有自己很大一个领域,很多的课题需要去研究,远飞一个“人工智能”就可以解释的清楚的
奔着Andrew Ng这句“深度学习是对人脑运作模式的浅显理解和粗暴modeling”(原话我不记得了)我曾认真下载了一堆cognitive和neuron science相关的网络视频课程看过几周,然后放弃了,因为这两门学科和AI都还在非常起步阶段,离交汇到一起还差十万八千里。
期间让我震撼的是,高等动物发展出的一套极其精巧而又自洽的系统,能够通过有限的sensor和input不停地学习,请注意这是一个受正面和负面的感受所驱动的循环,例如饥渴/疼痛/舒适等等等等,是这些感受驱动着一个生物不停地modeling–classification–adapting–decetion making,从baby时只知道吞咽和排泄,到和建立空间意识,到学会控制自己的四肢,到学会语言,有一种神秘的驱动力驱动我们不停地学习掌握控制身体运动和探索周围的世界。
而任何形式的AI(无论cnn/dnn/xnn)都是由人setup a purpose,由人指定一个problem,由人制定一轮一轮地训练并由人去判定好坏,那么当然要由人来调参了,如果这个AI自身不像生物一样有一套自洽的系统自我驱动,那么AI始终只是个classfier,无论维度有多高,内部有多复杂,而且越复杂需要的维护越多,调参也要求越多。
我不认为,无论如何发展,cnn/dnn这种把成千上万个classfier组合到一起的方式就能让计算机具有人一样思考的能力。
看google deepmind的访谈,他们在尝试无监督的general purpose neuron network,已经可以轻松根据看屏幕像素打赢即时战略游戏,其实很多人在往这个方向努力,但我总觉得一个真正的general purpose AI绝对不是由人给它设定purpose和problem,而是一个自洽的自我驱动的模型,它会自己演化出self awareness。
首先就是哲学思维,这就是为什么吴恩达 (Andrew Ng) 是一个怎样的人? – 互联网这个问题里,答主反复被指为民科的原因。然而,看答主的一些回答,明显是学术圈内人。为啥会扯到这个问题?因为确实绕不开哲学。人类从欧洲文艺复兴开始发展科学到现在,已经快要到头了。再往下发展,就涉及到核心的问题:什么是科学?人类思维是如何认识这个世界并发展为自然科学的?自然科学和人类思维的关系如何?(人类思维本身也是自然界的一部分,一种特异的自然现象)自然科学和人类思维的界限在哪里?就自然科学而言,疑似触碰到的边界就是薛定谔的猫,量子物理。就人类思维而言,目前人类碰到的边界就是AI(实质是另外一个自然现象,人脑,下详)。
因确实挺,说起来我自己都觉得很民科了。干脆直接给出结论:目前人类发展的自然科学都是对自然界已存在的各种自然现象的观察发现、深入认识和人工模拟(社科都是对人脑在统计意义上的浅显认识和粗暴践踏)。生火、烧柴、烧煤、蒸汽机、电气化、石化能源、太阳能、核裂变、可控核聚变(这个还没搞定),语言、文字(注意顺序,中国人牛逼在把这两个分开了,这需要最高级别的人脑处理能力,一般简称智商,哈哈)、无线电、电子计算机、量子通信(貌似中国领先),一路走来,两条腿(能量传输和信息传输),无非就是发现现象——深入认识——人工模拟。
就能量传输而言,现在已经到可控核聚变这一步了,这一步一旦解决(如果可以,不排除哪个大牛以后推出来不可能实现小型可控核聚变,因为用来约束的能量必然超过产生的能量?),基本就是实现了人间天堂,永无后顾之忧。信息传输而言,从利用人类听觉器官(通信基本靠吼)到利用视觉器官到利用电压差(大量电子的诱导运动)到利用半导体硅基材料(实质是少量电子的诱导运动,现在已经快少到单个电子,即碰到量子态的电子云?)到利用量子纠缠态,也基本到自然极限了(光速)。这一段是废话。
人类发现自然现象,到深入认识,最后人工模拟。这几百年来,大家还是总结出来,最强有力的工具,还是数学。虽然自然界并没有数学这个自然现象。数学只是人脑发明出来描述自然界的最强工具。最早还是利用人类器官的(手,十进制),后来发现要利用比较牛逼的电子的时候人家只适应两种状态(有没有),不得已就搞了个二进制出来。量子通信用的几进制?我不知道哈,不过要用电子计算机应该还是二进制。如果搞定量子计算机,那就真不知道了。
那么说了半天,问题就来了,
人类的思维如何用数学描述?再去人工模拟?这,就是AI。
这个问题基本是难到不能再难了,大家发现要想成功完成发现、认识、模拟的过程,核心还是得先观察人脑这一特异自然现象。当然还是得想办法沿着几千年来好不容易探索出来的最优路径:用数学去描述。
说实话,人类身上的器官,自己已经研究的差不多了。各种工作机制杂七杂八也就那样,深入认识这步基本已完成,就差人工模拟了。第二复杂的DNA,现在都已经可以人工修改,如果不是人类伦理挡着大家(失败了算不算杀人?),弄个超级赛亚人出来也就是分分钟的事。
唯一还没搞懂的,就是人类的思维过程,也就是人脑的工作原理。
要想了解人脑的工作原理,首先是宏观的解剖结构。像人眼那样,人眼的解剖结构(晶状体、视网膜、视神经束)和工作原理(光信号转换为神经电信号)已经基本搞定了。人眼利用晶状体在视网膜上成像的PSF是一个二维高斯分布函数的曲面投影(看,为了证明我不是民科,不得不随手抄起我还能拿得动的最强工具,来表明我还是接受过基本的科学训练),视网膜杆状细胞和锥状细胞把光信号转变为电信号通过视神经传入人脑。整个人眼成像的过程大家门儿清,就人工模拟而言,工程上现在人工眼已经有了,盲人也可以看到东西,因为一般都是前面部分出问题,视神经还是好的,只要把光信号转换为电信号给到视神经就over。
作为TensorFlow社区的contributor (41/415),我来说说我的TensorFlow学习过程。
目前TensorFlow代码已超过40w行,从代码量上来看,绝不是一个能够迅速上手的小项目。所以,想要精通TensorFlow的同学需要做好心理准备。
http://cloc.sourceforge.net v 1.64 T=45.33 s (68.5 files/s, 14956.6 lines/s)
——————————————————————————–
Language files blank comment code
——————————————————————————–
C++ 1084 33620 28397 185395
Python 988 43498 72410 160669
C/C++ Header 605 13609 23891 45446
HTML 100 1803 1572 24929
TypeScript 75 1836 4795 11681
Bourne Shell 60 1174 2147 4346
NAnt script 15 172 0 3328
CMake 28 298 495 1778
Protocol Buffers 43 555 1928 1337
Objective C++ 9 217 168 1186
Java 9 239 408 943
JSON 46 0 0 626
Go 9 93 244 544
make 3 96 112 542
Bourne Again Shell 4 52 91 310
Javascript 7 50 109 191
XML 18 97 205 149
Groovy 1 13 7 52
Objective C 1 10 13 21
CSS 1 4 11 6
——————————————————————————–
SUM: 3106 97436 137003 443479
——————————————————————————–
对于想要学习TensorFlow(以下简称TF)的人,根据目的不同,可以简单分为以下2类:
1. 研究学者,仅仅需要TF这个平台实现深度学习算法,无需了解太多底层原理
2. 好学的行业内人员(比如我⊙﹏⊙),不仅需要了解算法模型,同时还要熟悉TF平台的原理。在算子、通信、模型优化等方面进行平台的二次开发的人。
研究学者:
你们可以考虑使用Keras,python写的深度神经网络库,已经实现了绝大部分神经网络,如:RNN、GRU、LSTM,CNN,Pooling,Full-Connected,以及sigmoid、tanh、Relu、PRelu、SRelu等各种激活函数。并且采用TF/Theano作为后端计算引擎,自己本身拥有一套更高层的API,可以同时跑在TF/Theano平台上。
相对于TF来说,这个学习压力小了很多,我们公司负责算法的同事也是用Keras来写模型,然后我再用TF的API来实现分布式部署。
附:
Keras中文文档
GitHub – fchollet/keras: Deep Learning library for Python. Convnets, recurrent neural networks, and more. Runs on Theano or TensorFlow.
开发人员:
对于我们这类人来说,首先需要弄清平台的很多名称、概念、定义, @贾扬清 曾说过TF有太多的Abstraction需要学习。诚然,这加大了我们的学习难度。但是,这也说明Google是想要把这个平台做大做强的,所以才会花时间去设计这一套框架和统一的结构。特别是读了部分源码后,更有这种感触。
那么,具体要怎么开始呢?
极客学院有翻译部分TF的官方文档,对于初步了解Tensor、DAG、Operator、Variable、Device、Optimizer等是帮助的。在看完这些概念后,有一个MNIST的例子程序作为TF的入门。这个样例用一个简单的Softmax实现了手写体数字识别的神经网络,只有一层参数。同时还介绍了Session、tf.placeholder、图的计算等重要概念。
在看完这个样例后,如果理解了DAG和Session,可以继续看用卷积神经网络实现的MNIST,准确率上升到了99%,相对于单层Softmax的92%左右,已经接近目前最高的准确率了。
附:
MNIST机器学习入门
深入MNIST – TensorFlow 官方文档中文版
TF v0.8发布了分布式模型,我也研究了将近1个月,才把Seq2seq机器翻译改造成了分布式,但是现在公司不让发布出来ORZ。好消息是,我改写了社区的MNIST分布式程序,并且已经合并到master分支了。所以,如果想要继续学习分布式的话,我建议可以看一下那份代码。比较遗憾的是,极客学院目前没有翻译分布式的教程,所以大家得移步TF官网(貌似被墙了)。
由于分布式的资料较少,我这里简单梳理下概念,大家在官网会看到他们的定义:
TF采用了PS/Worker的结构来定义集群,其中
PS(parameter server):存储variable(模型参数),主要负责参数更新和发放;
Worker:存储operator,主要负责图计算和梯度计算(TF使用Optimizer实现了自动化的梯度计算);
job:由于工作类型不同,用job_name来区分ps和worker
task:对于每个worker来说,具体做什么任务(算什么图)也有可能不同,用task_index区分
device:指具体的CPU/GPU,通常PS绑定到CPU上,Worker绑定到GPU上,各取所长。
syncReplicaOptimizer:同步优化器,其本质仍然是用普通优化器进行梯度计算,但是通过Queue机制和Coordinator多线程协同实现了所有worker的梯度汇总和平均,最终将梯度传回PS进行参数更新。
以上几个概念对于分布式的理解非常重要。当然,想要完全弄懂,还得不断的看文档和源码。
源码我推荐几个python目录下非常值得看的基础类定义:
framework/Ops.py:定义了Tensor、Graph、Opreator类等
Ops/Variables.py:定义了Variable类
贴在这里:
在学习Tensorflow的过程中磕磕碰碰,总结一些个人心得记录于此,志同道合之友共勉~~
1.稳定的网络:Tensorflow毕竟出自Google,官方文档访问不是很稳定。而且一般来说,对于英文的文档,资料和疑问,Google搜索的结果要比Baidu好很多。(不是偏见,是各有所长,天气地图电影啥的,百度还是做的很好的)
2.Github:这是个开源程序的网站,Linux内核就在这个网站托管。Github的核心是Git,一种版本控制系统,已经逐渐取代SVN。这个网站托管了很多高质量的或者说世界顶尖的开源项目,比如Tensorflow。学习一下这个网站如何使用,注册个账号,学习一下Git的使用方法。这个网站有自己的tutorial和guide。
3.Linux: Tensorflow的主要运行平台就是Linux,目前在Windows上运行的方案是虚拟机,但是深度学习对计算要求还是比较高的,虚拟机效率不是太高,因此还是推荐在原生Linux中运行。新手推荐发行版是Ubuntu 或者Linux mint。这个可以自行搜索。学习Linux也有很多好处,因为很多开源软件都only linux的。
4.Python:这是一种非常流行的脚本语言,庞大的第三方库可以快速写出短小容易理解的代码,而且也是Tensorflow的推荐开发语言。教程太多了,这里给几个优秀的教程:官网教程,Learn Python the Hard Way,Python2.7教程
5.深度学习(Deep Learning,DL):虽然Tensorflow已经封装好了大部分DL的细节,但是如果不了解DL的相关核心概念,就会很难着手分析问题。首先强烈推荐这个教程,通读一遍,然后还有这个,可以快速浏览或者只看自己不太明白的地方,还有这个分块介绍的,还有几篇blog,这个和这个讲的是卷积神经网络。图像识别用的比较多的就是卷积神经网络,这两篇可以看看。
6.Tensorflow:前面都是铺垫,是为了更好地使用Tensorflow。官方的文档不错,可以从get started然后tutorial看起,有个中文的翻译版,但是更新不及时(官方已经v0.10,这个可能是v0.8或者v0.7),可能有坑,可以和英文对照着看,还有个Tensorflow的教程,也不错。有篇FIRST CONTACT WITH TENSORFLOW也不错。
7.优秀博客:Hackery, Math & Design,Mike Bostock,http://colah.github.io/,Welcome! | Irene’s Blog on WordPress.com,这几个都是我在学习中遇到的非常nice的blog,有时间读读定会有所收获。
8.经典论文及书籍:收集了一些DL的经典论文&书籍,有些杂乱,不过几乎都是经典,各取所需吧。百度云地址(密码: 4w91)。各位有更好的欢迎推荐,我会整理上传。
其中,Python,DL,Tensorflow是重点,其他都是辅助, 自己感觉够用即可,无需深入。学习中遇到困难首先向搜索引擎询问。
人工智能是一个充满憧憬的名字,曾经人们对它寄予了很大的期望。然而历史总是比预期的要残酷,事实是之前的几次人工智能热,最后都是有多大脸现多大眼。所以在学人工智能之前,千万不要抱有短期内实现人工智能的想法。要不然你会很快陷入失望。
然而梦想还是要有的,万一实现了呢?
要实现梦想,路还是要一步一步走,让我们从“机器学习”学起。
阶段一:初学乍练
起步的东西当然要实在一点好玩一点的才好,不要教科书那些不知所云的公式。作为一个python派,怎能不推荐用Python+Theano的组合先跑跑实际的模型。
首先,花一天时间看完python的基本语法。网上有一本很简洁易用的“速成宝典”《简明 Python 教程》。看一遍真的只要一天!然后大概看一下numpy,基本就和matlab差不多。接下去就是 Deep Learning Tutorials。把这个网页里的前几个模型看一遍,相应的代码下载下来跑通。后面有复杂的看不懂不要紧,先放一边。至少这个时候你有了一个手写字符识别的机器学习系统了。而且对模型、数据、算法这几个部分有了一个大体的了解。知道所谓的机器学习一般是怎么做的了。
好了现在你已经可以吹牛说你会最基本的人工智能模型了。当然吹牛归吹牛,吹完了赶紧回来看书。
阶段二:初窥门径
要做到真的会机器学习,还得对机器学习的算法有一个比较全面的了解。过完阶段二,你才可以不吹牛地说你会最基本的人工智能了。
推荐几本书跟一个在线课程:
Andrew Ng的coursera 招牌菜《machine learning》。基础不太好的同学可以看这门课的coursera版,基础好的请移步这门课的youtube版本。Andrew在斯坦福教的版本(即youtube版,CS229)比coursera上的难多了。虽然自学不会有人来批作业,可是课程的assignments,projects也不要落下哦:CS 229: Machine Learning
《Pattern Classification》。 这本书几乎把所有模型放到一起挨个讲了一遍,虽然不如每个方法对应的专著那样深入,但是讲得还是挺透彻,啃完之后面对别人提到的任何机器学习算法都可以做到心中有数无压力。
《Pattern Recognition and Machine Learning》。这本书对贝叶斯方法的阐述个人觉得最佳。SVM那部分感觉讲的不太好,看不下去可以略过。看完之后搞generative model无压力。
《统计机器学习》。不多说,中国人用中文写的好书。李航大神的良心大作。关键中文书的好处是轻便,不像英文书的大部头,走到哪里都能带着,简直居家旅行必备。
入门的书这几本感觉应该够了,看完了你就会自己发现想看的新的书了。很重要的一点是看的过程中,尤其是跟课的过程中,作业不要落下。要动手编程,自己实现几个模型。
阶段三:登堂入室
看完了教材,现在又该回过头来把编程的能力提升一下了。阶段二里面公式推得飞起,可是你认真看过你写的code吗?结构怎么样?模块分得科不科学?如果让你重新写一遍,你会怎么去写?
结合着看几个大的framework,看看大神们是怎么实现自己之前实现过的那些算法的;他们的接口怎么设计,怎么设置模块。以及更为实用的,怎么使用这些framework。
scikit-learn。scikit-learn: machine learning in Python。
Deep Learning方面依旧是推荐一个基于Theano的framework:lasagne(GitHub – Lasagne/Lasagne: Lightweight library to build and train neural networks in Theano)。
其余的库也值得了解。比如Torch,MXNET跟TensorFlow。个人觉得如果不是专精于开发,这几个当中精通一个,然后能看得懂别的几个,就可以了。因为个人能力所限,对其他三个库以及它们的“生态系统”了解不太多,缺乏横向比较也不敢推荐,还等大神出来补齐这方面的空白。对于Torch,TensorFlow跟Theano的性能倒是有一个直接的对比:arxiv.org 的页面
看进去就会发现,一个framework的体量根本就远远超出一个人的精力所能涵盖的范围。对于大的库,甚至看完它的源代码都已是不可能。所以重要的是看人家的设计、用人家的接口,在实用中一点点了解深入。比如实现几个大的模型,改改其中的结构,再换个数据集跑一跑。
恭喜,在完成了这些之后你已经入门了。
阶段四:心领神会
继续看书,看深入地讲某一方面的书。把之前过程中遇到的问题打破砂锅问到底。由于每本书都可以是迷死你几个月没商量的主,所以这一部分会花很长的时间,基本得和前一个或者后一个阶段同时进行。而且必须明白的一点是,这些书不可能全部看完,从跟自己最相关最想看的开始看吧,能啃一本是一本。推荐的书:
《Statistical Learning Theory》
《All of Statistics》
《Convex Optimization》
《Reinforcement Learning: An Introduction》
《Deep Learning》
《An Introduction to Information Retrieval》
。。。。。。
推荐一个github repo,上面搜集了很多这方面的书:GitHub: awesome machine learning
还有课程:
Fei-fei Li 关于ConvNets的课程,虽然她只上了一节课。。Stanford University CS231n: Convolutional Neural Networks for Visual Recognition
阿花狗的父亲之一,David Silver,给的关于reinforcement learning 的课程: http://www0.cs.ucl.ac.uk/staff/d.silver/web/Teaching.html
Hinton在coursera上著名的公开课:Neural Networks for Machine Learning
PGM的祖师奶Daphne Koller给你讲PGM:Probabilistic Graphical Models
NLP:Introduction to Natural Language Processing
自动机理论:Automata
阶段五:融会贯通
到这里你会发现这时候你需要的东西那么多。而且不同的子方向深入之后所需要的东西都变得很不一样,不可能一一列出表来。然而有几件事情还是都一样的:
阅读文献。主要就是arXiv。保证每周细读两篇paper,并且对arxiv上几个相关主题下每周放出来的新paper有个大概的了解(即看过标题或者abstract)。另外还可以在google scholar上关注几个领域内主要的大牛,然后设置新paper提醒。男神出新的paper了?让google贴心地推送到你的邮箱。
独立地思考问题。尽信paper不如无paper。哪些paper你觉得有问题?哪些paper里面的主张跟你的想法不一样?如果要搞明白,怎样设计实验来分辨出谁对谁错?怎样在别人的paper里面找到破绽驳倒他们的主张?在这个过程中,自己的嘴会变得越发“刁钻刻薄”,当然也使得你写的paper更能挡住别人刁钻刻薄的追问。
跟数据说话。就像F1的赛车一样,任你引擎跑到多少转任你空气动力学做得如何风骚,最后都得落实到四个轮子上才能把赛车的性能发挥出来。机器学习也一样,任你理论做的怎么漂亮,全得靠数据上实际跑出来的效果说话。所以要不断跟数据打交道,一个方法放上去不好使,那么为啥不好使?好使的时候中间结果应该是什么样的?哪些地方模型的表现暗示着模型没有抓住数据的一些特点?怎样的模型适合具有某一类特性的数据?要怎样改模型才可以让模型能够去学习到你想让它学的东西?用上你的改进后,模型的表现又变得怎样了?
夯实基础知识。到这个时候基础知识是那么重要。那些原来看上去跟机器学习没关系的课都变得重要了起来。大学里的每门课(额尤其是数学课)都变得那么重要,你好想再去上一遍。。当然哪些基础知识需要夯实,不同的流派就有不同的风格:
1. 峨眉派
峨眉派的特点就是数学好。微分几何、凸优化、图论、流形、泛函分析、拓扑学。。数学你还会嫌学得太多吗?
2. 武当派
武当派最不喜欢数学,喜欢靠intuition说话。祖师爷Hinton就是这么个人。心理学的背景,致力于搞明白“how the brain works”。Yoshua最近最看重的工作之一也是从神经科学得到启发,叫做biologically plausible deep learning。ConvNet也是受到对猫的神经元的研究的启发。事实上神经网络发展到现在,也没有个严格点数学理论去解释,倒是多看看神经科学的东西,也许会有新的发现。所以这个路子虽然野,却是大神辈出。补点神经科学方面的基础知识绝对不吃亏:Computational Neuroscience。就相当于是机器学习中的仿生学吧。
3. 昆仑派
这一派也是数学好,只是他们概率统计特别强大,基本就靠这个吃饭。搞generative model,推bound。之所以把这一部分单列出来,是因为概率和统计在机器学习当中太重要了。
4. 硬件派
“我们是搞硬件的可是那也阻当不了我们搞人工智能!我们搞加速算法、压缩模型、搞dedicated hardware。”
5. 丐帮
“我没那么厉害的数学基础,但是我编程厉害啊!反正人工智能,我靠大量的实验压死别的派别!我用销魂的架构设计让大家都来用我写的代码!”
越写画风越不正经,就此打住。并不是说投靠了一个门派其他门派都不用管了,而是说自己门派的东西要比较全面地了解,了解到可以当作自己的背景;别的门派的也要了解些感兴趣的。每个人背景不一样,看问题的角度也不一样,不用也不可能做到样样精通。相比而言更有效的是跟不同背景的人多交流。好的idea经常就是在交流中爆出来的。
具体哪个派别厉害呢?江湖变幻莫测,又岂能一言蔽之。请时刻关注一年一度的华山论剑:NIPS、ICML、AAAI、ICLR。
1、Information Theory:开启新的视角,无论是理论还是应用都会用到
推荐教材:Elements of Information Theory 2nd Edition
2、Linear Algebra:无论学什么,都是基础中的基础必须学会。
推荐教材: Gilbert Strang 的书和视频
Linear Algebra,Stephen H. Friedberg
3、Basic statistics & probability & stochastic process:
顺便说一下,一般的鄙视链是这样的:algebra > probability > statistics > statistical learning > computer vision > old-school AI。
概率学深了可以很深,但是对the application of machine learning (a.k.a. computer vision) 用处不大。
推荐教材:暂时没有
4、Signal Processing/Image Processing:对于computer vision很重要,但对有的领域比如NLP,或者大部分machine learning ,用处有限。
推荐教材:Image Processing, Analysis, and Machine Vision很老但是适合扫盲。
Richard Szeliski的Computer Vision: Algorithms and Applications 新但是略偏
graphics和multimedia,Computer Vision: A Modern Approach (2nd Edition) Amazon.com: Book是经典百科全书。
还可跳过细节看David Marr的 Vision: A Computational Investigation into the Human Representation and Processing of Visual Information
5、Statistical learning:哪怕deep learning再火,它也不可能解决所有问题,统计知识是必备的。所以统计学习的那一套基础知识
推荐教材:
The Elements of Statistical Learning: Data Mining, Inference, and Prediction, Second Edition
和
Machine Learning: A Probabilistic Perspective (Adaptive Computation and Machine Learning series)
Pattern Recognition and Machine Learning (Information Science and Statistics): Christopher Bishop
6、Optimization:绝大部分统计学习问题都会转化成优化问题,区别在于有的是严格的分析转化如SVM,有的只是走个优化的套路但真正理论基础还没有得到完善比如deep learning。
推荐教材:可以尝试 Convex Optimization : Stephen Boyd, Lieven Vandenberghe 。
学以致用会更好,更能加深对这个领域的理解。建议找个合适的开源,直接开干!
如果是做计算机视觉,建议在阅读OPENCV官方文档的同时,在机器上做相关的练习,从最基础的例子开始,哪怕照着敲代码,也要出效果,而且必须要调试,查看变量的值,然后适当修改某些参数,看看有什么变化。OPENCV文档里每个章节的每个例子,都挨个试一遍,逐步加深理解。好的学习方法往往看起来都是笨办法。
如果是机器学习/深度学习,建议看看caffe等开源。方法跟OPENCV类似。不过我是强烈建议,先不要去搞深度学习,先把传统方式学好,比如SVM,OPENCV里面也都有例子。
其他人工智能领域,也有很多开源代码,也可以去试试,就不一一举例了,自己上github上搜一下。但是要有重点,太多也不好。
还有一个很重要的任务,就是在练习这些开源例子的同时,一定要把C/C++技能逐步加强!你成为人工智能高手的同时,也同样是编程和算法高手。这个过程中,如果感兴趣,也可以适当看点相关的理论和科普读物。
如果你只是想初步了解一下这个领域的情况,并没有下定决心从事这个领域相关工作(憧憬,只是想要研究一下?),我的建议是: 找业内人士沟通一下即可(1个小时?)。
别费那个时间去看那些长篇累牍了,有很多还是英文原版,还有很多高深理论。何必遭那罪,有那时间还不如睡个好觉,泡泡妞都比这强。