首先,输入的隐藏状态 X X X(hidden states )会被拆分成图像隐藏状态 ( X I X_I XI)和文本隐藏状态 ( X T X_T XT)。
其中,输入的隐藏状态为 X ∈ R B × H × ( L I + L T ) × D X \in \mathbb{R}^{B \times H \times (L_I + L_T) \times D} X∈RB×H×(LI+LT)×D:
B B B:批次大小(batch size)
L I L_I LI:图像序列的长度
L T L_T LT:文本序列的长度
H H H:注意力头的数量(Attention heads)
D D D:隐藏层的大小(hidden size)
注意力计算
视觉专家模块中的注意力机制计算过程如下:
Q、K、V的计算 :
Q = concat ( X I W I Q , X T W T Q ) Q = \text{concat}(X_I W_I^Q, X_T W_T^Q) Q=concat(XIWIQ,XTWTQ)
K = concat ( X I W I K , X T W T K ) K = \text{concat}(X_I W_I^K, X_T W_T^K) K=concat(XIWIK,XTWTK)
V = concat ( X I W I V , X T W T V ) V = \text{concat}(X_I W_I^V, X_T W_T^V) V=concat(XIWIV,XTWTV)
其中 W I Q , W I K , W I V W_I^Q, W_I^K, W_I^V WIQ,WIK,WIV 是视觉专家的 QKV 矩阵, W T Q , W T K , W T V W_T^Q, W_T^K, W_T^V WTQ,WTK,WTV 是原始语言模型的 QKV 矩阵。
注意力权重计算 :
使用上一步得到的 Q、K、V ,代入下面的公式,进行计算:
Attention ( X , W I , W T ) = softmax ( Tril ( Q K T ) D ) V \text{Attention}(X, W_I, W_T) = \text{softmax}\left(\frac{\text{Tril}(QK^T)}{\sqrt{D}}\right) V Attention(X,WI,WT)=softmax(D Tril(QKT))V
在计算完注意力后,视觉和文本特征会被进一步传递到前馈神经网络(FFN)层 :
FFN ( X ) = concat ( FFN I ( X I ) , FFN T ( X T ) ) \text{FFN}(X) = \text{concat}(\text{FFN}_I(X_I), \text{FFN}_T(X_T)) FFN(X)=concat(FFNI(XI),FFNT(XT))
其中 FFN I \text{FFN}_I FFNI 和 FFN T \text{FFN}_T FFNT 分别是视觉专家和原始语言模型的前馈神经网络。
损失函数 :通常使用 交叉熵损失 (cross-entropy loss)来计算模型生成的文本序列与真实描述序列之间的差异,损失函数定义为:
Loss = − ∑ t = 1 T log P ( y t ∣ x , y < t ) \text{Loss} = -\sum_{t=1}^{T} \log P(y_t|x, y_{<t}) Loss=−t=1∑TlogP(yt∣x,y<t)
其中, P ( y t ∣ x , y < t ) P(y_t|x, y_{<t}) P(yt∣x,y<t) 表示在给定图像 x x x 和前面生成的文本 y < t y_{<t} y<t 的条件下,预测下一个标记 y t y_t yt 的概率。
预训练第二阶段:图像描述损失函数 + 指代表达理解(REC)任务的损失函数
在第二阶段 ,除了图像描述任务外,还引入了 指代表达理解(REC)任务 。REC任务要求根据物体的文本描述预测图像中的边界框位置 ,采用类似VQA的训练形式(问题:物体在哪里?答案: [ x 0 , y 0 , x 1 , y 1 ] [x_0,y_0,x_1,y_1] [x0,y0,x1,y1])。
REC任务的损失函数 :REC任务需要模型根据物体的文本描述预测图像中的边界框位置。具体来说问题:物体在哪里?答案: [ x 0 , y 0 , x 1 , y 1 ] [x_0,y_0,x_1,y_1] [x0,y0,x1,y1]。为了训练这一任务,使用 下一个标记预测的损失函数,即类似于图像描述任务的交叉熵损失,但这次输出是坐标值。
损失函数 :对于 REC 任务,损失函数可以形式化为:
Loss REC = ∑ i = 1 N MSE ( y pred , i , y gt , i ) \text{Loss}{\text{REC}} = \sum{i=1}^{N} \text{MSE}(y_{\text{pred}, i}, y_{\text{gt}, i}) LossREC=i=1∑NMSE(ypred,i,ygt,i)
其中, y pred , i y_{\text{pred}, i} ypred,i 是模型预测的边界框坐标, y gt , i y_{\text{gt}, i} ygt,i 是真实的边界框坐标, N N N 是边界框的数量。