参考文章
- cv中的transformer:vit
- attention优化历史:RNN(长程梯度消失)->rnn+attention(消除对于单一隐含节点的依赖)
- rnn attention:双向RNN & 在Decoder上使用attention
- transformer原理理解
背景
- nlp领域中RNN结构容易产生梯度弥散(LSTM对于特别长期的信息依然无法很好传递),导致信息无法传递很远
- RNN结构无法与硬件很好结合
如何解决
- 用attention解决长期依赖的问题
- 去RNN结构,改成方便并行的结构
结构设计
每个encoder的作用
- self-attention生成encoder 向量:当前翻译和已经翻译的前文之间的关系;好处是模型将词义理解更准确,如“RNN是一个循环网络模型,它广泛应用于机器翻译等场景中” 中"它"的encoder应该是和"RNN"相近的,self-attention可以达到这个目的
- self-attention 的推导:
Q、K、V的计算
Q = W q ∗ Q e m b K = W k ∗ K e m b V = W v ∗ V e m b a t t e n t i o n = s o f t m a x ( Q t ∗ K 1... t − 1 T / d k ) ∗ V t Q= W_{q}*Q_{emb}\\ K= W_{k}*K_{emb}\\ V= W_{v}*V_{emb}\\ attention = softmax(Q_{t}*K_{1...t-1}^T/\sqrt d_{k})*V_{t} Q=Wq∗QembK=Wk∗KembV=Wv∗Vembattention=softmax(Qt∗K1...t−1T/dk)∗Vt - 归一化项(
d
k
\sqrt d_{k}
dk)的含义以及作用:
– 保证梯度稳定性,计算方式是Score 归一化
– dk代表mul之后的维度,当维度较大时,score数值比较大,会导致梯度变小,不易收敛
– 两种方式:mul需要归一化,使得模型收敛加快,而add方式(结合tanh和v加权求和)不易出现饱和
– mul的好处是计算更快 - 加入残差网络中的shortcut机制,防止退化问题
每个decoder的作用
- Encoder-Decnoder Attention:当前翻译和编码的特征向量之间的关系。
一些想法
attention是什么的attention:预测词 和 原始词输入列表的attention
为什么要使用前一时刻的状态替代:
- 首先当前时刻的状态是未知的
- 表示前一个词是A的时候,对于下词的一个预测应该集中注意力在哪几个原词
- 输出是通过隐含层信息、encoder整个句子信息(context)、前一个预测词的信息共同决定的
- Attention 结构本身的准确度怎么衡量(DIEN)
attention的训练方式:
- 输入是此特征,需要id化
- 输出是目标语言词特征,softmax
之前rnn的方式decoder为什么不能用所有的hidden state?
- 计算量限制:错
- 结构无法统一:长句子hidden state多,短句子少,padding肯定会有问题
- 直接加和不合理:不一定权重一样,不同词对于当前要预测词的贡献不同
encoder输入和输出的取值范围:确认乘法方式跟dim是否有直接关系
乘法和加法的公式:学习一下
梯度为什么会消失
add & norm操作是啥:norm 是batch norm,保持分布一致性,add是指对当前的attention score以及hidden state 做一个softmax线性加权
multi-head attention