knowledge_representation_pytorch icon indicating copy to clipboard operation
knowledge_representation_pytorch copied to clipboard

Normloss是用来干嘛的

Open huangyanhui opened this issue 6 years ago • 4 comments

您好,我能问一下关于transE中的normloss是用来干嘛的,我看原文中好像没有这个

huangyanhui avatar Sep 20 '18 07:09 huangyanhui

normloss的作用是,限制向量的模长在1以内,当向量模长大于1的时候,给予惩罚。这样可以避免学习向量的时候,简单地通过增减向量的模长就能在训练集上取得好的效果。

jimmywangheng avatar Oct 18 '18 08:10 jimmywangheng

多谢解答!

huangyanhui avatar Oct 18 '18 08:10 huangyanhui

请问,这种实现方法是如何保证论文原文所说的entity norm=1?根据我的理解,代码中的normloss是在训练时对向量进行惩罚,但是Embedding layer中的weight只在初始化的时候进行了normalize,并没有保证embedding的norm始终为1。之所以提出这个问题,是由于在各种对TransE的实现版本中,一般都说norm的效果影响不大,但是似乎没有人完全使用论文中的参数,复现出和论文数据相似的结果,之前用Keras实现过一个超级慢的TransE,最近有时间想重新整理一下所有的Trans系列模型,准备采用Pytorch(所以也是才开始理解Pytorch,有理解错误的地方还望指正),希望能够在您的代码上进行重构,期待能有更多的交流!

eshijia avatar Feb 14 '19 06:02 eshijia

请问,这种实现方法是如何保证论文原文所说的entity norm=1?根据我的理解,代码中的normloss是在训练时对向量进行惩罚,但是Embedding layer中的weight只在初始化的时候进行了normalize,并没有保证embedding的norm始终为1。之所以提出这个问题,是由于在各种对TransE的实现版本中,一般都说norm的效果影响不大,但是似乎没有人完全使用论文中的参数,复现出和论文数据相似的结果,之前用Keras实现过一个超级慢的TransE,最近有时间想重新整理一下所有的Trans系列模型,准备采用Pytorch(所以也是才开始理解Pytorch,有理解错误的地方还望指正),希望能够在您的代码上进行重构,期待能有更多的交流!

同学你好,normloss是一种软惩罚方法(类似软间隔支持向量机),和其他损失函数一同优化,对模长大于1的向量会施加惩罚,从而使得模型倾向于将模长限制在1以内。 在TransE的论文,模长确实总是固定为1,但TransR的论文【Learning Entity and Relation Embeddings for Knowledge Graph Completion,第三页左栏Cluster-based TransR (CTransR)小标题之上】也提到,只要将模长限制在1以内都可以(相当于将向量限制在一个半径为1的球形空间中)。这样可以避免模型简单地通过增加长度,即可提高在训练集上的效果。

jimmywangheng avatar Feb 22 '19 08:02 jimmywangheng