[NLP]Transformer模型解析 (2)

注6:使用ln而不是bn的原因是因为输入序列的长度问题,每一个序列的长度不同,虽然会经过padding处理,但是padding的0值其实是无用信息,实际上有用的信息还是序列信息,而不同序列的长度不同,所以这里不能使用bn一概而论。

注7:FFN是两层全连接:w * [delta(w * x + b)] + b,其中的delta是relu激活函数。这里使用FFN层的原因是:为了使用非线性函数来拟合数据。如果说只是为了非线性拟合的话,其实只用到第一层就可以了,但是这里为什么要用两层全连接呢,是因为第一层的全连接层计算后,其维度是(batch_size,seq_len,dff)(其中dff是超参数的一种,设置为2048),而使用第二层全连接层是为了进行维度变换,将dff转换为初始的d_model(512)维。

注8:decoder层中中间的多头自注意力机制的输入是两个参数——encoder层的输出和decoder层中第一层masked多头自注意力机制的输出,作用在本层时是:q=encoder的输出,k=v=decoder的输出。

注9:encoder的输入包含两个,是一个序列的token embedding + positional embedding,用正余弦函数对序列中的位置进行计算(偶数位置用正弦,技术位置用余弦)

Self-Attention[2]

self-AttentionTransformer用来找到并重点关注与当前单词相关的词语的一种方法。如下述例子:

The animal didn’t cross the street because it was too tired.

这里的it究竟是指animal还是street,对于算法来说是不容易判断的,但是self-attention是能够把itanimal联系起来的,达到消歧的目的。

这里描述self-attention的具体过程如下图所示: 

[NLP]Transformer模型解析

 从上图可以看出,attention机制中主要涉及三个向量Q(Query),K(Key),V(Value),这三个向量的计算过程如下图所示:

 

[NLP]Transformer模型解析

上图中,WQ,WV,WK是三个随机初始化的矩阵,每个特征词的向量计算公式如下所示:

Queries:              q1 = x1 · WQ                                                    q2 = x2 · WQ

Keys:                  k1 = x1 · WK                   k2 = x2 · WK

Values:                v1 = x1 · WV                            v2 = x2 · WV

      Score:                 s1 = q1 · k1=112                                               s2 = q2 · k2 = 96

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwjwpy.html