谷歌推出TensorFlow新工具:只需添加5行代码,就能提高模型准确度和鲁棒性

2019 年 9 月 4 日 量子位
晓查 发自 凹非寺
量子位 出品 | 公众号 QbitAI

今天,谷歌推出了新开源框架——神经结构学习(NSL),它使用神经图学习方法,来训练带有图(Graph)和结构化数据的神经网络,可以带来更强大的模型。

现在,通过TensorFlow就能获取和使用。

NSL有什么用?过去我们使用单独的图片来训练计算机视觉神经网络,这些训练样本之间彼此是孤立的,然而样本之间包含着丰富的关系信息。

如果用上这些数据的结构化信息,就能实现更高的模型精度,或者用更少的样本来训练模型,特别是在标记样本数量相对较少的情况。

另外,NSL也能用于抵御对抗攻击,因为对抗样本往往是在原来样本上做的一种微扰,利用这一层关系,可以提高模型在对抗攻击下的鲁棒性。

谷歌表示,这种NSL技术是通用的,可以应用于任意神经架构,包括前馈神经网络、CNN和RNN。NSL可以为计算机视觉模型、NLP训练模型,并在医疗记录或知识图谱等图形化数据集上进行预测。

谷歌已经将这项技术用于研究中,在今年2月发表的一篇学习图像语义嵌入的文章中,谷歌用它来提高模型的精度。

NSL原理

NSL用到了训练样本之间的结构化信号,它通常用于表示标记或未标记的样品之间的关系或相似性。

这种结构化信号有时是以图的方式显式地包含在数据集中,有时是通过人为构造出来的,前面说到的用微扰生成对抗攻击样本,就是一种隐式表达结构化信号的方式。

如何让结构化信号包含在神经网络之中呢?2018年,谷歌在提交的一篇关于“神经图学习”的论文中,构造了一种考虑数据结构关系的损失函数。

这个损失函数不仅包含常规的监督学习损失项,还引入了一项最近邻损失,如下图所示。通过在训练中让后一项最小化,来保持来自同一结构的输入之间的相似性。


使用方法

在TensorFlow中使用NSL,首先需要安装虚拟环境,设置完虚拟环境后,用pip安装:

pip install --upgrade neural_structured_learning

使用NSL,让我们用结构化信号构建模型变得简单而直接。对于给定图(显式结构)和训练样本的情况,NSL提供了一个工具来处理这些样本并将其组合到TFRecords中进行接下来的训练:

python pack_nbrs.py --max_nbrs=5 \
labeled_data.tfr \
unlabeled_data.tfr \
graph.tsv \
merged_examples.tfr 

对于用图表示的结构信号的数据,调用NSL中的API,只需添加不超过5行代码就可以训练一个新的神经网络模型。

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)

这种方法可以使用较少标记的数据进行训练,而不会损失太多精度,一般不超过原始监督数据的10%甚至1%。

然而大部分数据是没有图作为显式结构信号的,这种情况应该怎么办?谷歌在NSL中提供了从原始数据构建图形的工具,NSL通过API构造对抗样本,以此作为隐式结构信号。

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%。

传送门

TensorFlow介绍页面:
https://www.tensorflow.org/neural_structured_learning/

代码地址:
https://github.com/tensorflow/neural-structured-learning

直播 | 揭秘最强中文NLP预训练模型

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

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

喜欢就点「在看」吧 ! 


登录查看更多
0

相关内容

神经结构学习(NSL)是由谷歌推出的一套开源框架,负责利用结构化信号训练深度神经网络。它能够实现神经图学习,使得开发人员得以利用图表训练神经网络。这些图表可以来自多种来源,例如知识图、医疗记录、基因组数据或者多模关系(例如图像 - 文本对)等。NSL 还可延伸至对抗学习领域,其中各输入实例间的结构以对抗性扰动方式动态构建而成。
专知会员服务
44+阅读 · 2020年3月6日
【Amazon】使用预先训练的Transformer模型进行数据增强
专知会员服务
56+阅读 · 2020年3月6日
《强化学习—使用 Open AI、TensorFlow和Keras实现》174页pdf
专知会员服务
136+阅读 · 2020年3月1日
谷歌机器学习速成课程中文版pdf
专知会员服务
143+阅读 · 2019年12月4日
官方 | 从机器翻译到阅读理解,一文盘点PaddlePaddle九大NLP模型
机器学习算法与Python学习
8+阅读 · 2019年4月13日
基于TensorFlow的深度学习实战
七月在线实验室
9+阅读 · 2018年4月25日
【谷歌推出TFGAN】开源的轻量级生成对抗网络库
GAN生成式对抗网络
3+阅读 · 2017年12月16日
A Comprehensive Survey on Graph Neural Networks
Arxiv
21+阅读 · 2019年1月3日
Arxiv
19+阅读 · 2018年10月25日
VIP会员
Top
微信扫码咨询专知VIP会员