Google官方开源tf-seq2seq:通用编码器-解码器框架

选自Google

机器之心编译

参与:吴攀


谷歌又开源了!tf-seq2seq 是一个用于 TensorFlow 的通用编码器-解码器框架(encoder-decoder framework),其可用于机器翻译、文本摘要、会话建模、图像描述等任务。

  • 项目介绍:https://Google.github.io/seq2seq/

  • 代码地址:https://github.com/Google/seq2seq


设计目标

谷歌介绍说,设计该框架的目标是希望其能满足以下目标:

  • 通用性:我们最初是为机器翻译而开发了此框架,但之后也将其应用到很多不同类型的任务中,包括摘要、会话建模和图像描述。只要你的问题可以通过「以一种格式编码输入数据然后对其用另一种格式解码」的方式解决,那么你应该就可以使用或扩展地使用这个框架。

  • 使用性:你可以仅用一行命令就训练一个模型。支持多种输入数据类型,包括标准的原始文本。

  • 再现性:可以使用 YAML 文件配置训练流程和模型。这让其他人也能运行与你的模型一模一样的模型。

  • 扩展性:代码是以一种模块化的方式构建的,这使得其易于扩展。比如,增加新类型的注意机制或编码器架构仅需要最少量的代码修改。

  • 文档:所有的代码都使用标准的 Python docstrings 进行记录的,而且我们已经编写了能帮助你上手常见任务的指南。

  • 良好的性能:为了代码的简洁性,我们没有试图榨干其所有性能,但该实现对于几乎所有生产和研究应用来说都已经足够快了。tf-seq2seq 也支持分布式训练,从而可在计算能力和训练时间之间进行权衡。

编码器

编码器用于读取源数据(source data),比如一个词序列或一张图像,然后产出一个在连续空间中的特征表示。比如,一个循环神经网络编码器可能会以一个词序列为输入,然后产生一个大致对应了该文本的含义的一个固定长度的向量。而一个基于卷积神经网络的编码器则可以以一张图像为输入,并生成包含了该图像的更高级特征的新内容。其中的思想是:由编码器所产生的表征可被解码器用来生成新数据,比如另一种语言的句子和图像的描述。可用编码器列表请参考:https://Google.github.io/seq2seq/encoders/

解码器

解码器是基于编码器所产生的表征的生成模型。比如,一个循环神经网络解码器可以学习生成一个编码句子的另一种语言的表示。可用解码器列表请参考:https://Google.github.io/seq2seq/decoders/

模型

模型定义了结合编码器和解码器的方式,以及计算和最小化损失函数的方式。模型也需要对从输入流程读取到的数据进行必要的预处理。这里实现的每个模型都是可被传递给 tf.contrib.learn Estimator 的 model_fn。可用模型列表请参考:https://Google.github.io/seq2seq/models/

答疑

问:此框架和谷歌神经翻译(GNMT)相比如何?这里开源的是官方的实现吗?

答:不是,这并不是 GNMT 系统的官方开源实现。这个框架是自底向上构建的,可用于多种任务,神经机器翻译只是其中一种。我们尚未在该框架中复制 GNMT 架构,但我们欢迎这个方向的贡献:https://Google.github.io/seq2seq/contributing/

相关框架

以下框架在功能上与 tf-seq2seq 类似:

  • OpenNMT (Torch):https://opennmt.net/

  • Neural Monkey (Tensorflow):https://github.com/ufal/neuralmonkey

  • NEMATUS (Theano):https://github.com/rsennrich/nematus

Java程序员必须有15个框架。学习这些不是问题

Java 程序员方向太多,且不说移动开发、大数据、区块链、人工智能这些,大部分 Java 程序员都是 Java Web/后端开发。那作为一名 Java Web 开发程序员必须需要熟悉哪些框架呢?

今天,给大家列举了一些通用的、必须掌握的框架,学会这些,20K+ 不是问题。

1.Spring

毫无疑问,Spring 框架现在是 Java 后端框架家族里面最强大的一个,其拥有 IOC 和 AOP 两大利器,大大简化了软件开发复杂性。并且,Spring 现在能与所有主流开发框架集成,可谓是一个万能框架,Spring 让 JAVA 开发变得更多简单。

2.Spring MVC

Spring MVC 是一个 MVC 开源框架,用来代替 Struts。它是 Spring 项目里面的一个重要组成部分,能与 Spring IOC 容器紧密结合,以及拥有松耦合、方便配置、代码分离等特点,让 JAVA 程序员开发 WEB 项目变得更加容易。

3.Spring Boot

