AI学习笔记3——transformer

AI学习笔记3

Transformer模型


  • Q1:注意力机制通俗来讲是什么,干什么的?

    就是对于特征比如说f_1,\dots,f_n,如何去衡量那个特征比如说f_i重要,给所有的特征加上计算学习出一个权重系数,以帮助更好地获得主次,学到更好地特征,往往被用于特征提取的过程

  • Q2:注意力机制中W_QW_K以及W_V之间与词向量x之间的关系是什么,或者换句话说头机制是什么?

    [图片上传失败...(image-a485e-1677241763573)]
    如上图对应有x的embedding向量,我们通过学习函数,学的到一组W_QW_K以及W_V,这样将词堆积之后与W_QW_K以及W_V进行向量乘机得到对应的QK以及V,即Queries、keys以及values。我们可以知道,如果两向量a_1, a_2无关则说明,a_1.a_2的值会接近于0的。所以也就是x_i用它自己的\vec{q_i}去搜索问询x_j\vec{k_j},通过一个内积\vec{qi} \cdot \vec{k_j}就可以知道词J对于词I的重要程度。(这里还没有考虑维度的差异,需要除以一个dim,然后重要程度要在上下文语境中做一个softmax操作得到对应的权重)。
    \begin{aligned} \begin{equation*} \mathbf{X}\mathbf{W_Q} = \begin{pmatrix} \vec{x_1} \\ \vec{x_2} \\ \vdots \\ \vec{x_n} \end{pmatrix}\cdot W_Q = Q = \begin{pmatrix}\vec{q_1}\\ \vec{q_2} \\ \vdots \\ \vec{q_n} \end{pmatrix} \end{equation*} \end{aligned}
    \begin{aligned} \begin{equation*} \mathbf{X}\mathbf{W_K} = \begin{pmatrix} \vec{x_1} \\ \vec{x_2} \\ \vdots \\ \vec{x_n} \end{pmatrix}\cdot W_K = K = \begin{pmatrix}\vec{k_1}\\ \vec{k_2} \\ \vdots \\ \vec{k_n} \end{pmatrix} \end{equation*} \end{aligned}
    $$\begin{aligned}
    \begin{equation*}
    \mathbf{X}\mathbf{W_V} = \begin{pmatrix}
    \vec{x_1} \

      \vec{x_2} \\
      \vdots \\
      \vec{x_n}
      \end{pmatrix}\cdot W_V = V = \begin{pmatrix}\vec{v_1}\\ \vec{v_2} \\ \vdots \\ \vec{v_n} \end{pmatrix}
      \end{equation*}
    
    \end{aligned}$$

    然后一组W_QW_K以及W_V得到的是一个词X的特征,我们成为一个头。多头意味着从多个角度得到特征,然后将每个头得到的特征进行拼接之后输出(连下游任务或者作为作为隐藏层输出)

  • Q3:为什么要除以一个\sqrt{D_k}

    最后要除以一个\sqrt{D_k}这个是归一化处理,减少维度带来的影响。也就是理论上维度越长,\vec{qi} \cdot \vec{k_j}的值就更有可能更大。之所以是根号,到时候在论文中有推导。

  • Q4:为什么采用多头注意力机制?具体是怎么实现的?

    对于一个词的看法,需要从多个角度去看,可以类比CNN对于图像有着不同的通道一样,卷积的时候同层的不同卷积一样。生活过程中,我们在对待某件事务,我们的理解都是不一样的,一个人的看法可能是片面的,多个人的看法,叠加起来,就可以还原事件原本立体的面貌一样。比如最后想得到关于词X的100维度特征,采用五维度。我们可以通过自注意力机制,每个头机制得到一个20维的特征,让后将五个同时拼接concat。

  • Q5:encoder的backbone是什么样的?

    就是一层单一的自注意力机制,然后将多头得到的特征f,输入到BN层中,同时采用残差模块与原先的embedding向量相加。这就要求了向量维度相同。

  • Q6:transformer 的缺点?

    位置信息表达不够明显,颠倒位置,出现的位置不会对结果产生影响,相当于放在哪里都无所谓,但这个实际就有些不符合了,我们希望模型能对位置有额外的认识。比如河马吃我 和我吃河马是两个相反的意思。我的想法是能不能把位置信息编码 positional encoding?
    位置编码是否需要更新?我的想法就是如果你从句子的位置来说的话,是不需要更新的?但是不同句型的不同位置是不一样的,需要去更新?大多数顶会是不去做更新的。

  • Q7:分类任务的decoder怎么去做?你transformer得到的加上位置encoding都是单个词的特征,但是一个句子才能分类阿,所以需要全局信息。

    VBERT里面采用CLS最为分类代表词,作为分类token,参加attention成为全局特征,参与分类器,他无所谓,随机初始化。占位符总结别人特征,整合句子中其他词的特征。(CLS统筹句意)
    [图片上传失败...(image-2c9a5-1677241763574)]

  • Q8:Attention 包括self-cross attention。什么是cross-attention? MASK机制的作用(去年作业推荐系统也用到了这个东西)?

    对于输出的第一个词,我们需要随机初始化输出编码,然后与encoder后的前句意思,进行一个注意力机制,然后得到权重,之后计算得到编码,然后进行常用词的2w类分类。对于第二个词重复这个操作,但是他还需要跟第一个decoder的词有关系,所以需要对第一个词进行一个self-attention(机器翻译是从前向后翻译的,所以self-attention没有考虑后面的),所以加入了mask机制,来控制当前值能够与那些词参与self-attention。同时先计算cross然后算本层的self,但是不一定。decoder的每一层都需要做cross-attention.

    [图片上传失败...(image-81d721-16772417
    NLP_decoder_process.png
self_attention.png
transformer_decoders.png

63574)]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容