TensorFlow中的神经结构化学习
**神经结构化学习(NSL)**是一种新的学习范式,除了特征输入外,还利用结构化信号来训练神经网络。结构可以是显式的,如图所表示[1,2,5],也可以是隐式的,如对抗性扰动所诱导的[3,4]。
结构化信号通常用于表示样本之间的关系或相似性,这些样本可能是有标签的,也可能是无标签的。在神经网络训练过程中利用这些信号可以同时利用有标签和无标签数据,这可以提高模型的准确性,特别是在标记数据量相对较小的情况下。此外,通过对抗性扰动生成的样本进行训练的模型已被证明能够抵御恶意攻击,这些攻击旨在误导模型的预测或分类。
NSL可推广到神经图学习[1]以及对抗性学习[3]。TensorFlow中的NSL框架为开发人员提供了以下易于使用的API和工具,用于利用结构化信号训练模型:
-
Keras API,支持使用图(显式结构)和对抗性扰动(隐式结构)进行训练。
-
TF操作和函数,在使用较低级别的TensorFlow API时支持结构化训练。
-
工具,用于构建图和构造用于训练的图输入。
NSL框架设计灵活,可用于训练任何类型的神经网络。例如,前馈、卷积和循环神经网络都可以使用NSL框架进行训练。除了监督学习和半监督学习(低监督量)外,NSL理论上还可以推广到无监督学习。结构化信号的整合仅在训练期间进行,因此服务/推理工作流的性能保持不变。请查看我们的教程,了解NSL的实际应用。
入门
您可以通过运行以下命令安装预构建的NSL pip软件包:
pip install neural-structured-learning
有关如何在各种环境中将NSL作为软件包安装或从源代码构建的更详细说明,请参阅安装指南
请注意,NSL需要1.15或更高版本的TensorFlow。NSL还支持TensorFlow 2.x,但v2.1版本除外,该版本包含一个与NSL不兼容的错误。
视频和Colab教程
通过观看我们在YouTube上的视频系列,快速入门NSL!它全面概述了该框架,并讨论了利用结构化信号学习的几个方面。
我们还创建了基于Colab的动手教程,让您可以交互式地探索NSL。以下是一些例子:
您可以在examples目录下找到更多示例和教程。
为NSL做贡献
欢迎并非常感谢您的贡献 - 有几种方式可以为TF神经结构化学习做出贡献:
-
案例研究:如果您对应用NSL感兴趣,可以考虑将您的使用方法整理成教程、新数据集或示例模型,供他人用于实验和/或开发。examples目录可能是此类贡献的好去处。
-
产品卓越性:如果您对提高NSL的产品卓越性和开发者体验感兴趣,最好的方法是克隆此存储库,直接在本地存储库的实现中进行更改,然后向我们发送拉取请求以集成您的更改。
-
新算法:如果您对开发NSL的新算法感兴趣,最好的方法是研究NSL库的实现,并考虑对现有实现进行扩展(或替代方法)。如果您有新算法的提议,我们建议从在research目录中构建项目开始,并包含一个colab笔记本来展示新功能。如果您在自己的存储库中开发新算法,我们很乐意在此存储库中展示使用NSL的学术出版物和/或存储库的指向。
请务必查看贡献指南。
研究
有关神经结构化学习的研究项目,请参阅我们的research目录:
精选用例
请查看usage page,了解更多关于NSL在开源社区中的讨论和使用情况。
问题、疑问和反馈
请使用GitHub issues提交问题、错误和功能请求。对于问题,请将它们直接发送到Stack Overflow,使用"nsl"标签。对于反馈,请填写此表单;我们很乐意听取您的意见。
发布说明
请查看release notes了解详细的版本更新。