在这篇论文中,作者探索了用于协同过滤的神经网络结构,设计了一个通用框架NCF,并提出了三种实例:GMF,MLP和NeuMF,以不同的方式模拟用户-项目交互。
Input layer
为了允许神经网络对协同过滤进行一个完整的处理,作者采用下图展示的多层感知机去模拟一个用户项目交互 y u i y_{ui} yui ,它的一层的输出作为下一层的输入。底部输入层包括两个特征向量 v u U v^U_u vuU 和 v i I v^I_i viI ,分别用来描述用户 u u u 和项目 i i i ,并使用one-hot编码将它们转化为二值化稀疏向量。
Embedding Layer
它是一个全连接层,用来将输入层的稀疏表示映射为一个稠密向量(dense vector)。
Neural CF Layers
多个隐藏层实现非线性转化,文中使用的3层,ReLU激活函数
Output Layer
最后输出一个分数,最小化预测值和真实值的pointwise loss求解模型(也有一些模型最后使用pairwise loss求解的)
Interaction function:
其中 P∈RM×K, Q∈RN×K,分别表示用户和项目的潜在因素矩阵;Θj 表示交互函数 f 的模型参数。最后预测出来的值介于0和1之间。由于函数 f 被定义为多层神经网络,它可以被定制为:
其中 ϕout 和 ϕx 分别表示为输出层和第 x 个神经协作过滤(CF)层映射函数,总共有 X 个神经协作过滤(CF)层。
对于上面的通用模型,如果将embedding层的结果视为user和item的隐向量,h是权重,aout是激活函数,考虑h全是1,aout是个恒等函数,那么就变成了最一般的MF了,即MF是NCF的一个特例。如果将激活函数换成非线性函数,那么MF就拓展为非线性的了,比如考虑使用sigmoid函数。这个模型就称为GMF(Generalized Matrix Factorization)模型。
作者还考虑使用标准MLP对user和item的interaction建模:
这里同样先通过映射获得user和item vector,但要注意,之前的MF vector和MLP vector虽然同为映射的向量,但绝对不一样,因为模型对隐向量的维度等要求是不一样的。然后将user和item vector输入到MLP中进行训练,重点是如何处理user和item vector,作者是直接将两个向量串联起来。
基于此,作者又提出了一个融合模型NeuMF(Neural matrix factorization model)。
由于不能强行要求GMF和MLP在输入时的隐向量维度一致,毕竟是两个不同的模型,所以分别做embedding。现在对两个模型的“输出”也不能做这种要求,因此作者想了个更好的办法:将两个模型的倒数第二层特征串联为一个特征,然后加层感知机:
这篇文章是KDD’18的best research paper,算是图对抗攻击的开山之作。这篇文章研究的是属性图上针对某个节点的节点分类攻击,也就是说对于一张属性图上的某个节点,通过施加一些图结构(加边、减边)或节点属性(加属性、减属性)上的扰动,使得模型对该节点分类预测错误。实验结果表明节点分类的准确率即使在采用很少的一点扰动的情况下也会明显下降。此外,本文采取的攻击是可迁移的,学习出来的攻击可以在只提供一点图信息的情况下成功的对其他的节点分类模型进行成功的攻击。
这篇文章将研究的图种类限定到了 Attributed Graph(属性图),即图既有节点特征,也有节点之间的结构特征。该文章默认攻击方知道图中全部的信息。攻击方的目标是通过制造一些“很难被注意到的”变化(节点属性或者图结构的变化)使得图分类器的错误率上升。
具体来说,对于我们要攻击的目标节点,我们要产生一个“干扰图”,使得产生的干扰图与原图区别不大,并且最大化新图上目标节点的分类概率和老图上目标节点分类概率的差距。
我们通过改变节点属性和图结构来产生干扰,作者具体定义了什么是节点层面和结构层面的干扰以及如何在保持节点属性和图结构的前提下产生干扰。
作者提出了一种名为 Nettack 的攻击模型用来产生干扰图,该模型定义了候选攻击方法以及计算攻击效果分数的函数,然后在节点属性和图结构两个维度上选择最优的加入干扰的方式。
该方法首先通过在一个代理模型(surrogate model)上进行模拟的攻击行为,然后将代理模型上面训练到结果迁移到实际的深度分类模型中,发现在深度分类器上面也可以达到很好的攻击效果。
该方法研究的深度图分类器有三种,分别为半监督的图卷积网络(GCN),列网络(Column Network)和无监督的深度游走(DeepWalk)模型。实验比较了一种随机方法和梯度攻击节点的方法,最终的实验结果表明 Nettack 模型有较好的攻击效果。
但是,这篇文章并没有讨论相应的防御方法,这可以作为未来的研究方向。
回顾图像对抗攻击,一个最直观的扰动代价定义方式就是扰动的数目,那么在图对抗攻击中显然也要有这样的约束,用 △ △ △ 限制扰动的数目:接下来考虑对图结构的扰动。对于一张图而言,最重要的结构相关的特征就是图的degree distribution,因此这里定义如果扰动后的图的degree distribution与原图很不一样,认为这样的扰动很容易被分辨。现实中的图往往服从幂律分布 ,对于一张图而言,它的幂律分布参数可以用下式近似:
那么考虑如果原图和扰动后的图都属于同一个分布的采样,就认为两张图在结构上不可分辨,文章使用log-likelihood衡量某张图是否是一个概率分布的采样,用log-likelihood差衡量扰动的幅度:
如果 ,则认为结构扰动不可分辨。
除了图结构以外,也可以改动节点的属性,因此需要定义节点属性的扰动代价。作者认为对于节点属性而言,其最重要的判别依据应该是特征的共现关系。比如两个在原图中从未共现过的特征在扰动后的图中共现了,那么这样的扰动是容易被分辨的。首先建立图C = (F,E), F 是特征的集合,E⊆F×F代表特征之间是否共现,令 表示节点u原有的特征。假如现在要对节点u 新增特征i ,需要满足下式条件才能认为不可分辨(删除某个特征不需要判断):
这个式子的含义相当于计算特征间共现概率的加权平均。而 d j d_j dj 用来度量特征的特殊性,对于一个与大量其他特征共现的特征,要削弱它的加权贡献。
攻击模型的loss如下式(最大化将某个节点预测为与原来结果不同类别的概率与原来结果概率的差):
本文在一个代理模型上进行攻击,选择两层GCN并用恒等函数替换原来的激活函数,于是代理模型等于下式:
攻击目标是最大化目标节点 v 0 v_0 v0的log-probabilities的变化,因而softmax也可以拿掉(不影响大小关系),那么给定一个训练好的模型,权重参数为 W ,代理模型上的攻击损失可以定义为:
为了便于优化,定义两个函数分别评估结构扰动(增加/删除一条边)和属性扰动(增加/删除一个属性)对loss的影响。
整个算法如下:
每一次扰动前根据当前状态建立一个可行(满足前面提到的不可分辨要求)的扰动解空间,选择能最大化扰动评估函数的那种扰动并施加,直到达到扰动数量 △ △ △为止。
要使得这个算法能够实际应用,有两个条件是要满足的,一个是s_struct和s_feat的计算要高效,另一个是能够高效的检查哪一个edge和feature的添加或删除是满足unnoticeable的。
score function的快速计算依赖于一个定理,当添加或者删除一个edge(m,n)的时候,有而这个公式使得能够在一个常量级时间段内得以计算,并且是以一种incremental的方式,只需要对改变量进行计算。
而对于feature attack来说,情况就简单得多,因为事先通过规则固定了要将target错分成哪一类,因此,选择最合适的node和feature只要对每一个node的feature进行求导即可之后选择一个指向允许方向的,绝对值最大的,这个指向允许方向的意思是,每个feature的取值只有0,1,因此如果feature是0,那么梯度指向正值,那就是可以的方向,可以将这个feature的值改成1了,如果梯度指向负值,那不行,feature不能取负的。并且在algorithm1中可以看到,structure和feature的attack并不是两者同时进行,而是看哪个带来的score的上升比较大,就取哪一种攻击方式,攻击一次整个graph就变了,因此再实施第二种攻击其实是不合理的,因为情况变了要重新计算。还有一个注意的是,在简化问题使得问题变得tractable的时候,W是没有变化的,也就是说并不像之前所说的是一个bi-level问题,而是固定了模型。
最后介绍的是candidate set的快速计算,也就是attack的时候,结构的改变和feature的改变受到限制而得到的一些可以进行的改变而得到的集合,前面提到过的。由于budget △限制和feature的unnoticeable change限制都很好用incremental的方式来进行检测,需要处理的就是structure attack的constraint的快速检测,这就又依赖于一个定理其中有了这条定理,也可以以一种incremental的方式计算,新graph的degree distribution的改变是否超出要求,也就好判断了。
作者们在该论文中从现在两个主流的区块链,以太坊和比特币中,发现了区块链可用性的限制,证明了从区块链中读取数据的可用性很高,但是往区块链中写入数据(交易数据管理)的可用性就很低。
从以太坊的实验中发现,大量的交易中,有很多交易信息是没有被提交的,区块链中也没有明确的终止交易和重新提交的内在机制,这些交易就一直处于一种等待状态。最后,基于以上这些限制,作者们提出了一些技术来优化这些问题。
作者在这篇论文中调查了交易记录没有被提交的原因以及耗费长时间的原因:
在本节中,作者讨论了影响比特币提交时间的因素,并进行了实验验证。
为了探究不同网络环境下的情况,作者在2016年11月和2017年4月分别进行了两次实验(第二次实验的网络负载较大),观测交易的产生并记录其提交所花费的时间。
为了充分收集包含在区块链中的交易信息,作者定义了观测窗口:从实验开始前的第一个区块到实验结束24h后的一个区块,这之间的交易即处于观测窗口中,都会被记录下来。
在本节中,作者介绍了以太坊不能保证提交的原理,并实验研究了gas price、gas limit、network三个因素对提交时间的影响。
(i)交易发生并声明;
(ii)将该交易纳入某一链条上新开采的区块;
(iii)将交易纳入主链的区块部分;
(iv)其后链接了一定数量的区块后提交事务。
因为分叉现象或其他原因,步骤2并不能保证交易最终一定被提交,这就产生系统的可靠性问题。
该实验研究交易从打包到最终提交所花费的时间以及分支合并后会丢失多少已打包的交易。作者改写了一个客户端节点作为监听节点,以检测交易声明和区块声明。
监听节点会记录交易声明的时间和区块到达的时间,以计算交易提交的延迟时间。
gas limit通过限制每个区块消耗的gas总量防止DDoS攻击。如果交易所需的气体超过了限制值,交易就无法被包含到块中,这就使得大规模的分布式拒绝服务攻击难以发生。但是太小的gas limit也容易造成一些合约无法正常工作。
这部分作者将提出人工地中止交易的机制。该机制可用于提高软件客户端或者钱包的用户友好性。
作者在3种场景下测试了以上的规则。
均取得了很好的效果。
当前的区块链系统,虽然系统中的使用硬件的算力已经比较高,但是处理能力仍然不足,不能够支撑计算密集的智能合约或者高频交易且容易受到Dos攻击的影响。所以未来可以考虑将从一下几个方面进一步提高系统可用性。