写点什么

谷歌开源基于 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:097635

评论

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

运维常见问题及排查思路

编程随想曲

运维

初步了解MyBatis

Java收录阁

mybatis

目标:2020年学会写文章

wiflish

周日福利来了

志学Python

Python 福利 python教程 python视频教程

如何优雅的接收正在运行古董代码?

冰临深渊

项目管理 架构

每日一道python面试题 - Python的函数参数传递

志学Python

Python 面试 爬虫 python 爬虫 python3.x

GroupBy 用法的三重境界,面试终结者

Hyun

数据库 sql 大数据 性能优化 数据分析

爬虫(108)Python 3.8的超酷新功能(接近一万字,请耐心享用,而且建议收藏)

志学Python

python 爬虫 python3.x python升级

太极宗师与华晨宇

伯薇

水平思考力 电视剧 综艺节目 歌手

爬虫(107)Python 3.7的超酷新功能(接近一万字,请耐心享用,而且建议收藏)

志学Python

Python 最佳实践 python 爬虫 python3.7 python升级

kettle(Pentaho Data Integration) 使用"最佳"实践

稻草鸟人

Java kettle

游戏夜读 | 2020周记(4.3-4.10)

game1night

Windows Terminal添加右键菜单

simon

Windows Terminal 右键菜单 终端 开发者工具 命令行

3NF建模&维度建模

常海峰

周报 01|多点分享,少点创作

强劲九

学习 读书

高仿瑞幸小程序 01 初建项目,引入Vant Weapp

曾伟@喵先森

小程序 微信小程序 大前端 vant

Flutter引擎源码解读-Flutter是如何在iOS上运行起来的

Geek_70xtik

flutter ios 移动应用 跨平台 dart

每天打卡python面试题 - 在一行中捕获多个异常(块除外)

志学Python

Python 面试 python 爬虫 python3.7

​成功的人,都是 “狠角色”

非著名程序员

程序员 提升认知 成功学 自律

MyBatis核心功能介绍

Java收录阁

mybatis

Go语言获取程序各类资源的绝对路径的方法

良少

Python 路径 动态 绿色 Go 语言

用行动解决情绪,情绪永远是累赘

熊斌

情绪控制 团队协作

什么是 MQ ?

itfinally

系统设计 MQ

C++中glog源码剖析以及如何设计一个高效 log模块

泰伦卢

c++ 编程语言

我愿沉迷于学习,无法自拔(二)

孙瑜

深度思考 个人成长

关于5G RCS的产品猜想

机器鸟

Hive 中的 GroupBy, Distinct 和 Join

tkanng

sql 大数据 hadoop hive

Kafka系列第2篇:安装测试

z小赵

大数据 kafka 推荐 实时计算

Kafka系列第1篇:Kafka是什么?它能干什么?

z小赵

大数据 kafka 推荐 实时计算

如何写排版优雅简洁的文章?

池建强

写作 排版

这里有一个慢 SQL 查询等你来优化

程序猿石头

MySQL 数据库 性能优化 后端

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