微博收藏(机器学习探讨)(二)

Jeremy Lin

1.0 关于深度学习与工程师的讨论

@龙星镖局 感受:

1)深度学习真成了,80%机器学习工程师失业;

2)大规模机器学习依赖数据、架构,算法其次;

3)NLP是深度学习的前沿阵地,Dean,Bengio,Jordan都不会错过;

4)机器学习门槛太低,编程能力才是码农的最后防线;

5)大数据研究将会呈现巨头垄断的格局,大家赶紧找好山头。

@Arber:同意 2)3),对1)4)则存怀疑,基础架构越发达,工程师的角色则会靠近业务层,也越能发挥价值,不是写程序的价值,而是解决问题的价值。5)么,数据在哪里,机会就在哪里。

@明风Andy:回复@Arber:2,3也不同意,算法实现的好坏和精妙度,分布式环境更加重要。图像比NLP更加适合深度学习

@美人她爹: 基本上一个东西如果复杂到需要一个团队来处理,就没啥新意了。团队创意效率胆识都远低于个人。芯片操作系统网站生物工程都是例子。大公司死于自己建立的复杂性,这是一个孤胆英雄的时代

@爱可可-爱生活:[赞] 工程上分工细化的团队是必要的,核心技术方面更需要独当一面的孤胆英雄,否则也很难真正沉淀下去

@yhchuan:1.真成了应该会更繁荣,为啥都失业?就像是说软件工程真成了,程序员都要下岗。2.数据和架构成熟之后,不同应用的不同算法难道不是核心问题?3.NLP。。。不是说太结构化的数据不适用DL?4.ML门槛低?会写hello world就可以说精通编程了,所以编程其实门槛更低。5.巨头垄断各行各业都有,唯一同意的

@asker2:回复@诸神善待民科组: 深度学习现在才刚开始发展。靠一个general的多层RBM或者autoencoder是不够的。就像word embedding,靠简单的word2vec也是不够的。更复杂,更强大的模型还等着被机器学习研究者开发出来

@张俊林say:NLP确实是除了图像音频外的DL前沿探索区

今后几年的趋势应该是小数据颠覆大数据,不是深度学习1) 我觉得无论是从技术还是市场,到了拼系统的程度,就只有数据奴隶主,主要是大的数据奴隶主才能搞。但是这反而是颠覆他们的机会。因为他们的规模依赖他们的渠道和市场(不然哪里来那么多免费数据浪费)。但是现实市场中大多数问题并不需要这么大规模。这会是一个典型的创新者的窘境;2) 绝大多数的机器学习问题的制约瓶颈不是算法,也不是系统,而是数据。能到拼系统阶段的都是土豪了,大多数公司还没到这个奢侈的阶段就死了。在此阶段前,只要数据好,什么烂算法和烂系统都能somehow work。但是数据是最贵的,上量贵,清理贵。找一个理解数据,算法和系统的人更贵;3)对于大多数的芸芸众生,去追谷歌脸书这些巨头的风恐怕有些李德主义。算法的好坏取决与成本,取决与规模。对于占大多数的中小型机器学习问题,恐怕“小数据”方法才是关键,就是用最低的成本,尽可能的利用小的数据规模和机器规模,尽可能的利用先验知识,尽可能的缩短投入产出周期;4)和大多数其他工程问题一样,制约技术选型的不是一个技术酷不酷,而是看它全周期的投入成本和维护成本。投入成本不仅要看机器成本,更主要是人力成本。采用成熟技术有助于降低成本,前沿技术向下渗透速度并不会那么快。深度学习和历史上的神经网络一样,维护成本并不低,不会是万灵药;5)我说的可能是偏见,不一定对:今后几年的趋势应该是小数据颠覆大数据,Smart Data超越Big Data。系统的可解释性,可读性,可维护性,可进化性。数据的自描述性,多能性。结构化数据(含知识图谱)与非结构化数据的混合。我觉得这些都是可能的突破点,因为它们着眼于Value,降低成本。

3.0@陈天奇怪:cxxnet和大规模深度学习在今年发布的两个机器学习项目中,cxxnet是最精彩的一个。因为它包含了我们团队可以发挥到的机器学习和系统的各个方面的极致: 除了前沿的深度学习之外,它的两个独到特点也是让我们在设计实现中最为享受的

