Transformer的简单总结

1. encoder

1.1 词嵌入

除了在最底层的编码器的输入来自词嵌入的词向量,其余的解码器的输入则来自下一层解码器的输出。

对于每个编码器,接收的是一个向量列表。比如词向量维512维,一句话有30个词,输入便是(30*512)

1.2 self-attention 自注意力层

每个单词的输入路径不同。

512维词向量,10个词,经过三个权重层 W Q , W K , W V W_Q,W_K,W_V WQ,WK,WV,每个词分别生成query vector, key vector, value vector, 这三个vectors将用于计算句子的其他词对某一个词的自注意力得分。

比如计算word2对word1的自注意力得分: s o f t m a x ( q 1 ∗ k 2 d q 1 ) ∗ v 2 softmax(\frac{q1*k2}{\sqrt{d^{q1}}})*v2 softmax(dq1 q1k2)v2

将所有注意力得分对加权值向量求和,便得到word1在自注意力层的输入向量


深入一些:

  1. 为什么要softmax?
    实际上softmax后的是注意力权重,与value vector相乘才会得到最后的注意力得分
  2. 为什么要除以 d k \sqrt{d_k} dk
    那为什么是 d k \sqrt{d_k} dk 而不是其他数?
    因为QKV均服从标准正态分布N(0,1),它们的点积结果很大,且服从N(0, d k \sqrt{d_k} dk )。很大的点乘结果会导致落在softmax梯度很小的区域,除以 d k \sqrt{d_k} dk 可以使得结果重回标准正态分布N(0,1)且使梯度增大。

1.3 multi-headed” attention 多头注意力

每个encoder有多个独立的头,每个头都有自己的 W Q , W K , W V W_Q,W_K,W_V WQ,WK,WV,生成不同的query vector, key vector, value vactor,可以给出注意力层的多个“表示子空间”

它扩展了模型专注于不同位置的能力。

假设一个头的输出是(10*64), 有8个头,最后的便是八个头的输出拼接(10*512),在经过全连接层,重新生成(10*64)的输出,它融合了所有头的注意力头信息

深入一些:

  1. 为什么Transformer 需要进行 Multi-head Attention?

1.4 位置编码

设token的索引为pos,他的位置编码为

P E ( p o s , 2 i ) = s i n ( p o s 1000 0 2 i d m o d e l ) PE(pos,2i) = sin(\frac{pos}{10000^{\frac{2i}{d^{model}}}}) PE(pos,2i)=sin(10000dmodel2ipos)

P E ( p o s , 2 i + 1 ) = c o s ( p o s 1000 0 2 i d m o d e l ) PE(pos,2i+1) = cos(\frac{pos}{10000^{\frac{2i}{d^{model}}}}) PE(pos,2i+1)=cos(10000dmodel2ipos)

d m o d e l = 512 d^{model}=512 dmodel=512,则 i = 0 , 1 , 2 , . . . , 255 i=0,1,2,...,255 i=0,1,2,...,255

Why do so?

s i n ( a + b ) = sin ⁡ a cos ⁡ b + sin ⁡ b cos ⁡ a sin(a+b) = \sin a \cos b + \sin b \cos a sin(a+b)=sinacosb+sinbcosa

c o s ( a + b ) = cos ⁡ a cos ⁡ b − sin ⁡ a sin ⁡ b cos(a+b) = \cos a \cos b - \sin a \sin b cos(a+b)=cosacosbsinasinb

这样的话便有

P E ( p o s + k , 2 i ) = P E ( p o s , 2 i ) ∗ P E ( k , 2 i + 1 ) + P E ( p o s , 2 i + 1 ) ∗ P E ( k , 2 i ) PE(pos+k,2i) = PE(pos,2i)*PE(k,2i+1) + PE(pos,2i+1)*PE(k,2i) PE(pos+k,2i)=PE(pos,2i)PE(k,2i+1)+PE(pos,2i+1)PE(k,2i)

P E ( p o s + k , 2 i + 1 ) = P E ( p o s , 2 i + 1 ) ∗ P E ( k , 2 i + 1 ) − P E ( p o s , 2 i ) ∗ P E ( k , 2 i ) PE(pos+k,2i+1) = PE(pos,2i+1)*PE(k,2i+1) - PE(pos,2i)*PE(k,2i) PE(pos+k,2i+1)=PE(pos,2i+1)PE(k,2i+1)PE(pos,2i)PE(k,2i)

**当求P E ( p o s + k , 2 i ) PE(pos+k,2i)*P**E*(*p**o**s*+*k*,2*i*)的向量时,可表示为对P E ( p o s , 2 i ) PE(pos,2i)*P**E*(*p*o*s*,2*i*)上的线性表示,

1.5 残差模块和层归一化

image-20200927124103263

decoder

image-20200927124500558

顶端编码器encoder最终输出一个包含key vector和value vector的注意力向量集,用于decoder的(编码器-解码器注意力层),帮助解码器关注输入序列的哪些部分。

解码器中的自注意力机制只关注当前输出之前的值

解码器最后输出一个实数向量,经过linear和softmax层,最终输出每个词的概率。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值