写点什么

谷歌开源基于 TensorFlow 的神经结构学习框架 NSL,可用于图数据训练

  • 2019-09-05
  • 本文字数:2111 字

    阅读完需:约 7 分钟

谷歌开源基于TensorFlow的神经结构学习框架NSL,可用于图数据训练

我们很高兴能够介绍 TensorFlow 中的神经结构学习(Neural Structured Learning in TensorFlow),这是一套易于上手的框架,新手以及高级开发人员都能利用它训练具有结构化信号的神经网络。神经结构学习(NSL)可用于构建精确且健壮的视觉与语言理解及预测模型。



目前,众多机器学习任务得益于结构化数据的支持,这类数据当中包含丰富的样本间关系信息。例如,建模引文网络、知识图推理以及句子语言结构推理,乃至分子指纹学习等,都需要通过一套模型学习结构化输入信号,而非逐一分析单个样本,进而明确给出结构化(例如以图形形式)或者隐式(例如对抗性示例)推理结果。在训练期间采用结构化信号,也使得开发人员能够获得更高的模型精度,这一点在标记数据量相对较少显得尤为重要。结构化信号的训练也能够带来更强大的模型成果。目前,谷歌公司已经开始广泛采用这项技术提高模型性能,例如学习图像语义嵌入等场景。


神经结构学习(NSL)是一套开源框架,负责利用结构化信号训练深度神经网络。它能够实现神经图学习,使得开发人员得以利用图表训练神经网络。这些图表可以来自多种来源,例如知识图、医疗记录、基因组数据或者多模关系(例如图像-文本对)等。NSL 还可延伸至对抗学习领域,其中各输入实例间的结构以对抗性扰动方式动态构建而成。


NSL 帮助 TensorFlow 用户轻松将各类结构化信号结合起来,共同用于训练神经网络,同时适用于多种不同的学习场景,包括监督、半监督与无监督(表示)等设置。

神经结构学习(NSL)的工作原理


在神经结构学习(NSL)当中,结构化信号——无论是经过明确定义的图形,还是隐式学习性质的对抗性实例——都能够用于规范神经网络的训练。这将引导模型学会做出准确的预测(通过监督损失最小化),同时保证来自同一结构的输入之间具有相似性(通过相邻损失最小化,见上图)。这项技术具有通用性质,可用于任意神经架构,包括前馈神经网络、卷积神经网络以及递归神经网络等等。

利用神经结构学习(NSL)创建模型

利用 NSL,我们可以构建起模型,并确保其轻松直接地使用结构化信号。对于给定的图形(作为显式结构)以及训练亲本,NSL 提供一款专用工具,可处理这些示例并将其整合至 TFRecords 中以进行下游训练:


python pack_nbrs.py --max_nbrs=5 \labeled_data.tfr \unlabeled_data.tfr \graph.tsv \merged_examples.tfr 
复制代码


接下来,NSL 提供“环绕”该定制模型的 API,用于消费已处理示例并实现图形正则化。下面我们直接来看代码示例。


import neural_structured_learning as nsl# Create a custom model — sequential, functional, or subclass. base_model = tf.keras.Sequential(…)# Wrap the custom model with graph regularization. graph_config = nsl.configs.GraphRegConfig( neighbor_config=nsl.configs.GraphNeighborConfig(max_neighbors=1)) graph_model = nsl.keras.GraphRegularization(base_model, graph_config)# Compile, train, and evaluate. graph_model.compile(optimizer=’adam’,  loss=tf.keras.losses.SparseCategoricalCrossentropy(), metrics=[‘accuracy’]) graph_model.fit(train_dataset, epochs=5) graph_model.evaluate(test_dataset)
复制代码


只需要不到 5 千行额外代码(是的,包括注释!),我们就获得了一套能够在训练期间利用图形信号的神经模型。根据以往经验,使用图形结构将确保模型通过标记程度较低的数据进行训练,且不致损失太多准确率(例如,相较于原始监督训练,只损失 10%甚至 1%准确率)。

如果没有显式结构,该怎么办?

如果没有显式结构(例如图形),或者无法将其作为输入内容,该怎么办?NSL 为开发人员提供了利用原始数据构建图形的工具;此外,NSL 还提供 API 将对抗性示例“引导”为隐式结构化信号。利用对抗性示例对模型进行混淆性训练,通常会使模型对小幅输入扰动表现出更强的健壮性。我们将通过以下代码救命,了解 NSL 如何通过对抗性示例进行训练。


