本论文介绍的DeepProlog是一种概率逻辑编程语言,通过神经谓词和深度学习结合起来。我们将展示现有的推理和正在学习的技术将如何适应新的语言。我们的实验表明,DeepProblog支持符号和子符号的表示和推理,程序的归结,概率逻辑规划,从样例中学习。据我们所知,这项工作首先提出了一个能把通用神经网络和表达概率逻辑建模和推理以某种方式结合的框架,从而有更强的表达能力和两种框架的优点,并且可以基于样例进行端到端的训练。
把低级的感知机和高级的推理相结合是其中一种最古老,也是目前人工智能领域开发的挑战。目前,低级的感知机一般由神经网络和深度学习完成(感知机应该是指神经网络里面的权重吧),而高级推理通常使用逻辑和概率表示及推论来解决。在深度学习领域已经取得了很大突破,而高级推理的领域也取得了很大进步。事实上,将逻辑和概率推理与统计学习相结合的方法是存在的;与统计相关的人工智能领域,概率逻辑归结。最近,一些研究人员重新回顾并实现了那些源自神经符号整合领域的一些较旧的想法,寻找两全其美的方法。比如,通过设计代表了经典推理机中的可微神经网络结构。然而,将高级概率推荐的灵活性和神经网络的表达能力结合仍然是一个悬而未决的问题。本论文从不同的角度着手应对这些挑战。与其将推理功能集成到复杂的神经网络体系结构中,我们反其道而行之,我们从已有的概率逻辑规划语言ProbLog开始,并扩展其处理神经谓语的能力。想法很简单:在概率逻辑中,形如
的原子表达式的概率是p。因此,只要将在原子表达式上的神经网络输出解释成一个概率,就可以将“神经网络”组件的输出封装为“神经”谓词的形式。这个简单的想法很吸引人,它允许我们保留ProbLog语言的所有组成部分:语义,推理机制和实现。主要的挑战就是需要在样例上进行训练。输入由神经网络的输入层所产生的特征向量和在逻辑程序中的其他概率事实和子句共同组成,而输出只在概率推理器的输出层给出。但是ProbLog的代数扩展已经可以支持自动求导(differentiation应该是这个意思吧)了。所以,我们可以在神经网络中通过神经谓语的损失函数进行反向传播,这样就可以基于优化器进行梯度下降训练整个模型了。我们把这种新的语言叫做DeeProbLog。 在进一步查看细节之前,接下来的例子描述了这种方法的可能性。考虑一个谓语addition(X,Y,Z),其中X和Y是图片的数字,Z是自然数X和Y的和。在训练完成后,可以通过DeepProbLog允许我们使用概率来估计输入样例的有效性。虽然这些谓语可以直接从标准的神经网络分类器中学得,但是考虑到背景知识(比如定义一个谓语两个自然数的加和)这种做法会比较困难。而在DeepProbLog中,这些知识可以很容易的编码成一些规则,比如
,
是
和
的和(这是程序的标准运算符,可以估计计算表达式)。在这种情况下,我们需要学习的是关于数字神经谓语,也就是从图片
映射到对应的自然数
。然后,可以讲学习到的的神经网络重新用于任意的数字任务,我们的实验表明,这不仅仅带来了新的功能,而且还提升了性能。与标准的图像分类器相比,这种神经网络可以扩展为多位数,而不需要再附加额外的训练。我们注意到,单个数字分类器并没有自身并没有明确的训练,他的输出可以看成是一种潜在的表达,因为我们只使用了成对数字的训练数据。 总的来说,我们所介绍了DeepProbLog有一下独一无二的特点:(1)这种编程语言支持神经网络和机器学习,并且有明确的语义。(2)它将逻辑推理和神经网络相结合,无论是符号还是字符号的表达与推理。(3)它将概率建模,编程和推理与神经网络集成在一起(因为DeepProbLog扩展了概率编程语言ProbLog,ProbLog可以被认为是一种非常有表现力的定向图形建模语言。(4)它可用于从示例中学习各种概率逻辑神经模型,包括归结规划。
我们简要介绍一下基础的逻辑规划的概念。原子是形式为
的表达式,其中q为谓语而
是项,文字是原子或者原子取反。一项可以常数c,可以是变量V,或者是形如
,
是函数。我们将遵循Prolog约定,让常量以小写字母开头,变量以大写字母开头。可以使用
把
替换成
。当用e替换
时,我们同时用所以
替换
,表达式我们写成
。表达式不包含变量我们称为ground,规则是形如:
,h是原子,b是文字。h的意思是,只要b的合取成立,那么h就成立,因此,<-表示蕴含,逗号表示合取,n=0表示事实。
现在,我们回顾使用ProbLog进行概率逻辑编程的基础,并使用著名的防盗警报示例进行说明,然后介绍我们的新语言DeepProbLog。
一个ProbLog程序由一组形式为p::f的概率事实组成,其中p是概率而f是原子一系列规则。比如,下面的ProbLog程序模拟了著名的警报贝叶斯网络的一种变体。