五行代码用图提升模型表现,TensorFlow开源NSL神经结构学习框架

作者: 一鸣、李亚洲 2019-09-04 15:07:15

 今日,谷歌 TensorFlow 宣布推出神经结构学习(NSL)开源框架,它使用神经图学习方法来训练带有图和结构化数据的神经网络。

五行代码用图提升模型表现,TensorFlow开源NSL神经结构学习框架

据谷歌 TensorFlow 博客介绍,NSL 是一个新手和高级开发人员都可以用来训练具有结构化信号神经网络的简易框架,可用于构建精确且稳健的视觉、语言理解和预测模型。

  • 项目地址:https://github.com/tensorflow/neural-structured-learning

结构化数据包含样本之间丰富的关系信息,许多机器学习任务都得益于此。例如,建模引用网络、句子语言学结构的知识图推断与推理,以及学习分子指纹,这些都需要模型来学习结构化输入,而不只是个别样本。

这些结构可以是明确给出的(例如,作为图形),或者隐式推断的(例如,作为对抗性示例)。在训练阶段利用结构化信号可以使开发人员获得更高的模型准确度,尤其是当标记数据量相对较小时。谷歌的研究表明,使用结构化信号进行训练也可以带来更稳健的模型。

五行代码用图提升模型表现,TensorFlow开源NSL神经结构学习框架

图网络学习的一般流程。

使用这些技术,谷歌极大的提升了模型性能,例如学习图像语义嵌入。

神经结构学习(NSL)是一种用于训练具有结构化信号深度神经网络的开源框架。它实现了谷歌在论文《Neural Graph Learning: Training Neural Networks Using Graphs》中介绍的神经图学习,使开发人员能够使用图训练神经网络。

这里的图可以是多样的,例如知识图、医疗记录、基因组数据或多模式关系(例如,图像 - 文本对)。此外,NSL 还可以应用到对抗性学习,也就是说输入样本之间的结构可以是使用对抗性扰动动态构建的。

NSL 让 TensorFlow 用户能够轻松地结合各种结构化信号来训练神经网络,且适用于不同的学习场景:监督、半监督和无监督(表示)设置。

NSL 如何工作

在 NSL 框架中,结构化信息(如可以定义为图的数据或隐性的对抗样本),都可以被用来归一化神经网络的训练,使得模型学习精确地进行预测(通过最小化监督损失)。同时,保证从同一种结构中的所有输入保持同样的相似度(通过最小化近邻损失)。这种技术是可以泛化的,可以使用在神经网络架构上,如前向神经网络、卷积神经网络和循环神经网络等。

五行代码用图提升模型表现,TensorFlow开源NSL神经结构学习框架

NSL 的基本架构。

用 NSL 建立一个模型

有了 NSL,建立一个使用结构化数据的模型就会很容易,而且非常直观。给定一个图(有具体结构)和训练样本,NSL 提供了相关的工具,用于将这些样本输入到 TFRcords 中,用于降采样操作。

具体代码如下,可以使用相关的命令行工具将图和数据进行输入:

  1. python pack_nbrs.py --max_nbrs=5 \ 
  2. labeled_data.tfr \ 
  3. unlabeled_data.tfr \ 
  4. graph.tsv \ 
  5. merged_examples.tfr 

之后,NSL 提供了一些 API,可以将定制化的模型「打包起来」,将处理过的样本输入进去,使用图结构进行归一化操作。以下为具体代码:

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

只需要额外的 5 行代码(包括注释),NSL 就可以将一个神经模型和图信号结合起来。从数据上来说,使用图结构可以让模型在训练中使用更少的标注数据,而且不会损失太多的准确率(和原有的监督学习相比只少 10% 甚至是 1%)。

使用没有显式结构的图进行训练

如果没有显形结构的图、或者不是作为输入的情况下,NSL 怎么训练呢?NSL 提供了相关的工具,用于从原始数据中建立一个图。另外,NSL 提供了相关的工具,用于从隐性结构信号中「推导」出对抗样本。对抗样本用于故意诱导模型,使得训练出的模型对于小的输入扰动更为鲁棒。以下为相关代码:

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

通过少于额外 5 行代码(包括注释),就能获得一个使用带有隐性结构对抗样本训练的神经模型。根据经验,在没有对抗性样本的情况下,当将具有恶意但人类无法检测出的扰动数据添加到输入时,模型会遭受显著的准确度损失(例如,低 30%),加入对抗样本进行训练则可以避免这样的问题。

代码 开发 开源
上一篇:市场营销人员是时候拥抱人工智能了 下一篇:俄机器人宇航员将携带3D打印的骨组织样本返回地球
评论
取消
暂无评论,快去成为第一个评论的人吧

更多资讯推荐

Excel狂魔?单元格做计算机视觉:人脸检测、OCR都不在话下

计算机视觉是什么?过于专业,一步劝退?在普通人看来,计算机视觉是软件开发者才能涉足的领域,需要用到很多专业的框架,普通人只能围观。但 GitHub 上的一个项目似乎颠覆了我们的认知。

佚名 ·  4天前
独家下载!阿里如何用 AI 写代码?

作为今年阿里经济体前端委员会的四大技术方向之一,前端智能化方向一被提及,就不免有人好奇:前端结合 AI 能做些什么,怎么做,未来会不会对前端产生很大的冲击等等。本篇文章将围绕这些问题,以「设计稿自动生成代码」场景为例,从背景分析、竞品分析、问题拆解、技术方案等几个角度切入,细述相关思考及过程实践。

妙净、波本 ·  4天前
2020年,比较适合AI的5种编程语言

AI系统的开发必须有计算机代码,而计算机程序的开发有不同类型的编程语言可以选择。本文分析哪些编程语言最适合你的人工智能或机器学习用例开发。

CSDN App ·  2020-02-13 16:18:50
代码开源!超好用的《机器学习实用指南》第二版终于来了

早在去年的这个时候,红色石头就发文给大家推荐过一本非常棒的机器学习实用指南书籍《Hands-On Machine Learning with Scikit-Learn & TensorFlow》

Author 红色石头 ·  2020-02-11 10:30:32
从工具选择到团队沟通,看ML工程师一步步打造生产级机器学习

为了让机器学习为用户带来真正的价值,我们需要将其部署到生产系统中。人工智能销售软件开发公司 Toucan AI 的 ML 工程师 Marifel 介绍了他们在打造生成级机器学习时所考虑的一些问题,希望这些经验能为你的工作带来帮助。

机器之心 ·  2020-02-06 16:55:02
我花了两年,从不懂Python变成了AI工程师

有一位小哥,从不知道Python到找到AI工程的工作,用时两年。他的文章在网上获得了5000多条点赞。

赖可 ·  2020-01-23 15:26:40
阿里开源MNNKit:基于MNN的移动端深度学习SDK,支持安卓和iOS

近日,阿里开源了基于 MNN 引擎的项目 MNNKit,面向安卓和 iOS,以 SDK 的方式提供 AI 端侧推理能力。开发者不需要了解算法细节就可以直接使用。

一鸣、Jamin ·  2020-01-23 15:08:02
3行代码提速模型训练:这个算法让你的GPU老树开新花

百度和Nvidia研究院结合N卡底层计算优化,提出了一种有效的神经网络训练加速方法,不仅是预训练,在全民finetune BERT的今天变得异常有用。

夕小瑶 ·  2020-01-21 22:23:18
Copyright©2005-2020 51CTO.COM 版权所有 未经许可 请勿转载