论文笔记:Hyper-dimensional computing for a visual question-answering system that is trainable end-to-end
论文笔记:Hyper-dimensional computing for a visual question-answering system that is trainable end-to-end
这是一篇发表于 NIPS 2017 的关于 HyperDimensional Computing(HD) 的文章。
任务
这篇文章面向的任务是 Visual Question Answering (VQA),通俗讲就是给机器一张图片,一个相应的问题,然后机器根据图片来回答问题。
通常来讲,处理这种任务的模型一般分为两个部分,一个部分是是 RNN,用来 encode 问题,并生成答案;另外一部分是 CNN,用来分析图片。成功的关键在于如何把两者的输出,有机的结合起来,能让生成答案的过程更加合理。
另外一类方法也是分为两个部分。一个叫 perceiver,另外一个叫 evaluator。Perceiver 负责把图片变成一个知识库 (Knowledge base);evaluator 则负责根据问题,在这个知识库上面搜索,找到最合适的答案。
其实不管哪种方法,最难解决的,也是这个任务最有趣的,就是如何统一文字和图片这二者的 feature,毕竟他们有着非常不一样的结构,被不一样的模型处理。本文的作者希望能用 HyperDimensiona(HD)Computing 解决这个不统一的问题。在这篇文章里面,知识库就是用 HD vector 来表示的。
数据集
图片比较小,28x28 的尺寸。 
每张图片里面有两个物体,每个物体,有四种可能的颜色和四种可能的位置
colors: red, green, magenta, orange
shapes: circle, square, triangle, cross
提的问题肯定是围绕着图里面物体的种类,颜色,和位置展开的。总体来说,还算一个人工造的数据集。
HD 和 知识库
我们以上图的第一个图片为例,可以用一句话描述它,
"In position top-left there is a shape of type square and color magenta; and in position top-right there is a shape of type square and color green"
我们接下来就是使用 HD-computing 用一个 向量 来表示这句话。
一个 HD vector,就是一个随机生产的,高维的,里面只有 的一个向量。这里他用的是 1000 维的,但是实际上,HD 一般大家使用 10K 维的。基本上,维数越高,效果越好。
接着定义 HD vector 的几个操作。
第一:乘法操作 
第二:加法操作 
第三:求距离(夹角)操作 
假设每一个 concept 都用一个 HD vector 来表示:
"position", "color", "shape", "top-left", "top-right", "bottom-left", "bottom-right", "red", "green", "magenta", "orange", "circle", "square", "triangle", "cross"
(这些 vectors 是随机产生的)
那么上面那句就可以表达成: 
这个东西有什么用呢?
他有个非常有个有趣的性质。就是这个东西在某种程度上是可逆 的。
我们拿到一个图片的 m encoding 之后,假如我们想得到在 top-left 位置上物体的 shape(这个叫做 decode)。我们可以做如下操作
m\otimes \text{top-left} \otimes \text{shape}
得到的这个 vector 虽然不是 square,但是他离 square 的距离要比其他形状更近。所以,我们是可以利用 HD vector 来实现非精确的 decoding 的。
在 HD 上面查询
假如我们想查询跟 位置 有关系的问题。
Positions = {top−left, top−right, bottom−left, bottom−right}
以下的问题就可以这么来做:

对于一张图片 I ,我们有上面类似的五个问题,每个问题都一个要么是 False,要么是 True 的回答,所以我们就造出了一个数据集 
这里的 q可以理解成是 label。
Training and Testing
然后他们使用这样一个数据集来训练一个新的网络,这个网络的输入是 图片,输出是一个 1000 维的向量。

这个地方表示不理解为什么还要另外 train 一个网络。。。
