transformer
纯attention, 并行化 ,克服了卷积难以对长的序列进行建模的缺点
使用 multi-head attention 的原因是 模拟卷积神经网络的多通道机制
transformer 使用了 auto-regressive (自回归机制),过去时刻的输出会作为当前时刻的输入,这一点在解码器部分有所体现,因为在做预测的时候是看不到当前时刻之后的输出的
在自注意力机制里面,每一次都是能够看到完整的输入,因此通过使用带掩码的注意力机制对解码器进行训练,使得在预测第t个时刻的输出时,只能看到t个时刻之前的输出
layer normal 和 batch normal 的区别:
batch normal 是对整个batch构成的特征图中,对每一个特征进行归一化,也就是减去 feature map 某一列构成的向量的均值,再除以方差
layer normal 是对整个batch构成的特征图中,对每一个样本进行归一化,也就是减去 feature map 某一行构成的向量的均值,再除以方差
预测的时候使用的是全局的均值和方差
相似度 compatibility function 不同的注意力机制有不同的算法
transformer 使用的是 scaled dot-product attention 是一种最简单的注意力机制
query 和 key 的大小是等长的,每个 query 和 key作内积,如果内积的值越大,这两个向量的相似度越高,内积为0,两个向量内交,那么相似度为0
算出相似度之后,除以根号下 dk , dk也就是向量的长度,然后再使用一个 softmax 来得到权重,得到n个非负的,且向加值为1的权重,然后将这个权重作用在value上得到最终的输出
为什么要除以根号下 dk?
因为不除以的话,当dk比较大,也就是每个向量比较长的时候,做点积的时候,值会比较大或者比较小,值与值之间的差距就会比较大,在使用softmax作预测的时候,预测值就会偏向于0或者1,这时候就会认为训练的比较好,从而使得梯度变小,所以除以根号下dk是一个不错的选择
MLP 的作用是进行一个语义空间的转换,对序列信息进行一个有效的使用,也就是对position encoding 的编码进行一个有效的转化使用
embedding 层的权重乘上了根号下 dmodel = 512 为了保证和 position encoding 那一部分保证同一个 scale
能不能 文本 + 图像 multi-modility 的方法
可以使用 resnet之后的特征作为transformer的输入来降低输入序列的长度,这在vit论文中已经进行过尝试
卷积神经网络具有的先验信息(归纳偏置):
1. locality
2. 平移不变性:卷积是一个滑动窗口的操作,先做平移还是先做卷积的结果都是一样的
借鉴 bert 里面的 extra learnable embedding , vit 里面使用了 cls 的分类头,
因为所有的 token 都和其他的 token 做交互信息,因此作者相信,这个额外的 cls token能够从其他的 embedding 里面学习到有用的信息,从而最后根据cls的输出做最后的分类判断
transformer encoding 的输入和输出大小是一样的,因此想要叠多少个块就可以叠多少个块
transformer 对图像的 2d 信息利用的非常少,不像 CNN 一样,每层都使用了CNN 自存在的归纳偏置,只是在分割 patch 的时候利用到了位置编码