如有理解不当,请指正, 谢谢.
原文链接:https://arxiv.org/pdf/1910.02481v2.pdf
GitHub 源码:https://github.com/gblackout/NLIL
参考:
摘要
本文提出一个可微分的归纳逻辑推理程序设计 ( Inductive Logic Programming,ILP ) 框架 —— 神经网络逻辑归纳学习 ( Neural Logic Inductive Learning,NLIL ) 来学习一阶逻辑规则 ( 逻辑范式 ) .
Introduction
深度学习模型在行为和决策过程中缺乏可解释性,并且在训练时需要大量数据支撑. 不过,以一阶逻辑 ( First-order logic ) 形式存在的逻辑程序设计方法可以以显式符号结构发现和表达知识,缓解深度学习可解释性差的问题.
- 传统的 ILP 方法依赖于硬匹配(hard matching)和离散逻辑(discrete logic),对模糊或噪声数据 0 容忍度. 可微分 ILP 模型将将神经网络与基于逻辑的计算结合起来,如正向链接(forward-chaining)∂ILP 方法,使用预先定义的模板构造规则,采用留出法(held-out set)对模板进行评估. 但一般的 ILP 方法都会涉及到 NP 难问题:
P1: 规则搜索空间会随规则长度的增长而呈指数级增大;
P2:变量绑定(Variable Binding)问题:在分配由谓词共享的逻辑变量时,参数的数量呈指数增长;
P3:评估公式时所需的规则实例化数量随数据大小呈指数增长.
为了缓解 NP 难问题,许多方法限制搜索路径长度在 3 之内,并借助基于模板的变量分配,但这限制了规则的表达性. 且大多数方法都局限于少于 10 个关系和少于 1k 个实体的小规模知识库.
- 多跳推理(Multi-reasoning)方法可以完成知识库补全任务,如 NeuralLP 方法,可以通过搜索实体间关系路径完成知识推理任务. 这些方法可以利用 ILP 规则进行解释,即实体间的关系路径可以等价为一个类链一阶逻辑规则 ( chain-like first-order rule ). 与基于模板的方法相比,这一类方法可以有效缓解 P2 和 P3. 但仍存在限制:
(1)类链规则被表达成 Horn 子句的子集,难以表示复杂规则;
(2)学习到的规则仅对特定查询有效,泛化能力较差.
本文提出的 NLIL 是一种可微分 ILP 方法,扩展了一般用于解决 ILP 问题的多跳推理框架. 利用分治策略 ( divide-and conquer strategy ),将搜索空间分解为同一层次结构的 3 个子空间,每一个子空间都可以用注意力有效完成搜索任务. 通过将训练分为规则生成和规则评估阶段维护规则的全局一致性,其中,在规则生成阶段只考虑全局共享的谓词.
同时,NLIL 也适用于监督学习中的模型解释,将其应用于 Visual Genome 数据集中,所学规则在保持可解释性的同时,具有与密集监督模型 ( densely supervised model ) 相当的预测能力.
Preliminaries ( 准备工作 )
监督学习通常涉及对分类器的学习,分类器将输出目标的分数映射到 [ 0, 1 ] 区间内并进行分类. 但结果却无从解释. 最近关于可解释性的工作集中在生成 heatmaps ( 热图 ) 或自解释分类器的注意力上. 本文认为,更有效的解释是通过分类器之间的联系得出的 ( 通常一个relation是一个分类器 ) .
例如,现在有分类器:Penson ( X ),Car ( X ),Clothing ( X ),Inside ( X , X' ) . 当解释为什么 Person ( X ) 成立时,可以利用其它三个分类器来解释,如 “ X is a person if it's inside a car and wearing clothing ” .
Inductive Logic Programming ( 归纳逻辑程序设计, ILP )
一个典型的一阶逻辑 ( First-order Logic, FOL ) 系统包含三个要素:entity、predicate、formula .
ILP 在一阶规则学习中引入了函数和逻辑表达式嵌套. 一方面使得机器学习系统具备了更为强大的表达能力;另一方面,ILP 可看作用机器学习技术来解决基于背景知识的逻辑程序 ( Logic Program ) 归纳,使学得的 “规则” 可被 PROLOG 等逻辑程序设计语言直接使用. ILP 采用自底向上的规则生成策略,直接将一个或多个正例所对应的具体事实 ( grouded fact ) 作为初始规则,再结合最小一般泛化与逆归结做进一步学习.
ILP 通过规则的硬匹配以及遍历的搜索流程去逐步搜索出满足条件的逻辑范式,但效率低下,表达能力差,且对噪音数据的容忍性小。
Predicates ( 谓词 ) 是将实体映射为 0 或 1 的函数, 如 Person : x |→ { 0, 1 }, x ∈ . 分类器可以看作是可微分的 Predicates ( soft predicates ) .
arity : 参数数量
atom : 原子公式, 不含连接词的 FOL 公式, 用于逻辑变量的谓词符号, 用于描述事物的属性或关系, 如 Penson ( X ), Inside ( X , X' ). 逻辑变量 X 都可以被实例化为 中的任一对象.
FOL 的公式 : 使用逻辑符号 { ∧, ∨, ¬ } 将原子公式连接起来组合为 FOL 公式. 给出一个谓词集 , 使用一阶逻辑蕴含 ( entailment ) 对谓词
解释为以下规则 :
( 1 )
为蕴含头 ( 规则头 ), 表示该条规则的结果; A 为规则体, 是一个通用公式, 表示该条规则的前提条件.
可以解读为 : 对于任意 X, X' 都存在 , 在满足 A 的同时, 可以推导出 P.
通过引入逻辑变量,使规则更具泛化能力,因为它不再依赖于特定数据. 通过将变量实例化评估公式.
给出一个关系知识库 ( Knowledge Base, KB ) ,包含一组事实:
其中, ,
,以公式 ( 1 ) 形式学习且包含目标谓词
的一阶逻辑规则任务称为归纳逻辑程序设计.
Multi-hop Reasoning ( 多跳推理 )
在知识图谱中,ILP 问题与多跳推理密切相关,与 ILP 类似,多跳推理在 KB 中执行时也包含谓词集 ,事实相对于谓词
进行存储,谓词
表示为二进制
的邻接矩阵
,当且仅当
在 KG 中存在时,
,否则,为 0.
当给出查询 ,多跳推理的目标是找到将两个实体 x 和 x' 连接起来的关系路径,即
,
为路径集.
正式的,令 为对象 x 的
维独热编码 ( one-hot encoding ),沿路径推理的第 t 跳可以表示为:
其中, 是第 t 跳所用谓词的邻接矩阵,
是路径特征向量,向量中第
个元素表示实体
到
之间有多少条不同的路径. 经过 T 步推理后,查询的得分可计算为:
( 2 )
对于每个查询 q,目标是:
(1)找到合适的跳数 T ;
(2)对于每个 t ∈ [ 1, 2, ... , T ],找到合适的 ,以使得公式 ( 2 ) 最大化.
可以将这两个目标放宽为:
(1)所有可能路径分数的加权和
(2)每一步矩阵的加权和
soft 路径选择函数定义为:
( 3 )
# ( 关于 soft:概率值大会被经常选到,但概率值小的也会偶尔被选到 )
公式 ( 3 ) 参数化为:
(1)路径注意力向量 ( path attention vector ):,softly 选择长度在 ( 1, T ) 之间的最佳路径;
(2)操作注意力向量 ( operator attention vector ):,
softly 选择在第 t 步的
.
为了更清楚的表达,暂时忽略对 的依赖,
和
由以下模型生成,其中 w 是可学习参数:
在 Cohen 的 PRA 进行知识推理算法中, 是一个随机游走采样器,模拟以 x 为起点在 KG 上随即游走的过程并生成独热编码;在 NeuralLP 中
是一个循环神经网络控制器,生成一系列以
为初始输入的规范化 ( Normalized ) 注意力向量. 因此得分函数可以被定义为:
# Normalization:规范化目标是将数据经过处理后 ( 通过某种特定算法 ) 限制在一个合理的范围内,从而能让机器学习更容易学习到数据中的规律.
利用多跳推理方法学习关系路径可以被解释为用类链 FOL 规则解决 ILP 问题,如:
现有的基于模板的 ILP 方法仍存在两个问题:
P1:规则的表现力对监督模型生成结果的可解释性提出了更高的要求,链式规则空间限制了其表现力,因为链式规则空间表示 Horn 子句规则空间的约束子空间. 这些方法依然缺乏在链式规则空间外有效搜索的能力.
P2:注意力生成器 依赖对于特定查询 q 的主题 x ,这意味着针对目标
生成的解释会因查询而异.
Neural Logic Inductive Learning ( 神经逻辑归纳学习, NLIL )
这一部分展示了多跳推理方法和在公式 ( 1 ) 中定义的逻辑蕴含之间的关系,提出一个分层逻辑空间缓解 P1,如为了有效学习到更多可解释规则扩展了类链空间.
The operator view
在公式 ( 1 ) 中,变量只出现在规则体的存在量词之后,将公式 ( 1 ) 转换为 Skolem 范式,将所有存在量词之后的变量替换为关于 X 和 X' 的函数,如:
( 4 )
如果 等是已知的,那么对于公式 ( 1 ) 来说,公式 ( 4 ) 更容易计算.
# Skolem 范式:在谓词演算中的公式,如果它是范式 ( 标准形式 ),且所有存在量词 ( 如果有量词的话 ) 都在全称量词之前,则称此公式为 Skolem 范式.
把每个 Predicate 看作是一个算子,可得到一个函数子空间 ,其中:
,U 代表一元谓词,B代表二元谓词.
具体地,给定一个主题实体 x , 返回与 x 和
相匹配的对象实体集表示 ( embedding ).
用 表示函数子空间,存在变量可以被表示为 operator calls ( 运算符调用 ),记作
,
. 因此可以将任何符合公式 ( 4 ) 的 FOL 转换为运算符形式,例如
可以被转换为:
其中, 用关于 X 的 operator calls 表示,这种转换并不唯一,变量绑定问题因此也就变成了多跳推理中的路径查找问题.
Primitive Statements ( 原始命题 )
公式 ( 3 ) 相当于链式规则,为了令其能表达更具解释性的规则,引入 primitive statement . 将原子公式 ( atom ) 定义为用于特定逻辑变量的谓词标志,将用于头变量或在
中的谓词符号定义为原始命题 . 例如,
和
是两个原始命题. 每个原始命题都是从输入空间到标量置信度得分的映射. 一元原始命题
和二元命题
的映射函数定义为:
,
为 sigmoid 函数.
如下图所示,原始命题从只能表达链式规则拓展到树形规则,以及规则之间的合取模式,极大地拓展了逻辑谓词的表达能力.
Logic combination space ( 逻辑组合空间 )
通过探索逻辑符号 { ∧, ∨, ¬ } 和原始命题之间的逻辑组合来扩展 rule search space .
令 表示所有可能谓词符号的原始命题集,将第 l 级的公式集定义为:
公式集 中的每一个元素都是一个公式,使得
.
枚举每一 level 的所有可能的组合太过昂贵,因此设置内存限制 C ,表示每一 level 可以被跟踪的最大组合数量.
令 为
的注意力向量,
,则每个查询的得分可计算为:
( 5 )
Hierarchical Transformer networks for rule generation ( 多层次 Transformer 网络生成规则 )
上图为 paper 定义的多层规则空间,其中,operator calls 、statement evaluation 和逻辑组合被放宽为注意力的加权和.
本章通过提出在任意查询的条件下生成注意力的可微分模型来缓解 P2.
NLIL 的目标是生成不依赖于数据的 FOL 规则,即对每个目标谓词 P*,它的规则集 和最后输出的规则不因查询的变化而变化. 为了完成这一目标,paper 给每一个谓词定义了一个可学习表示
,虚拟参数 X 和 X' 的表示定义为
,将生成注意力模型定义为:
( 6 )
其中, 为
的表示 ( embedding ),这样注意力只会因
的不同而不同.
上图是一个计算注意力 的三层 Transformer 网络,每个模块都用来模拟使用神经网络和 “ 虚拟 ” 表示在 operator call、原始命题评估和公式计算过程中可能发生的实际计算,并保留在这个模块评估过程中产生的注意力矩阵,用于评估查询得分,即公式 ( 5 ) .
# Transformer (from paper : Attention is all you need),使用 encoder 和 decoder 的 stacked self-attention ( 堆叠注意层 ) 和 point-wise ( 点连接层 ) ,encoder 将符号表示的输入序列 映射到连续表示的序列
,给定 z ,decoder 一次生成一个元素符号的输出序列
. 在每一步,模型都自动回归,在生成下一步时使用之前生成的符号作为附加输入.
多头注意力 ( MultiHeadAttn ) 是一个标准的 Transformer 模块 :,其中,d 是 latent 维度,q 是查询维度,v 是值维度. 输入查询 Q 及其 Value V,返回输出值 O 和注意力矩阵 S.
具体地:
Operator search:对于每个目标谓词 ,将表示矩阵 H 转换为:
,令
为查询运算符表示 ( operator query embedding ),运算符 Transformer 模型可参数化为:
其中, 是路径起点的伪输入表示,
是可学习运算符编码,
是所有运算符
的表示,因此,
对 K 个谓词的运算符调用的输出进行编码,然后,针对一个查询
,将输出与另一个多头注意力进行汇总,进而产生运算符路径注意力向量
和 汇总输出
.
Primitive statement search:令 为 T 个路径的输出表示,路径注意力的生成公式为:
其中, 和
为第一和第二个自变量 ( argument ) 表示,
和
为
中的每个原始命题中的参数编码,使用两个多头注意力计算路径和参数之间的兼容性 ( compatibility ) ,利用前馈汇总所有选择,并输出
,表示对
中所有命题评估的结果.
# parameter 和 argument 都有参数的意思,前者是函数定义中的参数,指的是地址指针;后者是函数调用时的实际参数,即内存空间段. argument 更多翻译为自变量.
Formula search:令 为第
级公式的第一和第二个自变量的可学习查询 ( learnable queries ),令
,公式注意力的生成公式为:
其中, 和
是可学习表示,
则表示在
级公式的正负两种状态,逻辑 “ 与 ” 自变量跟前面公式的兼容性由两个多头注意力计算,
级公式表示
由前馈汇总,令
为可学习最后输出查询,令
,因此,最后输出注意力可计算为:
.
Stochastic training and rule visualizations ( 随机训练与规则初始化 )
NLIL 的训练包含两阶段:规则生成和规则评估. 利用公式 ( 6 ) 所描述的模型生成规则;在评估阶段,采样一小批查询 ,利用公式 ( 5 ) 进行规则评估,其中,
是查询标签表示三元组是否存在在 KB 中.
为了避免琐碎规则 ( 如 ) 总是输出 1 ,采样时将不存在查询加入到训练中. 在实验过程中,这些负实例均匀地分布在目标查询矩阵
中值为 0 的地方. 因此,目标函数变为:
公式 ( 6 ) 生成的注意力均可微分,因此,损失函数将注意力向后传播到 Transformer 网络中完成端到端 ( end-to-end ) 的训练.
Extracting explicit rules ( 提取显式规则 )
训练过程中,注意力将运算符调用 ( operator calls ) 和逻辑组合的结果平均分配,为了验证和训练,利用从注意力中提取的显式 FOL 规则对模型进行评估,具体可将一个注意力向量看作是一个分类分布,如 是随机变量
上的一个分类分布,加权和为矩阵
的期望值,因此,可以从这些分布中采样提取显示规则.
paper 将采样替换为 arg max ,是因为我们只关心最佳规则,且在熟练后注意力通常集中在一个实体上,替换后,就可以得到概率质量最大的实体的独热编码.
Experiments
Classical ILP benchmarks
- Benchmark datasets : (i) Even-and-Successor ( ES ) (ii) FB15K-237 (iii) WN18
- Knowledge base completion : datasets 划分为 train、valid、test 集,模型去预测一个事实三元组 ( 查询 ) 在 KB 中存在的概率. 实验结果如下图.
可以看出,由于 NLIL 为每个目标谓词创建了 Transformer 块和较小的模型,在得分相近的情况下,速度快了近三倍.
- Scalability for long rules : NLIL 可以有效搜索长路径规则,下图可以看出 NLIL 在搜索长度为 32 的路径的时间与 NeuralLP 搜索长度为 3 的路径时相近.
ILP on visual genome dataset
在对象检测和关系学习中,监督模型可以学习为每个图像生成一个场景图,场景图可以描述图像中目标实体间的关系,如下图所示,由每个节点被标记为对象类的节点组成,每一个关系将一对对象相连,因此,场景图可以表示为 KB ,可以执行 ILP ,
# NLIL 利用场景图并通过学习表征图中常见子模式的一阶逻辑规则来解释对象 ( 如 Car 和 Person ) 的存在.