import neural_structured_learning as nsl# Create a base model — sequential, functional, or subclass. model = tf.keras.Sequential(…)# Wrap the model with adversarial regularization. adv_config = nsl.configs.make_adv_reg_config(multiplier=0.2, adv_step_size=0.05) adv_model = nsl.keras.AdversarialRegularization(model, adv_config)# Compile, train, and evaluate. adv_model.compile(optimizer=’adam’, loss=’sparse_categorical_crossentropy’, metrics=[‘accuracy’]) adv_model.fit({‘feature’: x_train, ‘label’: y_train}, epochs=5) adv_model.evaluate({‘feature’: x_test, ‘label’: y_test})
复制代码


只需要不足 5 行额外代码(同样包括注释在内),我们就获得了一套神经模型。该模型能够利用具有隐式结构的对抗性示例完成训练。根据以往经验,在训练中未使用对抗性示例的模型,往往会在遭遇恶意(且人类无法检测到)扰动等输入内容时发生显著的准确率损失(例如下降 30%)。


试用 NSL 可以访问


https://www.tensorflow.org/neural_structured_learning/


原文链接:


https://medium.com/tensorflow/introducing-neural-structured-learning-in-tensorflow-5a802efd7afd


2019-09-05 11:097857

评论

发布
暂无评论
发现更多内容

第二届开发者社区【金码奖】,揭晓了!

京东科技开发者

开发者 开发者社区

LeetCode题解:64. 最小路径和,动态规划,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

夺命剪刀脚(死锁)

鲁米

方法论 死锁

Superset 兼容ADB(AnalyticDB-MySQL)

data_y

Python MySQL Apache Superset

Midway Serverless 发布 2.0,一体化让前端研发再次提效

Serverless Devs

Serverless 云原生 大前端

火爆!GitHub 标星 144k 的前后端学习路线

沉默王二

学习 后端

Python yaml 使用的包

HoneyMoose

法大大完成D轮9亿元融资,腾讯领投

人称T客

深入分析mysql为什么不推荐使用uuid或者雪花id作为主键

xcbeyond

MySQL MySQL优化 3月日更

如何通过XMind 实践OKR 工作法

博文视点Broadview

“七大属性加持,三个全新升级组件”这个高性能利器有点厉害

华为云开发者联盟

数据库 数据湖 Clickhouse 华为云 集群

马特量化交易机器人系统开发网格策略

薇電13242772558

对象存储与HashData多云战略

酷克数据HashData

正则表达式.06 - 断言

insight

正则表达式 3月日更

你的决定我做主——锚定效应

Justin

心理学 28天写作 游戏设计

醒一醒,讲到 ZooKeeper 的选举机制了

HelloGitHub

Java zookeeper ZooKeeper原理

数据分析利器之Excel功能篇

小飞象@木木自由

硬核干货丨借助多容器Pod,轻松扩展K8S中的应用

Rancher

Redis工具收费后新的开源已出现

happlyfox

学习 工具软件 28天写作 3月日更

Everything is Serverless,从开源框架对比说起

华为云开发者联盟

云计算 开源 Serverless 云原生 无服务器

PostgreSQL高校数据库课程改革系列活动

PostgreSQLChina

数据库 postgresql 开源 软件 开源社区

使用 Flink 前需要知道的 10 个『陷阱』

Apache Flink

flink

《她说》——我们自出版的第一本书

张凯峰

中国石油数字化转型提速 HashData助力梦想云建设

酷克数据HashData

Python 通过命令行安装包的时候 pip 提示错误

HoneyMoose

(28DW-S8-Day19) 以太坊是什么

mtfelix

28天写作

历史技术栈体系即将崩溃,我们如何应对?

VoltDB

数据库 5G 边缘计算 VoltDB

问题剖析之消息队列的架构设计

Kylin

读书笔记 消息队列架构 3月日更

有道 Kubernetes 容器API监控系统设计和实践

有道技术团队

Kubernetes 容器 分布式

makefile:带你了解一种常用于GNU gcc编译的工具语言

华为云开发者联盟

编译器 LiteOS makefile 语言 GNU

Python 中级知识之装饰器,滚雪球学 Python

梦想橡皮擦

28天写作 3月日更

谷歌开源基于TensorFlow的神经结构学习框架NSL,可用于图数据训练_AI&大模型_Sujith Ravi_InfoQ精选文章