Transformer

Transformer是一种Seq2Seq模型,Bert就是从Transformer衍生出来的一种模型,在一些NLP任务上已经超过了人类表现。

应用方式主要是:第一先训练出预训练模型,第二步是把预训练模型应用到下游任务中

和LSTM区别:

LSTM的训练是一种迭代方法,必须要等到上一个字过完LSTM单元才可以处理下一个单元的内容,但是Transformer是可以进行并行化的处理的,所有的字全部一起进行训练,大大加快了训练的效率;通过位置嵌入positional encoding 来理解语言的顺序学习到序列关系(否则就是words of bag),使用自注意力机制和全连接层来进行运算.

Transformer分为两个部分,第一部分是Encoder,拿机器翻译作为例子,把一个句子(why do we work)输入进去,得到一个隐藏层表示,然后将这个隐藏层表示输入到decoder模型中,并输入标识符[Start],得到输出“为”,再输入“为”和隐藏层表示得到“什”,再依次迭代,得到机器翻译的输出“为什么我们要工作”。

值得注意的是,BERT模型只用到了编码器encoder的部分,即把自然语言序列映射到隐藏层的数学表达的过程,这个数学表达就是语言模型。下图就是encoder的模型,可以使用encoder来完成一些常见的任务,比如分类,NER,语义关系分析:

encoder的输入shape(字嵌入维度)是【batch_size,sequence_length,embedding_dimension(每个字的数学表达)】,batch_size就是句子的条数,输出即隐藏层的shape也是类似

注意transformer一般以字为单位,无需分词

第一部分positional encoding

作用:识别语言中的位置关系,位置嵌入的维度是【max_sequence_length,embedding_dimension】,这个嵌入维度和字嵌入的维度一样,位置编码公式如下:

pos为句中字的位置,i是词向量的维度,,取值为[0,embedding_dimension),d_model就是embedding_dimension,上面有sin和cos分别对应偶数和奇数的序列,当i增大,分母越大,周期性越不明显,这种交替的信息就是学到的位置编码,位置编码与词嵌入元素相加。enbie 

 

第二部分self-attention

经过第一部分处理之后得到X_embedding,维度是[batch_size,sequence_length,embedding_dimension],这个X_embedding通过三个线性映射Wq,Wk,Wv都是[embedding_dim,embedding_dim],分别得到Q,K,V,和变换之前的维度一样

multi-head attention(多头注意力机制):首先确定一个超参数head_num,就是head 的数量,上面的embedding_dimension必须整除head_num,因为我们要把embedding_dimension分为head_num份,经过multi-head-attention处理之后的Q,K,V维度是[batch_size,sequence_length,head_num,embedding_dimension/head_num],为了方便计算需要进行转置,[batch_size,head_num,sequence_length,embedding_dimension/head_num],令head_size=embedding_dimension/head_num,我们拿出batch中的一个句子的一个head,其Q,K维度都是[sequence_length,head_size],Q和K的点积(注意力矩阵)即Q*K^{T}的维度是[seq_len,seq_len],这个的意义是点积的值 越大,说明两个越相似,每一行(列)表示的是某个词与句中其他词的相关程度,最后沿着最后一个维度做softmax归一化,这里是列。

做softmax之前,需要对Q*K^{T}除以\sqrt{d_{k}},是为了把注意力矩阵变成标准正态分布,使得softmax之后的结果更稳定。理由:假设q和k的由方差为1 均值为0的独立随机变量组成,再经过q和k中每个元素相乘之后再相加均值为0,方差为{d_{k},能够得到更好的梯度。

最后softmax的结果再与V相乘,前面的矩阵为softmax(\frac{WK^{T}}{\sqrt{​{d_{k}}}}),每一行为一个字符与其他字符的相关程度,V的每一列表示第i个维度下所有词的表示,两者相乘,表示的是每个第i个维度下这个词的表示,并隐含了与其他词的信息,可以发现最后维度没有变,

另外一个点是,一个batch中每个串的长度不一致,需要进行padding,通常使用0进行填充,这时候的注意力矩阵很多下面和右边都是0值的,这时候进行softmax的时候就会出问题,因为e的0次方等于1,会把padding的部分算进去,就需要在进行softmax对这些地方加一个很大的偏置(很大的负数),即masking 掉不参与运算。

第三部分:Add残差连接与Norm

因为进行第二部分之后维度不会进行变化,所以使用残差连接,避免梯度消失,梯度反传的时候,梯度可以直接传到第二部分前面:X+Sublayer(X)

Layer Normalization的作用是把神经网络模型中隐藏层的一部分归一化为标准正态分布,也就是i,i,d独立同分布模型,加快收敛,加快训练速度,对每一列求均值,方差,这里的\alpha , \beta都是可学习的参数,来弥补归一化时损失的信息

第四部分

Feed Forward加Add &Norm,这里的Feed Forward包括了两次线性层加一个激活层,第一个线性层先把维度扩展到高纬度,第二又压缩到原维度,在使用激活函数激活。结束后再Add &Norm

 

最后把第二、三、四部分再进行5次,总共6次Transformer block运算,经过注意力机制,一句话的每个字都含有其他字的信息。拿情感分类做例子,我们呢可以添加一个空白字符放到句子最前面,这时候这个空白字符就有了句中其他部分的信息,然后再映射到想要分类的类别,就是doc2vec,把一个句子转化为一个空白字符【CLS】的向量

 

值得探索的是:只考虑Transformer位置编码(sin cos函数),一个词与离他最近的词的点积最大,相反离它越远的词相关程度越低,这是与自然语言相契合的。当使用位置编码矩阵乘以它自身的转置时,可以发现,矩阵的对角线出现了隆起,说明一个词与自己关联程度越高。

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值