Google公布首份“开源成绩单”盘点最受欢迎8大深度学习项目

Google近日公布了首份“开源成绩单”(Open Source Report Card),介绍了他们最受欢迎的开源项目,并分享了Google工程师们最喜欢的编程语言。

谷歌公布首份“开源成绩单”,盘点最受欢迎8大深度学习项目

Google开源项目办公室主管Josh Simmons在博客中写道:开源让Google能够更快速、高效地创造新事物,而无需重新发明轮子,使我们能够专注于解决新问题。我们知道,我们是站在巨人的肩膀上。这就是我们支持开源,并且致力于让Google工程师们更方便地开源他们正在进行的项目的原因。

Google已经开源了900多个项目,超过2000万行代码(所有开源项目地址:https://github.com/google)。Google有许多工程师全职工作于开源项目,更多工程师甚至利用他们20%的时间创建新项目或者贡献他们喜欢的现有项目。

谷歌最受欢迎的十大开源项目

这份开源成绩单分享了Google的开源项目中最受欢迎的10个项目:

Android – 用于移动设备的软件栈,包括操作系统、中间件和关键应用。
Chromium– 包括Google Chrome浏览器背后的软件Chromium,以及Google Chrome OS设备背后的Chromium操作系统。
Angular – JavaScript和Dart的Web应用框架,专注于提高开发人员的生产力,使开发和测试更容易。
TensorFlow – 使用数据流图进行数值计算的库,支持从数据中心到嵌入式设备的跨平台机器学习。
Go – 一种静态强类型、编译型的编程语言,具有表达性、简洁、干净、高效的特点。
Kubernetes – 用于容器集的自动化部署、操作和缩放的系统。
Polymer – 基于Web组件API构建的轻量级库,用于在Web应用程序中构建封装的可重复利用元素。
Protobuf – 一个可扩展、语言中立以及平台中立的框架,用于结构化数据的序列化。
Guava – 包括新的集合类型(例如多图和多集)、不可变集合、图形库、功能类型,内存cache、协同API、I/O、哈希、字符串处理等的一系列Java核心库。
Yeoman – 一套强大的脚手架工具,包括库和工作流,可以帮助开发者快速构建漂亮的Web应用程序。

谷歌工程师最常用的语言TOP10

Google工程师们使用的编程语言非常多样,从Assembly到XSLT都有,那么他们最喜欢的编程语言是什么呢?通过统计GitHub上的星标数量,Google公布了他们的工程师最喜欢的十种编程语言:

JavaScript
Java
C/C++
Go
Python
TypeScript
Dart
PHP
Objective-C
C#

谷歌八大深度学习开源项目

1. Google第二代深度学习引擎TensorFlow开源

2015年11月,谷歌开源深度学习平台 TensorFlow。2016年4月,谷歌推出了分布式 TensorFlow。现在,TensorFlow 已经成为最受欢迎的深度学习平台之一。更多深度学习资讯:www.yangfenzi.com/tag/shenduxuexi

2. 谷歌开源全球最精准语言解析器SnytaxNet

2016年5月13日,Google Research宣布,世界准确度最高的自然语言解析器 SyntaxNet 开源。谷歌开源再进一步。据介绍,谷歌在该平台上训练的模型的语言理解准确率超过90%。SyntaxNet 是一个在TensoFlow中运行的开源神经网络框架,提供自然语言理解系统基础。谷歌公开了所有用用户自己的数据训练新SyntaxNet模型所需要的代码,以及谷歌已经训练好的,可用于分析英语文本的模型 Paesey McParseface。

Paesey McParseface 建立于强大的机器学习算法,可以学会分析句子的语言结构,能解释特定句子中每一个词的功能。此类模型中,Paesey McParseface是世界上最精确的,谷歌希望它能帮助对自动提取信息、翻译和其他自然语言理解(NLU)中的应用感兴趣的研究者和开发者。

3. 谷歌推出 Deep&Wide Learning,开源深度学习 API

2016年6月29日,谷歌研究所推出 Wide & Deep Learning,并将 TensorFlow API 开源,欢迎开发者使用这款最新的工具。同时开源的还有对 Wide & Deep Learning 的实现,作为 TF.Learn 应用程序接口的一部分,让开发者也能自己训练模型。更多开源项目:www.yangfenzi.com/tag/kaiyuan

4. 谷歌开源图像分类工具TF-Slim,定义TensorFlow 复杂模型

2016年8月31日,谷歌宣布开源 TensorFlow 高级软件包 TF-Slim,能使用户快速准确地定义复杂模型,尤其是图像分类任务。自发布以来,TF-Slim 已经得到长足发展,无论是网络层、代价函数,还是评估标准,都增加了很多类型,训练和评估模型也有了很多便利的常规操作手段。这些手段使你在并行读取数据或者在多台机器上部署模型等大规模运行时,不必为细节操心。此外,我们还制作了 TF-Slim 图像模型库,为很多广泛使用的图像分类模型提供了定义以及训练脚本,这些都是使用标准的数据库写就的。TF-Slim 及其组成部分都已经在谷歌内部得到广泛的使用,很多升级也都整合进了 tf.contrib.slim.

5. 谷歌开源大规模数据库,10亿+数据,探索 RNN 极限

2016年9月13日,谷歌宣布开源大规模语言建模模型库,这项名为“探索RNN极限”的研究今年2月发表时就引发激论,如今姗姗来迟的开源更加引人瞩目。研究测试取得了极好的成绩,另外开源的数据库含有大约 10 亿英语单词,词汇有 80 万,大部分是新闻数据。这是典型的产业研究,只有在谷歌这样的大公司才做得出来。这次开源也应该会像作者希望的那样,在机器翻译、语音识别等领域起到推进作用。

6. 谷歌开源 TensorFlow 图说生成模型,可真正理解图像

2016年9月23日,谷歌宣布开源图说生成系统 Show and Tell 最新版在 TensorFlow 上的模型。该系统采用编码器-解码器神经网络架构,分类准确率达 93.9%,在遇到全新的场景时能够生成准确的新图说。谷歌表示,这说明该系统能够真正理解图像。

7. 谷歌开源超大数据库,含800万视频

2016年9月28日,谷歌在官方博客上宣布,将含有800万个Youtube 视频URL 的视频数据库开源,视频总时长达到了50万个小时。一并发布的还有从包含了4800个知识图谱分类数据集中提取的视频级别标签。这一数据库在规模和覆盖的种类上都比现有的视频数据库有显著提升。例如,较为著名的Sports-1M数据库,就只由100万个Youtube 视频和500个运动类目。谷歌官方博客上说,在视频的数量和种类上,Youtube-8M代表的是几乎指数级的增长。

8. 谷歌发布 Open Images 图片数据集,包含900万标注图片

2016年10月1日,继前天发布800万视频数据集之后,今天,谷歌又发布了图片数据库Open Images,包含了900万标注数据,标签种类超过6000种。谷歌在官方博客中写到,这比只拥有1000个分类的ImageNet 更加贴近实际生活。对于想要从零开始训练计算机视觉模型的人来说,这些数据远远足够了。

来源:谷歌博客  译者:刘小芹

氧分子网(www.yangfenzi.com)是关注互联网生态圈的科技新媒体

·氧分子网(http://www.yangfenzi.com)延伸阅读:

➤ 谷歌开源总监迪博纳专访:开源如何改变了谷歌

➤ 《福布斯》:Google 能从开源生态系统中获得什么?

➤ Google Angular 中文网站上线发布,开源推动互联网技术的发展

➤ 为什么很多优秀的软件公司和开发者愿意开源和共享?

➤ 开源大势降低技术门槛,人工智能企业更依赖大数据

➤ Facebook如何推动下一波开源浪潮?

➤ Google 重磅突破:相比LSTM,NLP 关键任务提升 20%

➤ Facebook开源深度学习框架Torchnet与谷歌TensorFlow有何不同

➤ 百度公开硬件基准DeepBench,推动深度学习专用芯片研发竞争

您可能还喜欢…

4 Responses

  1. 刘知远说道:

    深度学习已经在语音识别、图像处理等方面取得了巨大成功。从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,了解深度学习中的主要算法和人物,然后再去了解具体算法。

  2. 胡小明说道:

    Hinton,Bengio及Lecun三位大神在Nature上发表的Deep Learning综述最后总结了深度学习的三大发展方向:

    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. 自然语言理解。自然语言理解也是深度学习在未来几年能大有作为的领域。使用深度学习技术的各种应用比如神经机器翻译,问答系统,文摘生成等都取得了不错的效果,效果的提升主要归功于注意力机制和循环神经网络相结合的强大能力。相信未来几年内还会有大量相关工作出现。

  3. 李文哲说道:

    1. 图像识别 CNN是主流,但是很多的文章只是在MNIST, ImageNet上做实验。 你可以找一些其他的图像数据,比如天文,地理, 医疗,自然等等。然后在这些数据上实现CNN. 当然,在你实现的过程中一般都会伴随着一些小/大创新。 这个足够让你发一篇不错的文章。 很容易找得到一些open source code.

    2.语音识别+机器翻译 这个也可以叫做“同声传译”。 你可以分别建语音识别和机器翻译模块,两者都可以用到深度学习。 深度学习对于语音识别的研究很多, 机器翻译的话可以查一查ACL的文章,很多估计都在用Recursive network. 如果能做成这个系统(比如中英传译),足够让你发一篇论文再加上专利/公司的offer.

    3. Multimodal Learning 也就是你有不同方面的数据,然后怎么建立模型从而去学习它们之间的关系。最经典的就是把图像和文本作为输入, 然后互相做预测。 这个算是比较hot的方向, 而且不难实现. 看这个文章:
    http://papers.nips.cc/paper/4683-multimodal-learning-with-deep-boltzmann-machines.pdf
    这个思想可以延伸到任何的multimodal数据上(语音-视频, 视频-文字 等等)
    这个open source code也许有帮助。
    karpathy/neuraltalk · GitHub

    4. 文本模型 如果你对LDA比较熟悉, 那LDA的很多模型都可以扩展到深度学习模型上。 跟LDA类似的模型有softmax replicated topic model (自己搜一下),neural autoregressive topic model(也搜一下), 然后对LDA的类似的extension都可以(很可能)做到这些模型上(比如dynamic topic model, relational topic model, hierarchical topic model, supervised topic model, 等等)

    5. 时序相关的项目。 在深度学习这一块,做时序方面的不是很多,最经典文章算是recurrent temporal RBM(可以搜一下), 它其实类似于HMM。 你可以找一个建立在HMM之上的模型,然后再把它扩展到RTRBM上。 发文章应该也没问题。

    6. CTR prediction. 这个算是比较老的问题,但我还没有看到特别好的深度学习文章讲这方面的应用, 你可以尝试一下, 就是把很多方面的数据结合在一起(点击的历史数据,用户信息,广告信息…),然后建立深度学习模型。 百度IDL的主页说它们在做这个应用(Research Topic), 你比它做得更好,就可以去开公司了,要相信自己!

    7. 推荐系统 用RBM作collaborative filtering的文章是我唯一觉得比较好的文章,我感觉这方面还是有得做。 读一读这方面的literature, 看一下能不能找一个比较新鲜的topic.

    8. 把深度学习思想应用到其他的模型上。 其实深度学习不是一中算法,而是一种框架和思想,很多已有的模型都可以叠加在一起成为深度学习模型, 比如像deep gaussian process。

  4. 郑华滨说道:

    提几个可能的发展方向,同时也就是尚待解决的问题:

    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)结合起来或至少是向知识图谱类似的做法靠拢,因为知识图谱更加结构化。

发表评论

邮箱地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>