Neuraltalk论文解析

瞥一眼图像对人来说足以指出或描述出一个图像的大量细节。可是,这样出色的能力对于我们的图像识别模型来说是难以企及的。之前大部分工作都是给固定类别的做标签,不具有语言描述能力。

neuraltalk所要实现的目标:

  • 其一,标签属于弱标签。即只告诉你一张图片对应的语言描述,但语言描述的物体的具体位置在哪里并不标示出来。通过这样的方式建立两者的联系。

  • 其二,即使知道图片中有什么,我们还无法组织成语言。这个任务就是利用某个模型组织成自然语言,当然语言中单词的个数限制是不存在的,也不同于前人利用语言模板生成语言描述的方法。这是一种更加有效的方法。

下面是基本思想。

 

首先要知道图片里有什么,即物体检测。说到物体检测,我们回想起来RCNN,这是比较传统也经过了锤炼的方法。使用ImageNet200类检测挑战上的模型,并且进行过微调。我们将连接CNN的最后一层去掉,即全连接层不通过softmax,而是取输出4096维的全连接层作为最后一层,然后将4096维的输出通过另一个网络。

CNN(I)这一项即4096维输出,W权重为h*4096。即我们最后的到的是一个包含图像信息的h维向量。

到此,图像处理暂时告一段落,下面是词句的处理。因为要把句子和图像关联起来,我们想到可以将句子也映射到h维的向量空间,之后经过其他的处理反映两者的关系。

对于图像来说像素可以作为神经网络的输入,对于句子来说又是什么呢?对句子来说,首先要做的是分词,英文比较简单,很容易分词。接着就是如何表示词,通过一个向量来表示词,称作词向量,一句话有n个词,有n个词向量,将这些词向量并联起来就相当于句子的向量矩阵。可是句子中词与词之间又有某种联系,万不可忽略这一点。怎么做能符合我们逻辑上的认知呢。原文用了BRNN(当然可能会有人想到RNN,LSTM等模型)

Neuraltalk论文解析_第1张图片

(2)式可以忽略,最终Xt是词向量。(4)(5)分别是从左到右和从右到左的处理过程意思比较明显就是一个词和前一个词的关联,一个词和后一个词的关联。可是不要忘了,式中是ht-1,意味着这个还包括了之前的词的信息。激活函数是ReLU。

既然都投射到h维了,怎么表示他们之间的关系呢。原文有一个将这两个h维向量求内积的过程。为什么这么做呢,可以想象坐标(0,1)和(1,0)内积是0,他们的夹角是90度。因为两个向量求内积过程一定程度上反应两者的夹角,夹角越小可以认为两个向量相关性很强。相关性弱,内积会变成负数,即相关性越强,内积越大。

最后是两个向量的内积,gk是图片,i是某个图像区域,gl是句子,t是句子中的词。可以看到,相关性越大S越大。

Neuraltalk论文解析_第2张图片

目标函数如上,l与k相关性大,函数值越大。目标是优化它。

网络学习到了句子与图像的对应关系,我们想要把延展性的连续的词序列对应到某个bounding box中。

为了解决这个问题,我们把真正的排列序列作为隐藏变量使用马尔科夫随机场,词的交互促进与相应区域的对应。

Neuraltalk论文解析_第3张图片

beta据原文说为0时可以对单个词之间进行插值,beta较大时可以将语句片段对应到得分最高的图像区域(region)中。

这段并不太明白其中的原理,好了既然有了图像区域和对应的语句片段,整个图像和一整句话就开始训练吧。用到了RNN

Neuraltalk论文解析_第4张图片

将一句话或者一个片段最前面加上START标识符,最后加上END标识符。然后经过神经网络。如上图一样,输入一个词的信息并结合RNN网络上次迭代遗留的信息,输出目标是这个词的下一个词(即label)。上图中最后hat的信息结合之前的信息,END标识符做标签。这就是训练的思路。

那么如何test呢,怎么利用一张图片和START标识符输出一句话?当然还是先将两者的信息通过网络,得到最有可能的值(词),然后将生成的词重新投到网络中生成第二个词直到生成END标识符。当然这样是有漏洞的,原作者加入了beam search。输出第一个词时,beam size =3,那就是说保留前三个概率最大的值,生成第二个值得时候组合有很多了,因为前面有三个词,每个词生成下面一个词,为了保险你也要每个都保留三个吧。这样就有9种组合,在从9种组合种选出3个概率最大的,在投到网络中生成第三个词,以此类推。

花了几天时间搞懂了一些东西,但具体还是要回归到代码上啊。有实践才能底气更足吧。

你可能感兴趣的:(深度学习)