谷歌推出新的开源神经结构学习框架NSL

2019年09月04日 由 KING 发表 739537 0

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


NSL与TensorFlow机器学习平台合作,无论你是新手菜鸟还是行业大牛,只要你从事机器学习行业都可以利用平台学习。NSL可以为计算机视觉建立模型,执行NLP,并通过图形数据集进行预测。TensorFlow工程师今天在一篇博客中说道:“当数据量相对较小时,利用结构化信号可以使开发人员获得更高的模型精度,进而构建更强大的模型。这项技术已成功应用于谷歌的学习图像语义嵌入领域”。


新框架还包括一些工具,帮助开发人员构造数据和api,以便用很少的代码创建对抗性培训样本。NSL可以使用监督、半监督或零监督模式进行训练,以创建在训练过程中使用图形信号进行规范化的模型,在某些特定的情况下,需要的代码还不到5行。



神经结构学习(NSL)如何工作


在NSL框架中,图形数据和隐性学习对抗样本被定义为结构化信号,这些信号被用来调整神经网络的训练模式和强迫模型进行准确的预测,同时,还要保持输入相同的结构之间的相似性。该技术具有普遍的适用性,可应用于任意神经结构网络里,如前馈神经网络、卷积神经网络和递归神经网络。



使用神经结构学习(NSL)创建模型


在NSL开源之后,利用结构化信号来建立一个模型就会变得非常简单。给定一个图形(作为显式结构)和训练样本,NSL就会提供了一个工具来处理这些样本,并将它们合并到TFRecord中。


具体代码如下:



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)

使用NSL只需要少于5行的额外代码(包括注释)就可以得到一个神经模型和图形信号的结合体,根据经验,使用图形结构可以让模型使用较少的标记数据进行训练同时又不会损失太多的精度。



如果没有显式结构怎么办?


如果显式结构不可用或不作为输入给出,该怎么办?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%。


原文链接:


https://medium.com/tensorflow/introducing-neural-structured-learning-in-tensorflow-5a802efd7afd

欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
写评论取消
回复取消