QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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

评论

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

Redis不仅仅是缓存,还是……

码农译站

数据库 redis 缓存 关系型数据库 非关系型数据库

ssh连接不上Linux怎么办

HKBGP

Linux

架构的直观展示

鲁米

架构视图 4+1

40000美元之后,比特币高位震荡加剧,是买?是卖?还是持有?

CECBC

比特币

产品经理训练营 - 第一章 必做作业

Denny-xi

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

产品经理训练营 0 期作业第一章作业

郭郭

“战复不胜”的产品经理

产品经理训练营

量化策略交易软件开发系统源码

什么是产品经理?——课程总结

Deborah

Docker发布开发团队2021年三个首选方向;工信部印发《工业互联网创新发展行动计划(2021-2023 年)》

京东科技开发者

云计算

产品实战作业(Job Model)

晓豪

迷茫 产品经理训练营 BTA 邱岳

微众银行区块链:领跑产业应用落地 推进开源生态繁荣

CECBC

区块链技术

Soul网关源码阅读(七)限流插件初探

Java 网关 限流

Task01-产品类JD对比

遠景

产品 字节跳动 产品经理 JD

合约跟单系统APP开发|合约跟单软件开发

系统开发

对比:微服务VS单体架构

xcbeyond

微服务 单体架构 28天写作

面对疫情,我们正在行动!

anyRTC开发者

uni-app android 音视频 WebRTC 在线教育

花了19998买的学习教程!Android跨进程通信导论,技术详细介绍

欢喜学安卓

android 程序员 面试 移动开发

第一章作业

转转

Nginx 最常用的两个功能:负载均衡和缓存

李尚智

Java nginx 架构 并发

有原则,方得始终!

鲁米

SOLID 设计原则

Android入门你值得拥有!史上最通俗计算机网络分层详解,含BATJM大厂

欢喜学安卓

android 程序员 面试 移动开发

张红珊——第一节课作业

zzz

初探架构,随笔整理

鲁米

软件架构

“公测”成绩亮眼 数字人民币有望重构支付体系

CECBC

数字红包

四,编程范式

鲁米

编程范式

万字解释!在咸鱼被疯抢的网络协议核心彩板手册已曝光!

996小迁

Java 编程 架构 面试 网络协议

量化交易自动炒币软件开发系统

2021年1月初Java开发从小公司跳槽阿里制胜关键:狂刷17套大厂真题

Java架构追梦

Java 阿里巴巴 架构 面试

Elasticsearch 横向扩容

escray

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

UML是表达思想的工具

鲁米

UML

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