啊,你们的小夕回来啦~
有没有被吓到( ̄∇ ̄)
0
小夕在玩什么
小夕,终于,在今天,把,各种deadline,完成了(´Д` )
首先,小夕要像大家深深的说一声谢谢啦。好多天没有打开订阅号的后台,今天一开,发现好多后台留言,满满的鼓励和正能量~好开心好开心o(≧v≦)o~但是今天为了省出时间写文章,小夕就迟一点再回复啦~
当小夕在文章标题竟然用了“玩”这个字的时候,深深的感到了自己的虚伪和丧心病狂(´Д` )哪有这么玩命的玩的呀(╯°Д°)╯︵ /(.□ . \)
小夕想了想,“玩”的这几件事中,好像英语的presentation没什么好讲的。。。项目的事情也不能透露啦,但是论文的事情当然可以跟大家分享啦(反正论文又不是我写的,喵喵喵)
在开始之前,小夕温馨提示,关注人工智能但是非专业从业者的同学请备好退烧药,关注人工智能且是从业者的同学请备好小本本,不关注人工智能但是喜欢小夕的童鞋可以欣赏一下小夕简(纯)洁(属)优(偷)美(懒)的PPT\(//∇//)\不关注人工智能也不喜欢小夕的童鞋,小夕打你哦!
1
一篇神奇的论文
还记不记得小夕为大家绘制的人工智能大地图呢?人工智能,有一个能力就是逻辑推理呀~当它记忆了足够的知识后,如果只是死记硬背不懂思考的话,那么这个人工智能也太蠢了,很难有所成就,所以让人工智能具备推理的能力是必须的~
下面呢,小夕就参考Socher等人在2013年的这篇论文,来给大家讲解如何将深度学习用于知识的推理。(老师规定ppt必须做成英文的,小夕也没办法呀…)
小夕不太放心,还是再啰嗦一下啦。下面小夕要讲的内容可能对于初学者而言理解难度有点大,不过看不懂的话留个印象也是好的呀~而且小夕以后会逐步为大家讲解基础知识,一步步的为看不懂的同学填上现有基础到这篇论文的鸿沟~
2
准备好了喵!
小夕将从如下3个方面给大家介绍一下啦。
首先是小夕的任务:(结合PPT后面小夕的讲解来看PPT哦)
本任务的数据集是一个知识库,这个知识库是由实体(entity)以及实体之间的关系(relation)组成的。比如图中的“姚明”entity与“上海”entity之间的relation就是“born-in”。
其中每两个实体以及它们之间的关系就构成一个样本。而我们就是要根据这些样本训练出一个Neural Tensor Network模型(以下简称NTN啦),然后用这个模型去推理知识库中的隐含的实体之间的relation。
因此,小夕的目标就是基于已有的知识库来学习到一个叫NTN的神经网络,然后将训练好的模型用于做推理。
这里我们直观的看一下数据集,一行就是一个样本。第一列和第三列是样本的两个实体,中间是它们的关系。小夕统计了一下,一共有11种relation。
然后我们如何用NTN网络来完成这个任务呢?
首先,我们将这11个relation看成11个分类任务,所以模型就是由11个子分类器组成的。然后每个子分类器就是负责判别输入的两个实体是不是符合它所负责的relation。那么问题来了,模型的输入,也就是实体,该如何表示呢?
左边三个蓝框就是三个relation,我们直接看最下面蓝框的第一个样本,其中e1是Bengal tiger,e2是tiger。NTN模型中的entity就可以表示成entity内部的单词的词向量的均值。所以这个Bengal tiger实体就会取Bengal和tiger的均值啦。所以每个entity依然是词向量大小的一个向量。
这里是NTN网络的假设函数。可以看到,如果小夕将e1WRe2这一项去掉,这就是一个全联接神经网络啦(经典的浅层前馈神经网络),这个全联接神经网络就是将两个entity向量连接起来做为输入。但是显然这样失去了entity之间的交互了呀,所以需要NTN网络中的tensor层完成e1与e2的交互,这个实体间的交互信息对于这两个实体的关系推理是至关重要的。
然后损失函数就很常见啦,这就是一个对比最大间隔损失函数再加上L2正则化。
下面就是小夕对该论文的复现(实验)环节啦。
基本流程就是这样子的:预处理-训练NTN网络-通过开发集调整超参数-分类(自动推理)和可视化。
开发环境是这样子的。深度学习框架用的TensorFlow。由于这里11万的训练样本也不少啦,虽然网络不太深。所以需要用CUDA来进行GPU并行计算。
这个是模型的超参数,论文中给出啦,所以小夕就将其固定了。(这里各种超参数就取字面意思啦,其中,corrupt_size就是为训练集的每个样本产生出多少个负样本,来进行损失函数中的对比最大间隔的计算。这里的slice_size就是tensor层的深度)
小夕的第一次试验是惨不忍睹的。不过看小夕这偷懒的参数初始化方式也很容易想到,问题肯定出在初始化上。。。
小夕改良了一下初始化方法,果然提升了5个百分点。然而论文中是86%的准确率呀,差的这13个百分点,一般不会完全是AdaGrad的锅,或者决策阈值的锅。因此,小夕继续改良初始化。
这次,小夕将tensor层的W参数改为Xavier方法了。果然~通过调整初始化,足足提升了12%的准确率。
这里就是Xavier方法的细节,其实就是说将W在上面这个区间里进行均匀分布的抽样会很好的~这里的n(l)和n(l+1)就是W的输入与输出,所以这里就是entity向量的大小啦,也就是词向量的大小。
第四次试验,小夕通过开发集训练得到了11个relation的最优决策阈值,又提升了4%的精度。虽然这个精度的提升会随模型参数的变化而变化,而且规律性不强。
这里就是84.14%的实验的训练曲线与测试曲线啦,可以看出训练曲线最弯的地方就是测试曲线准确度最高的地方~
这个是论文作者实现的对11个relation的准确率。
这个是小夕实现的。可以看到,除了第一个domain_topic小夕的准确率莫名其妙的比论文中高了好多,其他relation的准确率跟论文中差不太多的。
最后总结一下啦。反正准确率就是比论文低了2个百分点。而论文中明确说了Adagrad会在这里表现不佳,损失精度,论文中使用L-BFGS来优化的。然而tensorflow中没有实现L-BFGS啊,小夕也懒得再去引入其他库折腾了。所以tensorflow为这2%背锅啦。
听说,打赏功能受限了?那小狐狸就要复出啦!