【论文】eney, Damien, Peter Anderson, Xiaodong He, and Anton Van Den Hengel. Tips and tricks for visual question answering: Learnings from the 2017 challenge.(pdf)
主要思想
论文提出一些细节上优化提升 VQA 的方法,主要包括如下:
- sigmoid output:在结果预测时,允许有多个答案,对每个答案采用 sigmoid 方法预测
- use soft scores as ground truth targets:预测时采用回归预测,预测概率,而不是传统的分类
- gated tanh activations:激活函数采用 tanh
- image features from bottom-up attention:图像特征提取采用目标检测的方法
- pretrained representations of candidate answers:初始化输出层的权重
- large mini-batches and samrt shuffling:训练过程中使用 large mini-batch 和混洗的方式
模型架构
模型前面采用了常见的 joint embedding of input question and image,后半部分对候选答案使用了一个多标签分类器
Question embedding
使用 GloVe 提取问题语义特征,整个数据集中只有 0.25% 问题超过了 14 个单词,因此文章考虑一个问题最多包含 14 个单词,超出的全部丢弃。使用 Wikipedia / Gigaword 语料库上预训练好的 GloVe (Global Vectos for Word Representation)来进行词特征的向量化,每个单词背转化为一个 300 维的向量。对于少于 14 个单词的语句,采用 end-padded 补齐。于是,一个问题就可以被表述为 14×300 的矩阵,送入 GRU(Recurrent Gated Unit),GRU 的 hidden_size = 512,我们提取最有一个状态作为我们的问题语义向量 qqq
Image features
视觉特征的注意力模型 bottom-up attention 是指通过 faster-rcnn 的检测区域提取不同类别物体的特征,这种方式也可以叫做给予显著性的 attention 机制。图像通过 faster-rcnn 后,获得一个 K×2048K\times2048K×2048 的矩阵,KKK 代表图片有多少个位置,每个位置由一个 204820482048 维的向量表示,这个向量是 KKK 对应区域的图像特征编码,KKK 是从 faster-rcnn 的 top-K 中确定的
实验中作者既选择了一个固定值 K=36K=36K=36,也设定 KKK 也可以是一个自适应的数值,允许 KKK 随图像的复杂度而变化,最大上限是 100,这种情况下 VQA v2 产生的 KKK 的均值是每张图片 60 个区域
这种注意力机制不受训练影响,应该属于 hard attention。faster-rcnn 在 visual genome 数据上训练,同时加入更多标签,使 faster-rcnn 能够提取到更精细的区域与特征,最后实验证明,bottom-up attention 能够使模型性能提升 6%
Image attention
文中的模型采用 question-guided attention(作者将这一步成为 top-down attention,区别于 bottom-up attention)机制,该机制通过问题的语义特征指导视觉特征
对图片上的每个位置 i=1,?,Ki=1,\cdots,Ki=1,?,K,图像特征 viv_ivi? 和问题语义特征 qqq 结合在一起,共同经过一层非线性映射 faf_afa?,然后再经过一个线性层得到一个标量注意力权重 αi,t\alpha_{i, t}αi,t?
ai=wafa([vi,q])α=softmax(a)v^=∑i=1Kαivia_i=w_af_a([v_i, q])\\ \alpha = softmax(a)\\ \hat v=\sum_{i=1}^K\alpha_iv_iai?=wa?fa?([vi?,q])α=softmax(a)v^=i=1∑K?αi?vi?其中,waw_awa? 实现学习参数的向量。所有位置的注意力权重经过 softmax 函数进行归一化。然后,所有位置的图像特征以归一化的注意里权重为权值,然后加和得到一个大小为 2048 的向量 v^\hat vv^
注意到这种注意力机制是 one-glimpse attention,区别于其他复杂的注意力机制(stacked、multi-head 以及 bidirectional attention)
Multimodal fusion
多模态特征融合 joint embedding 采用对应位置相乘的方式(hadamard product),问题语义特征 qqq 和图像特征 v^\hat vv^ 经过非线性层处理后通过 Hadamard product 结合起来 h=fq(q)?fv(v^)h=f_q(q)\circ f_v(\hat v)h=fq?(q)?fv?(v^)
Output classifier
候选答案集合在文中被称为输出词汇表,从训练集中出现 8 次以上的所有正确答案中预先选出来,最终得到一个 N=3129N=3129N=3129 的候选答案集。作者将 VQA 是做一个多标签分类问题。VQA v2 中每一个训练的问题都有一或多个回答,每一回答对应 [0,1][0,1][0,1] 中的一个 soft accuracy。之所以会出现多种回答和 [0,1][0,1][0,1] 准确率,是因为人们在标注时的分歧,尤其是模棱两可的问题或者相同意思不同表述的回答。由于标注的模糊性,训练集有 7% 的问题无法从输出词汇表中给出正确答案。作者没有丢弃这部分问题,而发现了一个有意思的现象——这些模糊问题都会将输出词汇表中所有的候选词的预测得分推向零
输出分类器将 hhh 输入到非线性变换层 fof_ofo?(由后面知道这个非线性变换层 fof_ofo? 表示 gated tanh activations),然后在经过一个线性变换得到预测得分 s^\hat ss^,可以描述为如下式子 s^=σ(wo,fo(h))\hat s=\sigma(w_o, f_o(h))s^=σ(wo?,fo?(h))其中 wo∈RN×512w_o\in\mathbb R^{N\times512}wo?∈RN×512 是一个学习矩阵
sigmoid 函数将最终得分归一化到 (0,1)(0,1)(0,1),损失函数设计如下所示,类似于交叉熵损失,只不过作者使用了的是 soft target scores
L=?∑i=1M∑j=1Nsijlog(s^ij)?(1?sij)log(1?s^ij)L=-\sum_{i=1}^M\sum_{j=1}^Ns_{ij}log(\hat s_{ij})-(1-s_{ij})log(1-\hat s_{ij})L=?i=1∑M?j=1∑N?sij?log(s^ij?)?(1?sij?)log(1?s^ij?)其中 MMM 表示训练问题的数量,NNN 表示训练候选答案的数量,sss 表示 soft accuracy of ground truth answer
这个损失函数有两个优点:
- sigmoid 的输出使每个问题可以预测多个答案
- 使用 soft scores 作为 targets 可以比 binary targets 更利于训练,因为 soft scores 可以捕捉到在 ground truth 标注中出现的一些偶然不确定情况
Pretraining the classifier
训练过程中,学习矩阵 wow_owo? 的一行对应一个候选答案。为了使预测更准确,从两个方面使用候选答案的先验信息初始化 wow_owo? 的行:
- 从语言学的角度,作者利用了每个答案的 GloVet word embeddings 作为特征。如果出现答案不能和预先训练好的 embedding 精确匹配时,作者会在检查拼写、删除连字符号或从多单词表达中保留单个表达后使用最近匹配,得到的结果记为 wotextw_o^{text}wotext?,大小为 300
- 从视觉的角度,利用 Google 搜索与候选答案相关的 10 张图片,然后送入预训练好的 ResNet-101 上提取特征,将 mean-pool 处理后的 10 个特征做平均,产生一个大小为 2048,记为 woimgw^{img}_owoimg?
有了预设计好的 wotextw_o^{text}wotext? 和 woimgw_o^{img}woimg?,然后在训练集上使用小学习(0.5 和 0.01)率微调。最终,我们有如下的组合方式 s^=σ(wotextfotext(h)+woimgfoimg(h))\hat s=\sigma\left(w_o^{text}f_o^{text}(h)+w_o^{img}f_o^{img}(h)\right)s^=σ(wotext?fotext?(h)+woimg?foimg?(h))
下图展示了引入 pretrained wotextw_o^{text}wotext? 和 woimgw_o^{img}woimg? 的结果
Non-linear layers
前面一直提到了一个非线性变换层,通常的做法是使用 FC + ReLU
但是文中作者受 LSTM 和 GRU 中门函数的启发,提出了下面的 gated hyperbolic tangent activatio,每一个非线性变换层 fa:x∈Rm→y∈Rnf_a:x\in\mathbb R^m\rightarrow y\in\mathbb R^nfa?:x∈Rm→y∈Rn 定义为
y~=tanh(Wx+b)g=σ(W′x+b′)y=y~?g\tilde y=tanh(Wx+b)\\ g=\sigma(W'x+b')\\ y=\tilde y\circ gy~?=tanh(Wx+b)g=σ(W′x+b′)y=y~??g 其中 ggg 可以被视为作用在中间激活 y~\tilde yy~? 上的一个门函数,用于控制信息的有效传递