赞
踩
Transfomer是一种深度学习模型架构,用于处理序列到序列的任务,如机器翻译、摘要生成和问答系统等。其核心思想是自注意力机制,能够同时处理输入序列中所有位置的信息,而不需要依赖于固定大小的窗口或者固定大小的卷积核。这使得Transformer模型在处理长序列时表现出色,并在各种自然语言处理任务中取得了很好的效果。
Transformer模型由编码器(encoder)和解码器(decoder)组成,其中编码器负责将输入序列编码为一系列隐藏状态,解码器则利用这些隐藏状态生成目标序列。这种架构的灵活性和高效性使得Transformer成为自然语言处理领域的一个重要里程碑,并且在许多实际应用中被广泛应用。
输入序列中的每个token(文本的最小单元)映射到一个高维向量空间中,这些向量被成为词嵌入(word embeddings),它们捕获了单词的语义信息和上下文相关性,通常是通过一个可训练的embedding矩阵查找得到,这个矩阵的每一行对应一个token的embedding。
由于transformer没有使用循环或卷积来处理序列,因此需要一种方式来处理序列中token的顺序信息。为此,就引入了位置编码,通过将每个位置编码为一个向量,然后将其与token的embedding相加来表示位置信息。
PE计算公式如下:
pos表示单词在句子中的绝对位置,pos=0,1,2...;dmodel表示词向量的维度(这里为512);2i和2i+1表示奇偶性,i表示第几维。
对于每个token,最终的embedding是将token embedding和对应位置编码相加而得到的。
Decoder的输入和Encoder是一样的,不同的是Encoder接受source数据,Decoder接受target数据。比如要完成"I love you."到“我爱你。”的翻译,Encoder接受"I love you.",Decoder接受“我爱你。”,只有在训练时才会接受Output Embedding,做预测的时候时没有的。
Encoder block是由6个相同的encoder堆叠成的,Nx=6。每个encoder由Multi-Head Attention(多头注意力)和Feed Forward(全连接神经网络)组成。
首先介绍一下self-attention:
假设输入序列是"Multi-Head Attention",则x1和x2就是"Multi-Head"和"Attention"添加过位置编码后的词向量,然后词向量通过三个权值矩阵WQ,WK,WV,转化成计算Attention值所需的Query,Keys,Values向量。假设词向量是512维,X矩阵的维度是(2,512),WQ,WK,WV均是(512,64)维,得到的Query,Keys,Values均是(2,64)维。
得到Q,K,V后,就可以计算Attention的值。
Multi-Attention就是在self-attention的基础上,对于输入的embedding矩阵使用多组WQ,WK,WV得到多组Query,Keys,Values,然后每组分别计算得到一个Z矩阵,将多个Z矩阵拼接。该模型是用了8组WQ,WK,WV。
Add
在Z的基础上加一个残差块,防止在深度神经网络训练中发生退化问题。
上图为一个残差块的构造,X是输入,F(x)是经过第一层线性变化并激活后的输出。在第二层线性变化后、激活之前,F(x)加入了输入值x,然后再激活输出。
要完成恒等映射,只要使F(x)=0,而一般初始化神经网络参数就是设置[0,1]之间的随机数,经过网络变换,很容易接近于0.
并且relu函数能够将负数激活为0,过滤了负数的线性变化。这样当网络自己决定哪些层是冗余层时,使用resnet很大程度上解决了学习恒等映射的问题,使得有了这些冗余层和没有这些冗余层的网络效果相同,解决网络退化问题。
Normalize
在神经网络训练之前,需要对输入数据进行Normalize归一化,为了加快训练的速度和提高训练的稳定性。这里使用的是Layer Normalization(LN)。
但为什么不使用Batch Normalization(BN)?因为LN是在同一个样本中不同神经元之间进行归一化;BN是在同一个batch中不同样本之间进行归一化,是对于同一维度的。但NLP(自然语言处理)中输入的都是词向量,单独去分析它每一维度是没有意义的,所以不用BN
全连接层公式
这里是一个两层的神经网络,先线性变换,再ReLU非线性,再线性变换。x即为Multi-Head Attention输出的Z。
假设Z是(2,64),W1是(64,1024),W2和W1相反是(1024,64),则FFN(Z)=(2,64)x(64,1024)x(1024,64)=(2,64),维度没有变化。所以这两层就是为了将Z映射到更高维的空间中,通过ReLU筛选,再变回原来的维度。
然后再经过Add&Norm,输入下一个encoder,6个都经过后输入到decoder。
Decoder block也是由6个decoder堆叠。每个decoder由Masked Multi-Head Attention,Multi-Head Attention和全连接神经网络FNN构成。
Decoder的输入,前文提到训练时接受target数据。而预测时的输入,一开始是起始符,然后每次输入是上一刻Transformer的输出。例如,输入“”,输出“我”,输入“我”,输出“我爱”,输入“我爱”,输出“我爱你”,输入“我爱你”,输出“我爱你”结束。
与encoder中Multi-Head Attention计算原理一样,只是多加了一个mask掩码,对某些值进行掩盖,使其在参数更新时不产生效果。
padding mask
每个批次输入序列长度不一样,我们要对输入序列进行对齐。在短序列后面填充0,在长序列截取左边的内容,舍弃多余序列。因为填充的位置是没什么意义的,所以注意力机制不应该把注意力放在这些位置上。
把这些位置加上一个负无穷,经过softmax,概率就会接近0.
Encoder的Multi-Head Attention也需要padding mask。
sequence mask
对于一个序列,在t时刻,decoder应该只能依赖于t时刻之前的输出,不能看见t之后的输出,所以要把t之后的隐藏起来。这只在训练时有效,因为训练时要将target数据输入进decoder,预测就不需要,预测的时候我们也只能得到前一个时刻的输出。
产生一个三角矩阵,上三角的值为0,把这个矩阵作用在序列上。
Encoder的Multi-Head Attention是基于Self-Attention的,Decoder的Multi-Head Attention就只基于Attention,它的输入Query来自Masked Multi-Head Attention的输出,Keys和Values来自于Encoder最后一层输出。
然后就进入全连接神经网络,和Encoder一样,再输出进入下一个decoder,经过6个decoder后到达最后输出层
先经过一次线性变换,然后softmax得到输出的概率分布,通过词典,输出概率最大的对应的单词作为预测输出。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。