ppdlm:流行的深度学习模型

流行的深度学习模型,其中的思想以及模型在后面其他任务中也经常使用,所以这里介绍一些常用好用的模型.

Attention Is All You Need

abs

主流的序列转换模型基于复杂的递归或卷积神经网络,其中包括一个编码器和一个解码器。性能最好的模型还通过注意力机制将编码器和解码器连接起来。我们提出了一种新的简单网络架构—“transformer”,它完全基于注意力机制,无需递归和卷积

intro

递归神经网络,特别是长短期记忆和门控递归神经网络,已被牢固确立为语言建模和机器翻译等序列建模和转译问题的最先进方法。自此以后,许多人继续努力推动递归语言模型和编码器-解码器架构的发展。

递归模型通常按照输入和输出序列的符号位置进行计算。将位置与计算时间的步长对齐,它们会生成隐藏状态 h~t~ 的序列,作为前一个隐藏状态 h~t-1~ 和位置 t 的输入的函数。这种固有的序列性质排除了训练实例内的并行化,而在序列长度较长时,这一点变得至关重要,因为内存约束限制了跨实例的批处理。最近的研究通过因式分解技巧和条件计算显著提高了计算效率,同时也改善了后者的模型性能。然而,顺序计算的基本限制仍然存在。

在各种任务中,注意力机制已成为引人注目的序列建模和转导模型的一个组成部分,它可以对依赖关系进行建模,而无需考虑其在输入或输出序列中的距离。然而,除了少数情况,这种注意机制都是与递归网络结合使用的。

比如下图,利用一个双向RNN得到每个token的状态,利用一个简单的ffn聚合这些状态作为输出token的上一个状态

Image showing an encoder/decoder model with an additive attention layer

在这项工作中,我们提出了 Transformer 模型架构,它摒弃了递归而是完全依赖注意力机制来绘制输入和输出之间的全局依赖关系。Transformer 可以大大提高并行化程度,在 8 个 P100 GPU 上只需训练 12 个小时,翻译质量就能达到新的水平。

Background

减少顺序计算的目标也是Extended Neural GPU、ByteNet和 ConvS2S的基础,它们都使用卷积神经网络作为基本构建模块,并行计算所有输入和输出位置的隐藏表示。在这些模型中,将两个任意输入或输出位置的信号联系起来所需的运算次数随位置间距离的增加而增加,ConvS2S 是线性增加,ByteNet 是对数增加。这就增加了学习远距离位置之间依赖关系的难度。在 Transformer 中,这将被减少到一个恒定的操作数(O(1)),尽管代价是由于平均注意力加权位置而降低了有效分辨率

自我注意(有时也称为内部注意)是一种注意机制,它将单个序列的不同位置联系起来,以计算序列的表征。自我注意已成功应用于多种任务中,包括阅读理解、抽象概括、文本引申和学习与任务无关的句子表征。

model architecture

大多数转导模型都具有编码器-解码器结构.在这里,编码器将输入的符号表示序列 (x1, …, xn) 映射为连续表示序列 z = (z1, …, zn)。 在给定 z 的情况下,解码器会逐个元素生成一个符号输出序列(y1, …, ym)。在每一步中,模型都是自动回归的,在生成下一步时,会消耗之前生成的符号作为额外输入。

image-20231108115505228

Encoder

编码器由 N = 6 层相同的层堆叠组成。每一层都有两个子层。第一个是多头自注意机制,第二个是简单的位置全连接前馈网络。我们在两个子层的每个周围都采用了残差连接,然后进行层归一化。也就是说,每个子层的输出都是 LayerNorm(x + Sublayer(x)),其中 Sublayer(x) 是子层本身实现的函数。为了方便这些残差连接,模型中的所有子层以及嵌入层都会产生维数为 dmodel = 512 的输出。

Decoder

解码器也由 N = 6 层相同的层堆叠组成。除了每个编码器层中的两个子层外,解码器还插入了第三个子层,对编码器堆栈的输出执行多头关注。

