崇洋媚外是什么意思
TransE算法(TranslatingEmbedding)
⼀、引⾔
⽹络上已经存在了⼤量知识库(KBs),⽐如OpenCyc,WordNet,Freeba,Dbpedia等等。这些知识库是为了各种各样的⽬的建⽴的,因此很难⽤到其他系统上⾯。为了发挥知识库的图(graph)性,也为了得到统计学习(包括机器学习和深度学习)的优势,我们需要将知识库嵌⼊(embedding)到⼀个低维空间⾥(⽐如10、20、50维)。我们都知道,获得了向量后,就可以运⽤各种数学⼯具进⾏分析。深度学习的输⼊也是向量。(考虑⼀下,word2vec,我们训练出⼀个向量后,可以做好多事情,深度学习的输⼊也往往是⼀个矩阵。另可见:)。
⼆、基础背景
⼀条知识图谱可以表⽰为⼀个三元组(sub,rel,obj)。举个例⼦:⼩明的爸爸是⼤明,表⽰成三元组是(⼩明,爸爸,⼤明)。前者是主体,中间是关系,后者是客体。主体和客体统称为实体(entity)。关系有⼀个属性,不可逆,也就是说主体和客体不能颠倒过来。
知识图谱的集合,链接起来成为⼀个图(graph),每个节点是⼀个⼀个实体,每条边是⼀个关系,或者说是⼀个事实(fact)。也就是有向图,主体指向客体。
具体的⽤处和知识图谱提取⽅式可见刘知远⼤神的⽂章(ps,最好是买本他的书)
Freeba的例⼦:
(Barack Obama, place of birth, Hawai)
(Albert Einstein, follows diet, Veganism)
(San Francisco, contains, Telegraph Hill)
廉洁承诺书上⾯三条都是知识图谱的例⼦。
三、TransE的提出
TranE是⼀篇Bordes等⼈2013年发表在NIPS上的⽂章提出的算法。它的提出,是为了解决多关系数据(multi-relational data)的处理问题。我们现在有很多很多的知识库数据knowledge bas (KBs),⽐如Freeba、 Google Knowledge Graph 、 GeneOntology等等。
TransE的直观含义,就是TransE基于实体和关系的分布式向量表⽰,将每个三元组实例(head,relation,tail)中的关系relation看做从实体head到实体tail的翻译(其实我⼀直很纳闷为什么叫做translating,其实就是向量相加),通过不断调整h、r和t(head、relation和tail的向量),使(h + r) 尽可能与 t 相等,即 h + r = t。吃人参的禁忌
以前有很多种训练三元组的⽅法,但是参数过多,以⾄于模型过于复杂难以理解(作者表达的意思就是,我们的⼯作效果和你们⼀样,但我们的简单易扩展)。(ps:作者以前也做过类似的⼯作,叫做Structured Embeddings,简称SE,只是将实体转为向量,关系是⼀个矩阵,利⽤矩阵的不可逆性反映关系的不可逆性。距离表达公式是1-norm)。
如下图,作者的⽬的是将向量转为这种形式(此图是2维)
趣经女儿国
为此,作者定义了距离公式为
四、TransE的训练
注释:
奶牛饲料1、
直观上,我们要前⾯的项(原三元组)变⼩(positive),后⾯的项(打碎的三元组)变⼤(negative)。就跟喂⼩狗⼀样,它做对了,就给⾻头吃;做错了,就打两下。前⾯的项是对的(来⾃于训练集),后⾯的项是错的(我们随机⽣成的)。不同时打碎主体和客体,随机挑选⼀个打碎,另⼀个保持不变,这样才能够有对照性。
2、图上的加号是⼤于0取原值,⼩于0则为0。我们叫做合页损失函数(hinge loss function),这种训练⽅法叫做margin-bad ranking criterion。是不是听起来很熟悉?对的,就是来⾃SVM。⽀持向量机也是如此,要将正和负尽可能分开,找出最⼤距离的⽀持向量。同理,TransE也是如此,我们尽可能将对的和错的分开。margin值⼀般设为1了。
工程管理培训
3、关于模型的参数:参数θ是所有实体的向量。设⼀共有 |E| 个实体和 |R| 个关系,每个实体/关系的向量长度为d维,因此,⼀共有( |E| + |R| ) * d 个参数。
4、关于参数的更新:我们使⽤的是随机梯度下降(Stochastic Gradient Descent,SGD)训练⽅法。SGD不⽤对所有的和求梯度,⽽是对⼀个batch求梯度之后就⽴即更新theta值。
dv摄像机对于数据集⼤的情况下,有速度。但是每⼀次更新都是针对这⼀个batch⾥的三元组的向量更新的,也就是意味着,⼀次更新最多更新(3+2)*batch_size*d 个参数(设⼀个batch的长度为batch_size)。并不是把所有的theta值都更新了,或者说不⽤更新整个( |E| + |R| ) * d 矩阵,只需要更新sample⾥抽出来的batch⾥的向量即可。为什么可以这样呢(也就是为什么可以不⽤把参数全更新了,⽽是只更新⼀部分)?因为参数之间并没有依赖(或者说冲突conflict),对于此,可以参考论⽂ Hogwild!: A Lock-Free Approach to Parallelizing Stochastic。
犹太教育
5、对SGD多说两句:SGD的收敛没有GD好,但是,这反⽽是优点,因为在机器学习领域,过于best的结果反⽽是害处,因为⽤于过拟合(overfitting)。也就是,尽管叫做D(下降),但整个过程我们难保⼀直D下去。只能保证在forever可以做到D。
6、归⼀化公式的分母是向量的平⽅和再开⽅;⽽对于距离公式,是向量的平⽅和(没有开⽅)。公式的错误书写,会引起收敛的失败。
7、对于每⼀次迭代,每⼀次的归⼀化约束(constraint)实体长度为1(减少任意度量(scaling freedoms(SE)),使得收敛有效(避免 trivially minimize(transE)),但对关系不做此要求。(
然⽽我⾃⼰试验的结果是,归⼀化关系,会使精度加⼤和收敛加强)