transformer的详细解释

来源:https://jalammar.github.io/illustrated-transformer/


小白解说:https://blog.csdn.net/Tink1995/article/details/105080033


Self-Attention的核心是用文本中的其它词来增强目标词的语义表示


self-attention




细节图


单个head: X(sentence) —> [*]WQ(WK/WV) —> [f( )]Q(K/V) —> Zi 注:[ ]内变换方法


多个head: Z1... Zn —> *WO —> Z







  • 这里的add操作就是将self-attention这个layer的输出 Z+ self-attention的输入 X,俗称残差网络

  • 这里的FFN层,公式如下:


顺序上是先线性变换,然后ReLU非线性,再线性变换。FFN 相当于将每个位置的Attention结果映射到一个更大维度的特征空间,然后使用ReLU引入非线性进行筛选,最后恢复回原始维度。需要说明的是,在抛弃了 LSTM 结构后,FFN 中的 ReLU成为了一个主要的能提供非线性变换的单元


  • Normalization(规范化)

规范化的统一公式:



对于隐层中某个节点的输出为对激活值 ai 进行非线性变换 f() 后的hi ,先使用均值 ui 和方差 σi对 ai 进行分布调整。如果将其理解成正态分布,就是把“高瘦”和“矮胖”的都调整回正常体型(深粉色),把偏离x=0的拉回中间来(淡紫色)。



这样做的第一个好处(平移)是,可以让激活值落入 f() 的梯度敏感区间(红色虚线的中间段)。梯度更新幅度变大,模型训练加快第二个好处是,可以将每一次迭代的数据调整为相同分布(相当于“白化”),消除极端值,提升训练稳定性


然而,在梯度敏感区内,隐层的输出接近于“线性”,模型表达能力会大幅度下降。引入 gain 因子 gi 和 bias 因子 bi ,为规范化后的分布再加入一点“个性”。需要注意的是, gi 和 bi 作为模型参数训练得到, ui 和 σi 在限定的数据范围内统计得到


BN 和 LN 的差别就在这里,前者在某一个 Batch 内统计某特定神经元节点的输出分布(跨样本),后者在某一次迭代更新中统计同一层内的所有神经元节点的输出分布(同一样本下)



  • Normalization 通常被放在非线性化函数之前非线性之前单独处理各个矩阵”。对于 Transformer,主要的非线性部分在 FFN(ReLU) 和 Self-Attention(Softmax) 的内部。于 Transformer 来说,LN 的效果已经不是“有多好“的范畴了,而是“不能没有”


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值