与编码器类似,我们在每个子层周围采用残差连接,然后进行层归一化。我们还修改了解码器堆栈中的自我关注子层,以防止位置关注到后续位置。这种屏蔽,再加上输出嵌入偏移一个位置的事实,确保了对位置 i 的预测只能依赖于小于 i 的位置的已知输出。

Attention

注意力函数可以描述为将一个查询和一组键值对映射到一个输出,其中查询、键、值和输出都是向量。输出结果以值的加权和的形式计算其中分配给每个值的权重是通过查询与相应密钥的兼容性函数计算得出的

image-20231108120527812

上图就是一般用的q与k的计算方式,说白了就是矩阵相乘,而其中的mask是为了把其中用不上的token置为-∞,这样后面做softmax权重就是0了. 因为tensor维度都是相同的,q与k,

Scaled Dot-Product Attention

输入包括维度为 d~k~的query和key,以及维度为 d~v~的value。我们计算query与所有keys的点积,将每个点积除以 √dk,然后应用软最大函数获得值的权重。

最常用的两种注意力函数是加法注意力(additive attention)和点积(dot production)注意力。点积注意力与我们的算法相同,只是缩放因子为 1 √dk。

加法注意使用单隐层前馈网络计算相容函数(相当于用一个全连接网络得到一个输出)。虽然两者的理论复杂度相似,但点积注意力在实际应用中速度更快,空间效率更高,因为它可以使用高度优化的矩阵乘法代码来实现。

虽然在 dk 值较小的情况下,这两种机制的表现类似,但在 d~k~ 值较大的情况下,加法注意比点积注意更胜一筹。我们猜测,对于较大的 d~k~ 值,点积的幅度会越来越大,从而将软最大函数推向梯度极小的区域

也就是说除以d~k~原因是使得梯度更大,效果更好

Multi-Head attention

我们发现,将查询、键值和值分别线性投影到 d~k~、d~k~ 和 d~v~ 维度,而不是对 d~model~ 维度的键、值和查询执行单一的注意函数,这样做是有益的。

多头注意力允许模型在不同位置共同关注来自不同表征子空间的信息。而在单注意头的情况下,平均化会抑制这一点。

其中,投影是参数矩阵 W^Q^~i~∈R^dmodel×dk^ , W^K^ ~i~∈R^dmodel×dk^ , W^V^~i~∈R^dmodel×dv^ 和 W O∈R^hdv×dmodel^

Transformer的应用

在 “encoder-decoder 注意 “层中,query来自前一个decoder层,而memory keys和memory values则来自encoder的输出。这使得decoder中的每个位置都能关注输入序列中的所有位置。这模仿了序列到序列模型中典型的encoder-decoder注意机制。

encoder包含自注意层。在自注意层中,所有的键、值和查询都来自同一个地方,在这种情况下,就是encoder中上一层的输出。encoder中的每个位置都可以关注encoder上一层的所有位置。

同样,解码器中的自关注层允许解码器中的每个位置关注解码器中包括该位置在内的所有位置。我们需要防止decoder中的信息向左流动,以保持自动回归特性

通过点乘注意力中的mask实现,也就是在输出序列中,把后面的token得到的value设置为-∞,

Position-wise Feed-Forward Networks

除了注意力子层外,我们的编码器和解码器中的每一层都包含一个全连接的前馈网络,该网络分别对每个位置进行相同的处理。这包括两个线性变换,中间有一个 ReLU 激活。

虽然不同位置的线性变换相同,但各层使用的参数不同。

另一种描述方法是两个内核大小为 1 的卷积(全卷积)。输入和输出的维度为 d~model~ = 512,内层的维度为 d~ff~= 2048。

Embedding and Softmax

与其他序列转换模型类似,我们使用学习到的嵌入将输入标记和输出标记转换为维度为 d~model~的向量。我们还使用通常学习到的线性变换和softmax,将解码器输出转换为预测的下一个标记词概率,在模型中,我们在两个嵌入层和pre-softmax linear transformation之间共享相同的权重矩阵。

在嵌入层中,我们将这些权重乘以 √dmodel。

衍生

Bert

Vit

-------------本文结束感谢您的阅读-------------
感谢阅读.

欢迎关注我的其它发布渠道