1) 灵活的公式支持和极致的C++模板编程;深度神经网络的实现大致分两类:以python为主的编程效率派和以c++为核心的为代表的追逐性能派。前者支持直接tensor的计算,而后者往往需要给每个神经网络的层和更新公式编写独立的cuda kernel。编程效率派认为机器学习程序员应该是写公式来达到代码最大的可读性和易改写性。而很多以C++为核心的代码之所以没有支持非常灵活的张量计算,是因为因为运算符重载和临时空间的分配会带来效率的降低。cxxnet的核心mshadow在这两者之间做了一个平衡。使得我们在不损失效率的前提下可以通过模板编程技术允许开发者编写和matlab/numpy类似的代码,并且在编译时自动展开成优化的kernel。其背后的expressiontemplate技术是我最喜欢的c++ trick之一。非常值得最求效率抽象和优美的同学了解。因为采用了mshadow作为核心,直接导致cxxnet的各种实现可以非常简单可读,编写一份代码就可以在GPU和CPU上面跑。使得其在代码简洁和可扩展上更加容易。2) 通用的并行参数共享和更新方案多卡和多机计算一直是大规模机器学习中一个让人兴奋的话题。提到神经网络并行,最让我头疼的是可以选择的方案很多,而都涉及到不同的hack。单机多卡到底是用P2P,还是拷贝到内存,是用stream开始开多线程。分布式到底是用parameter server,MPI还是自己写一个框架。可以选择的方法很多。设计出一个分布式的代码不难,困难的是如何让并行的接口自然的独立出来,使得其不会影响其它部分的实现。经过不断地考虑,最终我决定采用了mshadow-ps这样一个统一的参数共享接口。简单的说,mshadow-ps是一个GPU的异步parameter server接口(应该也是目前为止唯一一个,因为GPU线程模型和CPU不同,原有的的ps库并不能直接用于GPU)。异步通信对于神经网络的更新非常重要。在backprop算法中,我们很早就可以获得梯度并且进行梯度同步,而只有到下一次forward到对应层的时候才会需要这个weight。我和limu合作设计了ps风格的三个接口来解决这样的同步问题,Push/PullReq和Pullwait。当获backprop得梯度的时候直接调用push把梯度发送出去,并且调用pullreq请求结果。Push和Pullreq都是异步操作,背后会有单独的线程同时完成数据拷贝同步,以及拷回的操作。而当我们需要weight之前在调用Pullwait来等待可能没有完成的操作。这样简单的三个接口,使得我们可以经过很少的改动就可以设计出多卡和分布式的神经网络来,并且在调用这些接口的时候完全不需要关系同步的实现是什么。值得一提的是,这样的编程模式把多GPU,分布式以及各个通信框架直接结合起来。mshadow-ps支持单机多卡的GPU PS,以及基于parameter-server的分布式PS实现。同样的也可以很容易MPI来支持多机通信。使得一个统一的接口,可以完成从单机多卡到分布式各种后端实现的支持。并且因为高效的异步通信,使得我们可以在alexnet上面达到linearspeedup(注:并行的难度在于计算和通信的时间比,weight少更加复杂的网络反而更加容易线性加速,而alexnet是非常困难的例子)。经过团队里面大家不断地努力,cxxnet的V2终于可以和大家见面了。除了上述介绍的技术亮点之外,还有各种好玩的特性。现在把特点总结如下:1. 轻量而齐全的框架: 我们尽力维持最小的依赖库实现最多的功能。推荐环境下仅需要CUDA, OpenCV, MKL或BLAS即可编译。2. 强大的统一的并行计算接口:基于mshadow-ps的并行计算接口采用了一份代码解决了多GPU,多机的异步同步。同步和计算重叠,在多份测试中均可以得到线性加速比。3. 易于扩展的代码结构:cxxnet计算核心由mshadow提供。Mshadow使用户可以编写numpy/matlab风格的代码,但仍具备手动优化cuda 代码的灵活性。CPU和GPU共享同一份代码,在编译期间通过模板自动翻译成CUDA/MKL调用。另外一些特性包括:4.CuDNN支持:Nvidia原生卷积支持,可加速计算30%!5.及时更新的最新技术:我们将及时跟进学术界的动态,例如现在已经支持MSRA的ParametricRelu和Google的Batch Normalization6.Caffe模型转换:支持将训练好的Caffe模型直接转化为cxxnet模型(本周内上线!)7.方便的语言接口:在Python中直接进行训练,方便可视化。Matlab也将很快提供我们相信可以通过最简洁清晰的代码来完成高效的C++深度神经网络实现。我们也欢迎对于系统和机器学习有兴趣的同学加入到项目中来。

4.0 Eric Xing(CMU教授)的DNN-discussion

既有美妙的风景,也会有称不上景只有风的地方。

微博收藏(机器学习探讨)(二)

相关文章:

你感兴趣的文章:

标签云: