Attention相关

自回归模型:过去某个时刻的输出,也会作为当前的时刻的输入。(例如encoder-decoder类的模型,再输出y2的时候需要依赖y0和y1)

Transform 也是一个encoder-decoder结构。

LayerNorm和BatchNorm区别:

BatchNorm:训练时,把当前batch内的样本的某列特征进行处理,处理成均值0方差为1(减这个batch内这一列的均值,再除以方差即可)。预测时,算一个全局的均值的方差做为使用。此外还可以通过学习λ、β参数来变换到任意均值和反查。

LayerNorm:对每个样本做处理,处理成均值0方差为1。

Attention:

三个角色:一个Query和n个Key-Value对。

计算规则:输出是所有value的加权求和,其中每个value的权重w是key和query的相似度。

举例:针对不同的Query返回使用不同value权重。

Query:[0.1,0.2]

Key1:[0.1,0.2] Value1:[0.5,0.6]

Key2:[0.2,0.4] Value2:[0.7,0.8]

那最终返回为

=Query*Key1*Value1+Query*Key2*Value2

=0.05*[0.5,0.6] + 0.1*[0.7,0.8]

=[0.025,0.03]+[0.07,0.08]

=[0.095,0.11]

常见两种实现:scaled dot-product Attention、multi-head Attention

scaled dot-product Attention【默认】缩放点积的值

为什么Q和K相乘后,还要除以根号dk??

Softmax 函数对非常大的输入很敏感。这会使得梯度的传播出现为问题(kill the gradient),并且会导致学习的速度下降(slow down learning),甚至会导致学习的停止。那如果我们使用'根号dk'来对输入的向量做缩放,就能够防止进入到 softmax 函数的饱和区,使梯度过小:

公式:

流程图:(Scale:除以根号dk    Mask:是为了避免在t时刻看到t时刻以后的东西,是对t以后乘以特别大的负数)

MultiHead-Attention

简介:Attention默认是scaled dot-product Attention。但也在此基础上的变种multi-head Attention。就是把QKW使用n个W映射到n个低位空间,再做Attention,把多个空间结果拼接。

Transformer:

Self-Attention

Self-Attention由一个输入X和Q、K、V四个对象组成。

X:k个item,一个item就是一个向量

Q:k个query,一个query也是一个向量

K:k个key,一个key也是一个向量

V:k个value,一个value也是一个向量

总结:也就是说一个,一个item都有一个query、key、value。

Q、K、V都是基于输入X线性变换而来,即:x*Q_w=Q,x*K_w=K,x*V_w=V。(Q矩阵是由x乘以Q_w矩阵得到,同理K、V)

Self-Attention最后的输出shape是,输入x的条数,维度是value的维度。

个人理解:整体来看,Self-Attention就是复杂的维度变换,和Dense层一样,都是把k个长度为n的向量变成k个长为m的向量。

Self-Attention的流程说下吧:

首先对n条向量进行线性变化,得到K、Q、V,然后query1和每个Key点积得到attention score,并sotfmax归一化。每个value*归一化后的attention score。加权求和得到output1。以此类推得到output2,output3。

参考资料:Transformer论文逐段精读【论文精读】_哔哩哔哩_bilibiliTransformer 一篇就够了(二): Transformer中的Self-attenstion - 知乎

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值