提到Transformer,不得不提起注意力机制。众所周知,在循环模型中,存在序列的并行化。在并行化的前提下,内存会限制跨样本的批处理。注意力机制对序列的依赖关系进行建模,与循环神经网络结合使用,在一定程度上突破了内存的限制。它往往作为Transformer中的核心组成部分存在。以下简单介绍编码器和解码器。
编码器:编码器由N = 6 个相同的层堆叠而成。每⼀层包含两个子层。第⼀个子层是多头自注意力机制,第⼆个⼦层是⼀个简单的、按位置全连接的前馈网络。
我们在训练大模型时,模型会造成梯度消失,从而导致底层网络无法更新,模型难以收敛。这个时候,为了避免梯度消失的情况,我们通过残差连接让梯度可以直接穿越子层,确保底层也能获得有效梯度。这就是残差连接的应用。其次,我们需要计算该token的所有维度的均值和方差,让输入更加稳定,这就是层归一化。可以想象深层网络中梯度在反向传播中不断相乘,如果每层的梯度都略小于1,在此情况下相乘,就会不断趋近于0,逐层衰减,直到消失。残差连接可以跳过计算,使梯度能直接传回前层,避免这种衰减。
计算对应token所有维度的均值和方差,这样可以更精确地进行定位,从而使输入更加稳定。输入稳定往往在一定程度上决定了训练效率。在原文中,每个子层的输出为LayerNorm(x + Sublayer(x)),其中Sublayer(x)是⼦层自身实现的函数,x为子层的输。需要特别注意的是,只有进入下一层,x才会成为下一层的输入。我们需要应用这些残差连接,即公式中的x和LayerNorm,使得模型中的所有⼦层以及嵌⼊层都产⽣维度为dmodel = 512 的输出。Transformer 要求所有层的输出维度统一(512),既是为了让多头注意力的 Q/K/V 线性变换维度统一,也为了方便堆叠 N 层结构。
解码器:解码器也由N = 6 个相同的层堆叠⽽成。除了每个编码器层中的两个⼦层之外,解码器还插⼊了第三个⼦层。每个子层先进行残差连接再层归一化(详细请参考上文)。需要特别说明的是解码器第一个子层使用Masked Self-Attention,避免模型看到未来信息。在编码器堆叠输出时,解码器将执行多头注意力机制。多头注意力机制可以让模型更加全面地看到不同特征和维度的位置关系,从而大幅度提高理解能力。注意力机制由查询,键和值组成,权重为Attention(Q, K, V) = softmax(Q·Kᵀ / √d_k) · V,其中Q与 K的相似度决定注意力分配,最终对V进行加权求和。
感谢阅读!欢迎指正!

1550

被折叠的 条评论
为什么被折叠?



