中国卓越技术团队访谈录读者调查,2022年采访嘉宾由你决定! 了解详情
写点什么

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

  • 2019 年 9 月 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 年 9 月 05 日 11:097051

评论

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

一篇读懂https的本质、证书验证过程以及数据加密

梁龙先森

大前端 https

第五次作业

Geek_79e983

翻译:《实用的Python编程》03_02_More_functions

codists

Python

数据产品经理实战-用户运营体系搭建

第519区

算法 数据产品 数据运营

面试系列二:精选大数据面试真题JVM专项-附答案详细解析

五分钟学大数据

大数据 28天写作 3月日更

谁才是一级方程式赛车中的最强车手?

亚马逊云科技 (Amazon Web Services)

【管理笔记16】行销市场区隔化与目标市场

俊毅

dubbo 源码 v2.7 分析:核心机制(一)

程序员架构进阶

架构 源码分析 dubbo 七日更 28天写作

星环科技Sophon Edge边缘计算平台持续赋能千家万业

星环科技

VR,正在上演一出“风月宝鉴”

脑极体

产品经理训练营 - 第四章作业 (二)

joelhy

产品经理训练营

阿里巴巴Druid,轻松实现MySQL数据库加密!

王磊

Java springboot Druid

小心你的个人信息——GitHub 热点速览 v.21.09

HelloGitHub

GitHub 开源 终端工具 社交

敏捷, 是一种信仰

boshi

敏捷 七日更 28天写作

Kubelet从入门到放弃:拓扑管理(上)

DCOS

Linux Kubernetes 云原生 kubelet

第五周 继续文档的一些细节

小匚

产品经理 产品经理新人如何落地 产品经理训练营

Elasticsearch Search Options 搜索参数

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

大厂动态规划面试汇总,教你如何修炼内功

盼盼编程

算法 动态规划 数据结构和算法 笔试

左手画条龙右手画彩虹——认知负荷理论

Justin

心理学 28天写作 游戏设计

FindBugs:Java 静态代码检查

少平

代码审查

手写一个LRU缓存淘汰算法

Simon郎

Java 大数据 缓存 LRU 数据结构与算法

Docker 常用命令,还有谁不会?

xcbeyond

Docker 常用命令 28天写作

这个新春,你的云端安全守卫来咯 | 新服务上线

亚马逊云科技 (Amazon Web Services)

如果重来,结果就会好吗?「Day 10」

道伟

28天写作

肝了很久,冰河整理出这份4万字的SpringCloud与SpringCloudAlibaba学习笔记!!

冰河

微服务 高可用 高并发 冰河技术 SpringCloud Alibaba

vivo 官网资源包适配多场景的应用

vivo互联网技术

低代码 无服务器云函数

Java 中各种DTO,POJO 等的概念

少平

「产品经理训练营」作业 05:知识星球加入星球流程图

狷介

产品经理训练营

关于搜商的一点记录「Day 9」

道伟

28天写作

产品经理训练营作业 04

KingSwim

产品训练营 - 第五周 - 作业

邹小胖

产品经理训练营

撑起瞬时千亿交易额的云数据库是怎么炼成的?

撑起瞬时千亿交易额的云数据库是怎么炼成的?

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