1、图片切分后的向量,在前面连接一个cls_token的作用?
????????类似于BERT中的[class] token,ViT引入了class token机制,其目的:因为transformer输入为一系列的patch embedding,输出也是同样长的序列patch feature,但是最后要总结为一个类别的判断,简单方法可以用avg pool,把所有的patch feature都考虑算出image feature。但是作者没有用这种方式,而是引入一个类似flag的class token,放在了embedding的第0个位置,这样即使sequence的长度n发生变化,class embedding的位置编码依然是固定的,class token其输出特征加上一个线性分类器就可以实现分类;
2、图像的transformer为何需要pos_embedding(位置编码)?
????????Transformer 与LSTM的一个明显区别:lstm作为rnn模型是迭代进行的,有语言顺序的,而Transformer是并行的,它没有时序关系。因此,需要加入位置编码;
3、为何使用层归一化nn.LayerNorm?
????????transformer是学习一个序列的特征,相似的有lstm等。倘若在模型中加入batchnorm,那么假设我们输入的是一些句子,那batchnorm是把每个句子的第一个词拿出来做normalization(batch方向做normalization);而layernorm是把每句话的所有词拿出来normalization(通道方向做normalization)。词之间的信息是储存在同一个句子里的。因而用layernorm更合理。
4、transformer中提到的token具体含义?
????????token包含:class token、patch token,在NLP叫每一个单词为token,然后有一个标注句子语义的标注是CLS,在CV中就是把图像切割成不重叠的patch序列(其实就是token,即图像切块就是token)。就是说之前的attention大多使用在seq2seq任务中,例如在机器翻译中,attention作用在源句子token(token就指的是单词或词语)和目标句子token之间,但是transformer的self-attention作用在源句子的token之间。 ?
|