本文用于记录自己在学习Transformer中理解,方便日后复习,文章中所使用图片全部来自于参考文章中所列文章或视频,仅用于个人学习使用。

Self-attention

Personal understand

self-attention可以和fc交替使用,输入几个vector,就会输出几个vector。

image-20241206131028202

默认计算注意力的方法使用Dot-product

假设在a之前还有其它运算,所以命名为 $ a^1, a^2,…$。

  • 如图,query,key,value是如何产生的?

    有一个$ W^q $矩阵,通过和输入$a^i$相乘,就能得到$q^i$,也就是query。

    同理。也存在一个$W^k, W^v$矩阵,和输入$a^i$相乘,就得到 $k^i, k^v$,也就是key, value。

    $query和key进行一个dot product就得到了注意力分数也就是图中所示的\alpha$

    以$a^1$为例,$q^1$ dot product $k^1以后得到了\alpha_{1,1}, q^1和k^2得到了\alpha_{1,2}…$

    **我的理解就是$\alpha_{1,j}$就是特征1和特征1、特诊2…特征j之间的注意力分数,为了更好运算,将这些进行一个softmax,统一到(0, 1)之间,得到了 **${\alpha _{1, j}}^{‘}$。

image-20241206131316164

之后将$\alpha^{‘}_{1,j}和对应的v^j相乘,就得到了b^1$。

image-20241206132747390

上面的两张图是对输入$a^1$进行计算的一个过程。其他的输入也一样。

image-20241206133116827

Matrix Multiply show

image-20241206133314813

image-20241206133534659

image-20241206133708410

image-20241206133823384

在整个self-attention过程中,只有 $W^k,W^v,W^q$ 是需要通过训练学习的

Multi-head Self-attention

image-20241206151609909

image-20241206151742513

Positional Encoding

位置编码通过一种特殊的方式产生,不一定要通过sin/cos产生,也可以通过网络学习产生。

Compare

self-attention就是复杂的CNN

普通的RNN只考虑了左边最近的一个词,而且无法并行处理,而self-attention可以并行处理,并且考虑了所有词之间的关系。

Transformer

Encoder

image-20241206155029432
Encoder可以简化成这种结构 ,里面包含

  • residual connection

  • layer norm

image-20241206155823308

每个block的结构又如下图所示
image-20241206155316616

image-20241206155536850

Decoder

Input & Output

voc_size:就是可能输出的单词总数,比如26个字母,或者2000个汉字

image-20241206161249953

这里的distribution经过一个softmax,加起来的总和是1,选择一个概率最大的,作为decoder的下一个输入,Decoder看到的输入其实就是自己上一次的输出,所以是可能看到错误的。

image-20241206161453825

Masked multi-head-attention

image-20241206161732336

可以注意到Decoder中有一个Masked Multi-Head Attention,这里的masked的意思就是看不到在输入之后的内容

比如处理 $a^1$时,只能和$a^1自己计算得到b^1$,处理$a^2时,只能和a^1,a^2进行计算得到b^2,在处理a^4时,则是和a^1,a^2,a^3,a^4进行计算得到b^4$。

image-20241206161950727

image-20241206162515398

为什么要用masked?

本文刚开始提到的self-attention的输入是一次性给进去的,所以计算注意力时可以使用后面的,而transformer中的输出其实是一步一步产生,也就是处理$a1$时,并不知道$a^2$的值,处理$a^2时,只能用a^2,a^1,而并不知道a^3,a^4$。所以这里就要用masked。

这里要有特殊符号,BEGIN和END,用于开始开始和结束。

image-20241206163352894

Cross attention

Decoder提供一个query,Encoder提供key和value,使用q和k计算注意力分数以后,再和c相乘,就是交叉注意力机制的过程。

image-20241206164332001

Training

image-20241206165024419

image-20241206165109208

Decoder每一个输出都有一个cross entropy,希望cross entropy的总和最少,同时模型还要能够输出结束标记END。

参考文章(视频)

【研1基本功 (真的很简单)注意力机制】手写多头注意力机制_哔哩哔哩_bilibili

Transformer终于有拿得出手得教程了! 台大李宏毅自注意力机制和Transformer详解!通俗易懂,草履虫都学的会!_哔哩哔哩_bilibili

【官方双语】GPT是什么?直观解释Transformer | 深度学习第5章_哔哩哔哩_bilibili

从编解码和词嵌入开始,一步一步理解Transformer,注意力机制(Attention)的本质是卷积神经网络(CNN)_哔哩哔哩_bilibili

Transformer论文逐段精读【论文精读】_哔哩哔哩_bilibili