Spring Boot 是 Spring 开源组织下的一个子项目,也是 Spring 组件一站式解决方案,主要是为了简化使用 Spring 框架的难度,简省繁重的配置。

Spring Boot提供了各种组件的启动器(starters),开发者只要能配置好对应组件参数,Spring Boot 就会自动配置,让开发者能快速搭建依赖于 Spring 组件的 Java 项目。

4.Spring Cloud

Spring Cloud 是一系列框架的有序集合,是目前最火热的微服务框架首选,它利用Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 Spring Boot 的开发风格做到一键启动和部署。

5.Mybatis/ iBatis

iBatis 曾是开源软件组 Apache 推出的一种轻量级的对象关系映射持久层(ORM)框架,随着开发团队转投Google Code 旗下,ibatis 3.x 正式更名为 Mybatis,即:iBatis 2.x, MyBatis 3.x。

6.Hibernate

Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,它将 POJO 与数据库表建立映射关系,是一个全自动的 orm 框架。Hibernate 可以自动生成 SQL 语句,自动执行,使得 Java 程序员可以随心所欲的使用对象编程思维来操作数据库。

7.Dubbo

Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架,现已成为 Apache 基金会孵化项目。使用 Dubbo 可以将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,可用于提高业务复用灵活扩展,使前端应用能更快速的响应多变的市场需求。

8.Netty

Netty 是由 JBOSS 提供的一个开源的、异步的、基于事件驱动的网络通信框架,用 Netty 可以快速开发高性能、高可靠性的网络服务器和客户端程序,Netty 简化了网络应用的编程开发过程,使开发网络编程变得异常简单。

9.Shiro

Apache Shiro是一个强大而灵活的开源安全框架,它干净利落地处理身份认证,授权,企业会话管理和加密。

10.Ehcache

EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是 Hibernate 中默认的CacheProvider。它使用的是 JVM 的堆内存,超过内存可以设置缓存到磁盘,企业版的可以使用 JVM 堆外的物理内存。

11.Quartz

Quartz 是一个基于 Java 的广泛使用的开源的任务调度框架,做过定时任务的没有没用过这个框架的吧?

12.Velocity

Velocity 是一个基于 Java 的模板引擎,简单而强大的模板语言为各种 Web 框架提供模板服务,来适配 MVC 模型。

13.jQuery

jQuery是一个快速、简洁的 JavaScript 框架,它封装 JavaScript 常用的功能代码,提供一种简便的 JavaScript 设计模式,极大地简化了 JavaScript 编程。

虽然哥好久没做 Web 开发了,但哥也不曾忘记,也还记得一些常用的写法,如:

$(“#wx”).html(“javastack”);

14.JUnit

JUnit 是一个 Java 语言的单元测试框架,绝大多数 Java 的开发环境都已经集成了 JUnit 作为其单元测试的工具。

15.Log4j

Log4j 是 Apache 的一个开源日志框架,通过 Log4j 我们可以将程序中的日志信息输出到控制台、文件等来记录日志。作为一个最老牌的日志框架,它现在的主流版本是 Log4j2。Log4j2是重新架构的一款日志框架,抛弃了之前 Log4j 的不足,以及吸取了优秀日志框架 Logback 的设计。

如果上面的大部分没用过,甚至都没听说过,那就怀疑你是不是个假程序员了,要加油了。

这些都是 Java 程序员必备的开发框架,有些不一定是首选的选择,但这些一定是 Java 程序员必备的。

让数以百万计的手机训练同一型号?谷歌打开了这个框架

作者 | 琥珀出品 | AI科技大本营(公众号id:rgznai100)

【导语】据了解,全球有 30 亿台智能手机和 70 亿台边缘设备。每天,这些电话与设备之间的交互不断产生新的数据。传统的数据分析和机器学习模式,都需要在处理数据之前集中收集数据至服务器,然后进行机器学习训练并得到模型参数,最终获得更好的产品。

但如果这些需要聚合的数据敏感且昂贵的话,那么这种中心化的数据收集手段可能就不太适用了。

去掉这一步骤,直接在生成数据的边缘设备上进行数据分析和机器学习训练呢?

近日,Google 开源了一款名为 TensorFlow Federated (TFF)的框架,可用于去中心化(decentralized)数据的机器学习及运算实验。它实现了一种称为联邦学习(Federated Learning,FL)的方法,将为开发者提供分布式机器学习,以便在没有数据离开设备的情况下,便可在多种设备上训练共享的 ML 模型。其中,通过加密方式提供多一层的隐私保护,并且设备上模型训练的权重与用于连续学习的中心模型共享。

传送门:https://www.tensorflow.org/federated/

实际上,早在 2017 年 4 月,Google AI 团队就推出了联邦学习的概念。这种被称为联邦学习的框架目前已应用在 Google 内部用于训练神经网络模型,例如智能手机中虚拟键盘的下一词预测和音乐识别搜索功能。

图注:每台手机都在本地训练模型(A);将用户更新信息聚合(B);然后形成改进的共享模型(C)。

DeepMind 研究员 Andrew Trask 随后发推称赞:“Google 已经开源了 Federated Learning……可在数以百万计的智能手机上共享模型训练!”

让我们一起来看看使用教程:

从一个著名的图像数据集 MNIST 开始。MNIST 的原始数据集为 NIST,其中包含 81 万张手写的数字,由 3600 个志愿者提供,目标是建立一个识别数字的 ML 模型。

传统手段是立即将 ML 算法应用于整个数据集。但实际上,如果数据提供者不愿意将原始数据上传到中央服务器,就无法将所有数据聚合在一起。

TFF 的优势就在于,可以先选择一个 ML 模型架构,然后输入数据进行训练,同时保持每个数据提供者的数据是独立且保存在本地。

下面显示的是通过调用 TFF 的 FL API,使用已由 GitHub 上的“Leaf”项目处理的 NIST 数据集版本来分隔每个数据提供者所写的数字:

GitHub 传送链接:https://github.com/TalwalkarLab/leaf

# Load simulation data.
source, _ = tff.simulation.datasets.emnist.load_data()
def client_data(n):
dataset = source.create_tf_dataset_for_client(source.client_ids[n])
return mnist.keras_dataset_from_emnist(dataset).repeat(10).batch(20)
# Wrap a Keras model for use with TFF.
def model_fn():
return tff.learning.from_compiled_keras_model(
mnist.create_simple_keras_model(), sample_batch)
# Simulate a few rounds of training with the selected client devices.
trainer = tff.learning.build_federated_averaging_process(model_fn)
state = trainer.initialize()
for _ in range(5):
state, metrics = trainer.next(state, train_data)
print (metrics.loss)

除了可调用 FL API 外,TFF 还带有一组较低级的原语(primitive),称之为 Federated Core (FC) API。这个 API 支持在去中心化的数据集上表达各种计算。

使用 FL 进行机器学习模型训练仅是第一步;其次,我们还需要对这些数据进行评估,这时就需要 FC API 了。

假设我们有一系列传感器可用于捕获温度读数,并希望无需上传数据便可计算除这些传感器上的平均温度。调用 FC 的 API,就可以表达一种新的数据类型,例如指出 tf.float32,该数据位于分布式的客户端上。

READINGS_TYPE = tff.FederatedType(tf.float32, tff.CLIENTS)

然后在该类型的数据上定义联邦平均数。

@tff.federated_computation(READINGS_TYPE)
def get_average_temperature(sensor_readings):
return tff.federated_average(sensor_readings)

之后,TFF 就可以在去中心化的数据环境中运行。从开发者的角度来讲,FL 算法可以看做是一个普通的函数,它恰好具有驻留在不同位置(分别在各个客户端和协调服务中的)输入和输出。

例如,使用了 TFF 之后,联邦平均算法的一种变体:

参考链接:https://arxiv.org/abs/1602.05629

@tff.federated_computation(
tff.FederatedType(DATASET_TYPE, tff.CLIENTS),
tff.FederatedType(MODEL_TYPE, tff.SERVER, all_equal=True),
tff.FederatedType(tf.float32, tff.SERVER, all_equal=True))
def federated_train(client_data, server_model, learning_rate):
return tff.federated_average(
tff.federated_map(local_train, [
client_data,
tff.federated_broadcast(server_model),
tff.federated_broadcast(learning_rate)]))

目前已开放教程,可以先在模型上试验现有的 FL 算法,也可以为 TFF 库提供新的联邦数据集和模型,还可以添加新的 FL 算法实现,或者扩展现有 FL 算法的新功能。

据了解,在 FL 推出之前,Google 还推出了 TensorFlow Privacy,一个机器学习框架库,旨在让开发者更容易训练具有强大隐私保障的 AI 模型。目前二者可以集成,在差异性保护用户隐私的基础上,还能通过联邦学习(FL)技术快速训练模型。

最后附上 TF Dev Summit’19 上,TensorFlow Federated (TFF)的发布会现场视频:

参考链接:https://medium.com/tensorflow/introducing-tensorflow-federated-a4147aa20041

(本文为 AI科技大本营原创文章,转载请微信联系 1092722531)

干粮!手机游戏方如何安装谷歌框架?

首先说说为什么要装Google的各种框架服务还有Google Play,原因如下:

1、只有装了框架服务之后,才可能装Google Play不出现问题

2、只有装了Google Play,你才能算是真正和这个世界接轨,所有的APP都是保持同步的,更新了随时都能下载安装,特别是那些需要在网上玩的游戏(别跟我说国内的应用市场啥的,自己玩几个网络游戏就知道版本跟不上人家多痛苦了,国内这些市场更新的速度那叫一个慢,慢Google Play好几个版本)!

3、只有装了Google Play,你才能真正的下到所有的App,国内安卓市场,真正好应用都不全!

4、只有装了Google的各种服务框架,才能实现Chrome同步等等(强烈推荐Chrome浏览器,装上了Google框架服务后简直无敌了,同步了以后你能体验到什么是真正的平板、手机、电脑无缝连接)。。。还有很多好处,所以呢,总之还是强烈建议大家安装Google的各种框架服务和Google Play

但是要安装这些,不是随便下下来装就行的。(你问我为啥买的平板为啥没有预装?我只能说和谐,国行的安卓平板都没有,你懂的~)

因此,今天就来为大家详细介绍下如何为自己的手机安装谷歌框架。

我们分不同的手机品牌进行详细介绍:

1、小米、OPPO、其他厂商:谷歌安装器

推荐这款「谷歌安装器」app,通过识别机型提供最新的 Google套件,在各大应用商店搜索都可以搜索下载。

实际的安装过程也一键搞定,唯一要注意的是部分设备需要 Root权限。

2、一加、锤子:官方支持安装

对于一加手机,直接在应用市场搜索「谷歌安装器一加专版」即可。这款应用是一加与上面提到的「谷歌安装器」开发者联合开发,可以轻松获取 Google服务。

而对于锤子手机,在锤子应用市场,搜索「谷歌服务下载器」,安装后重启手机即可。

3、华为:系统自带

对于华为用户而言,可以松一口气了:目前华为手机大部分都内置Google服务框架。如果想要体验 Google地图、Google Play等应用,只需要在华为应用市场直接下载即可。

4、三星:刷机/刷港版系统,然后使用谷歌安装器

三星手机上 Root和安装框架的服务都有些复杂。所幸,对于三星手机的刷机还算简单。

简单刷机教程:点击“设置”——“关于设备”——“内部版本号”(此选项需要连续点击),开启开发者模式。

然后退出,再次回到“设置”——开发者选项,打开“USB调试”功能。(不经过上一步无法显示此选项)

最后就简单了,去应用市场搜索任意一款排名靠前的root工具,进行一键root,然后就可以使用谷歌安装器了。

如果你不希望失去保修,同时也反感国行三星众多的内置应用,不妨试试刷港版系统的方法。

港版刷机需要用到电脑,在此就简略一说,具体请自行百度。

5、Nexus:亲儿子

Nexus在中国被网友称为「Google亲儿子」,由于其不在大陆地区销售,所以目前所有安装原生 Android系统的 Nexus设备,都自带全套 Google框架和应用。

游戏AI必须有一个新的框架。谷歌发布了基于tensorflow的“多巴胺”开源框架

郭一璞 发自 凹非寺

量子位 报道 | 公众号 QbitAI

上周那个在DOTA2 TI8赛场上“装逼失败”的OpenAI Five,背后是强化学习的助推。

其实不仅仅是OpenAI Five,下围棋的AlphaGo和AlphaGo Zero、玩雅达利街机游戏的DeepMind DQN(deep Q-network),都离不开强化学习(Reinforcement Learning)。

现在,谷歌发布了一个基于TensorFlow的强化学习开源框架,名叫Dopamine

另外,还有一组Dopamine的教学colab。

和它的名字Dopamine(多巴胺)一样,新框架听上去就令人激动。

清晰,简洁,易用

新框架在设计时就秉承着清晰简洁的理念,所以代码相对紧凑,大约是15个Python文件,基于Arcade Learning Environment (ALE)基准,整合了DQN、C51、 Rainbow agent精简版和ICML 2018上的Implicit Quantile Networks。

可再现

新框架中代码被完整的测试覆盖,可作为补充文档的形式,也可以用ALE来评估。

基准测试

为了让研究人员能快速比较自己的想法和已有的方法,该框架提供了DQN、C51、 Rainbow agent精简版和Implicit Quantile Networks的玩ALE基准下的那60个雅达利游戏的完整训练数据,以Python pickle文件和JSON数据文件的格式存储,并且放到了一个可视化网页中。

另外,新框架中还有训练好的深度网络、原始统计日志,以及TensorBoard标注好的TensorFlow事件文件。

传送门

开源框架资源

Dopamine谷歌博客:

https://ai.googleblog.com/2018/08/introducing-new-framework-for-flexible.html

Dopamine github下载:

https://github.com/google/dopamine/tree/master/docs#downloads

colabs:

https://github.com/google/dopamine/blob/master/dopamine/colab/README.md

游戏训练可视化网页:

https://google.github.io/dopamine/baselines/plots.html

相关资料

ALE基准:

https://arxiv.org/abs/1207.4708

DQN(DeepMind):

https://storage.googleapis.com/deepmind-media/dqn/DQNNaturePaper.pdf

C51(ICML 2017):

https://arxiv.org/abs/1707.06887

Rainbow:

https://arxiv.org/abs/1710.02298

Implicit Quantile Networks(ICML 2018):

https://arxiv.org/abs/1806.06923

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

量子位 QbitAI · 头条号签约作者

վ’ᴗ’ ի 追踪AI技术和产品新动态

十大流行JavaScript框架概述

JavaScript是一种多范式语言,支持事件驱动,功能和命令式(包括面向对象和基于原型的)编程样式。JavaScript最初仅用于客户端。但是,如今,JavaScript也被用作服务器端编程语言。总而言之,用一个简单的句子来说-JavaScript是网络的语言。

什么是JavaScript框架,为什么要使用一个?

软件框架是一种抽象,其中可以通过其他用户编写的代码有选择地更改提供通用功能的软件。JavaScript框架是用JavaScript编写的应用程序框架,程序员可以在其中操纵功能并方便使用。

框架更适合网站设计,因此,大多数网站开发人员都喜欢它。JavaScript框架是一种工具,可以使使用JavaScript变得更加轻松和顺畅。这些框架还使程序员可以将应用程序编码为设备响应型。这种响应能力是JavaScript框架在使用高级机器语言的问题上非常流行的另一个原因。让我们看一下2021年最好的JS框架。

1.Angular

Angular是最强大,高效和开源的JavaScript框架之一。Google运行此框架,并被实现用于开发单页应用程序(SPA)。它将HTML扩展到应用程序中,并解释属性以执行数据绑定。

2.React

由Facebook创建的React框架在短时间内获得了广泛的欢迎。它用于开发和操作具有高传入流量的网页的动态用户界面。它使用了虚拟DOM,因此,将其与任何应用程序集成起来更为简单。

3.Vue.js

尽管此JavaScript框架于2016年开发,但已进入市场并通过提供各种功能证明了其价值。它的双重集成模式是创建高端SPA或单页应用程序最吸引人的功能之一。它是用于开发跨平台的非常可靠的平台。

4.Ember.js

Ember.js于2015年引入软件市场,自那时以来,它以其广泛的应用领域而受到欢迎。Ember.js的功能支持双向数据绑定,因此建立了处理复杂用户界面的可靠平台。像LinkedIn,Netflix,Nordstrom之类的流行网站,以及更多使用其网站的Ember.JS平台。

5.Meteor

Meteor的应用程序区域(也称为Meteor.js或MeteorJS)本身就是名称,因为它几乎涵盖了软件开发的重要部分,因此有所变化。该框架的用途包括重要领域,例如后端开发,数据库管理,业务逻辑和前端呈现。

6.Mithril

Mithril是一个客户端JavaScript框架,主要用于开发单页应用程序。由于没有从基类派生的函数,因此框架的实现更为简单。它体积小(<8kb gzip),速度快,并且提供开箱即用的路由和XHR实用程序。它具有一些与React类似的功能。

7.Node.js

Node.js是服务器端JavaScript运行时环境,可在跨平台上工作并且是开源的。该框架具有事件驱动的体系结构,能够驱动异步I / O。它在JavaScript运行时环境中工作,因此显示了JAVA的类似属性,例如线程,包,循环的形成。

8.Polymer

Polymer是由Google开发的开源JavaScript库,它可以创建网站的各个元素,而无需进入复杂的层次。此外,它还支持单向和双向数据绑定,因此成为了更广泛的应用领域。

9.Aurelia

Aurelia框架是JavaScript的最新版本,可用于实现任何的接口。它是用于开发功能更强大的网站的下一代框架。Aurelia的框架可以出于各种目的扩展HTML,包括数据绑定。

10.Backbone.js

它是最流行的JavaScript框架之一。理解和学习是毫不费力的。它可用于创建单页应用程序。可以编写更少的代码来帮助实现复杂的功能。

感谢阅读,如果觉得本文对你有帮助,记得点个赞再走哦~