VD-BERT: A Unified Vision and Dialog Transformer with BERT
https://github.com/salesforce/VD-BERT.
给定一个基于图像 I I I的第 t t t轮question: Q t Q_t Qt,以及它的对话历史:
C C C表示图像的标题,agent被要求去预测它的答案 A t A_t At,通过排名100个候选答案:
一般来说,有两种类型的解码器来预测答案:对候选答案进行排序并使用交叉熵损失进行训练的判别decoder,或者合成答案并使用最大对数似然损失进行训练的生成decoder。
首先,使用一个统一的vision-dialog Transformer 来编码vision和dialog历史,其中在输入中添加了一个正确答案,以早期融合的方式模拟它们的交互。接下来,采用基于视觉的MLM和NSP目标,使用两种类型的自我注意masked——bidirectional和seq2seq去训练视觉和对话融合模型。最后设计了一个Rank模块来进一步微调。
Faster RCNN提取图像特征:
O i O_i Oi ∈ ∈ ∈ R R R 2 ^2 2 0 ^0 0 4 ^4 4 8 ^8 8 , k k k是目标的数量(被固定在36)
将所有文本元素(标题和多轮对话)打包成一个长序列。使用WordPiece标记器将它分成一个单词序列 w w w,其中每个单词都嵌入了一个绝对位置代码,跟BERT一样。
[CLS] 开始
[SEP] 分割类型
[EOT] 对话结束标志
因此,输入序列:
x x x = ([CLS], o 1 o_1 o1,…, o k o_k ok,[SEP], C C C,[EOT], Q 1 Q_1 Q1 A 1 A_1 A1,[EOT],…, Q t Q_t Qt A t A_t At,[SEP])
为了通知模型答案预测,在 Q t Q_t Qt A t A_t At pair之间插入一个[PRED]标记。最后,将每个输入tokens嵌入与它的位置嵌入和片段嵌入(0或1,指示它是图像还是文本)和层归一化相结合。
将嵌入的vision-dialog输入表示为 H 0 H^0 H0= [ e 1 e_1 e1,…, e e e ∣ _| ∣ x _x x ∣ _| ∣],然后将它们编码成多级上下文表示 H l H^l Hl = [ h h h l ^l l 1 _1 1,…, h h h l ^l l ∣ _| ∣ x _x x ∣ _| ∣]使用 L L L堆叠变压器模块,其中第 L L L个Transformer模块表示为 H l H^l Hl =Transforemer( H H H l ^l l − ^- − 1 ^1 1), L L L ∈ ∈ ∈[ 1 1 1, L L L]。在每个Transformer模块中,前一层的输出 H H H l ^l l − ^- − 1 ^1 1 ∈ ∈ ∈ R R R ∣ ^| ∣ x ^x x ∣ ^| ∣ × ^× × D ^D D h ^h h使用多头self-attention进行聚合:
M M M是masked矩阵。
使用MLM和NSP来训练,旨在捕捉模态间(即图像-对话)和模态内(即图像-图像-对话)之间的密集交互:
文本段中15%的标记(包括像[EOT]和[SEP]这样的特殊标记)被随机屏蔽掉,并用特殊标记[MASK]替换。然后,要求模型不仅基于周围的标记,还基于图像 I I I来恢复它们(图像中不做mask处理):
对于NSP,与BERT不同:不是模拟两个句子之间的关系或图像-文本对的匹配,而是基于对图像和对话历史的共同理解来预测附加的回答是否正确:
S(·)取[CLS]位置的表示送到最后一层得到概率。
为了在辨别环境中进行训练,将选择答案的任务转化为一个逐点二元分类问题。
从候选库中抽取一个答案样本,并将其附加到输入序列中,然后要求NSP辨别所抽取的答案是否正确。使用双向self-attention(mask矩阵M都设置为0)掩码。为了避免不平衡的类分布,在每个epoch中保持正负实例的比例为1:1。在推理过程中,根据NSP heads的正类别分数对答案进行排名。
为了自回归生成答案,作者还使用seq2seq self -attention mask训练VD-BERT。将每个Transformer的输入序列分为两个子序列,上下文和答案:
通过将 M M M的左边部分设置为全0允许上下文中的tokens被完全可见。对于答案序列,屏蔽掉“未来”标记(通过设置为负无穷)以获得自回归关注(参见图2中的红点)。
在推理过程中,我们依赖于相同的统一Transformer encoder ,该encoder具有顺序MLM操作,而没有显式解码器。通过递归地在序列的末尾添加一个[MASK]标记,以触发one-step预测,然后用预测的token替换它,用于下一个token预测。解码过程基于贪婪采样,并在发出[SEP]时终止,所得的对数似然分数将用于对候选答案进行排序。
由于一些候选答案在语义上可能是相似的(例如,图2中的“brown”对“brown tan”),
作者提供了注释:该注释为100个候选答案指定实值相关性分数,[ s 1 s_1 s1,…, s 1 s_1 s1 0 _0 0 0 _0 0]带 s i s_i si ∈ ∈ ∈ [ 0 0 0, 1 1 1]。为了对此进行微调,将来自模型的所有候选答案的NSP分数组合成向量[ p 1 p_1 p1,…, p 1 p_1 p1 0 _0 0 0 _0 0]。由于密集注释的微调通常是一个学习排名(LTR)的问题,所以可以利用一些排名优化方法。本文采用List-Net with top-1 approximation作为VD-BERT的排序模块:
VisDial v0.9 and v1.0 datasets
BASE-BERT作为主干。将最大输入序列长度(包括36个可视对象)保持在250。
Adam以3e-5的初始学习率和32的batch_size来训练模型。线性学习率衰减:0.1
首先使用MLM和NSP L L L O O O S S S S S S(具有相等的系数)在4个V100 GPUs的集群上训练VD-BERT 30个epochs。
VisDial v1.0:
VisDial v0.9
消融实验:
(a)训练设置:BERT初始化最优
(b)对话上下文设置:全历史多指标最优
(c)loss设置:ListNet 和ApproxNDCG
(d)选择标准