百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

谷歌开源NSL框架:利用数据间关系训练神经网络,能生成对抗样本

bigegpt 2024-08-08 12:05 2 浏览

晓查 发自 凹非寺

量子位 出品 | 公众号 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

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

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

?'?' ? 追踪AI技术和产品新动态

相关推荐

【Docker 新手入门指南】第十章:Dockerfile

Dockerfile是Docker镜像构建的核心配置文件,通过预定义的指令集实现镜像的自动化构建。以下从核心概念、指令详解、最佳实践三方面展开说明,帮助你系统掌握Dockerfile的使用逻...

Windows下最简单的ESP8266_ROTS_ESP-IDF环境搭建与腾讯云SDK编译

前言其实也没啥可说的,只是我感觉ESP-IDF对新手来说很不友好,很容易踩坑,尤其是对业余DIY爱好者搭建环境非常困难,即使有官方文档,或者网上的其他文档,但是还是很容易踩坑,多研究,记住两点就行了,...

python虚拟环境迁移(python虚拟环境conda)

主机A的虚拟环境向主机B迁移。前提条件:主机A和主机B已经安装了virtualenv1.主机A操作如下虚拟环境目录:venv进入虚拟环境:sourcevenv/bin/active(1)记录虚拟环...

Python爬虫进阶教程(二):线程、协程

简介线程线程也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元,由线程ID、程序计数器、寄存器集合和堆栈共同组成。线程的引入减小了程序并发执行时的开销,提高了操作系统的并发性能...

基于网络安全的Docker逃逸(docker)

如何判断当前机器是否为Docker容器环境Metasploit中的checkcontainer模块、(判断是否为虚拟机,checkvm模块)搭配学习教程1.检查根目录下是否存在.dockerenv文...

Python编程语言被纳入浙江高考,小学生都开始学了

今年9月份开始的新学期,浙江省三到九年级信息技术课将同步替换新教材。其中,新初二将新增Python编程课程内容。新高一信息技术编程语言由VB替换为Python,大数据、人工智能、程序设计与算法按照教材...

CentOS 7下安装Python 3.10的完整过程

1.安装相应的编译工具yum-ygroupinstall"Developmenttools"yum-yinstallzlib-develbzip2-develope...

如何在Ubuntu 20.04上部署Odoo 14

Odoo是世界上最受欢迎的多合一商务软件。它提供了一系列业务应用程序,包括CRM,网站,电子商务,计费,会计,制造,仓库,项目管理,库存等等,所有这些都无缝集成在一起。Odoo可以通过几种不同的方式进...

Ubuntu 系统安装 PyTorch 全流程指南

当前环境:Ubuntu22.04,显卡为GeForceRTX3080Ti1、下载显卡驱动驱动网站:https://www.nvidia.com/en-us/drivers/根据自己的显卡型号和...

spark+python环境搭建(python 环境搭建)

最近项目需要用到spark大数据相关技术,周末有空spark环境搭起来...目标spark,python运行环境部署在linux服务器个人通过vscode开发通过远程python解释器执行代码准备...

centos7.9安装最新python-3.11.1(centos安装python环境)

centos7.9安装最新python-3.11.1centos7.9默认安装的是python-2.7.5版本,安全扫描时会有很多漏洞,比如:Python命令注入漏洞(CVE-2015-2010...

Linux系统下,五大步骤安装Python

一、下载Python包网上教程大多是通过官方地址进行下载Python的,但由于国内网络环境问题,会导致下载很慢,所以这里建议通过国内镜像进行下载例如:淘宝镜像http://npm.taobao.or...

centos7上安装python3(centos7安装python3.7.2一键脚本)

centos7上默认安装的是python2,要使用python3则需要自行下载源码编译安装。1.安装依赖yum-ygroupinstall"Developmenttools"...

利用本地数据通过微调方式训练 本地DeepSeek-R1 蒸馏模型

网络上相应的教程基本都基于LLaMA-Factory进行,本文章主要顺着相应的教程一步步实现大模型的微调和训练。训练环境:可自行定义,mac、linux或者window之类的均可以,本文以ma...

【法器篇】天啦噜,库崩了没备份(天啦噜是什么意思?)

背景数据库没有做备份,一天突然由于断电或其他原因导致无法启动了,且设置了innodb_force_recovery=6都无法启动,里面的数据怎么才能恢复出来?本例采用解析建表语句+表空间传输的方式进行...