[软件工程应用与实践]lingvo学习笔记
2021SC@SDUSC
beam search
-
保存最好的k个候选
-
在每个时刻, 对每个候选项新加一项(n个可能), 在kn个选项中选择最好的k个
-
时间复杂度O(knT)
-
每个候选的最终分数是:
(1 / Lα)logp(y1, … , yL) = (1 / Lα)Σlogp(yt’|y1, … , yt’-1)- 通常 α = 0.75
-
当 k = 1 时是贪心搜索
-
当 k = n 时是穷举搜索
注意力机制
- 卷积、全连接、池化层都只考虑不随意线索
- 注意力机制显示的考虑随意线索
- 随意线索被称为***查询***(query)
- 每个输入是一个***值***(value)和***不随意线索***(key)的对
- 通过注意力池化层来有偏向性的选择某些输入(根据query)
非参注意力池化层
- 给定数据 (xi, yi), i = 1, … , n
- 平均池化是最简单的方案 : f(x) = (1/n)Σyi
- x : query
- (xi, yi) : 键值对
- Nadaraya-Watson核回归
f(x) = Σyi(K(x - xi)/(ΣK(x - xj))- x : query
- xj : key
- yi : value
- 与KNN相近
- 使用高斯核
参数化的注意力机制 - 在非参数化注意力机制上引入可以学习的w
总结
注意力机制中,通过 query 和 key 来有偏向性的选择输入
- 可以一般的写作 f(x) = Σα(x, xi)yi,这里α(x, xi)是注意力权重
注意力分数
将key value拓展到高维度
- 假设 query q ∈ Rq, m 对 key-value (k1, v1), …,这里 ki ∈ Rk,vi ∈ Rv
- 注意力池化层:
- 设计 a
- 可加
- 可学参数:
Wk ∈ R^hxk, Wq ∈ Rhxq, v ∈ Rh
a(k, q) = vTtanh(Wkk + Wqq) - 等价于将 key 和 query 合并起来后放入到一个隐藏大小为 h , 输出大小为 1 的单隐藏层MLP
- 可学参数:
- 标准化点积
- 如果 query 和 key 都是同样的长度 q, ki ∈ Rd, 那么可以 a(q, ki) = <q, ki>/d1/2
- 向量化版本
- Q ∈ Rnxd, K ∈ Rmxd, V ∈ Rmxv
- 注意力分数 : a(Q, K) = QKT/d1/2 ∈ Rnxm
- 注意力池化 : f = softmax(a(Q, K))V ∈ Rnxv
- 可加
总结
- 注意力分数是 query 和 key 的相似度, 注意力权重是分数的 softmax 结果
- 常见的分数计算 :
- 将 query 和 key 合并起来进入一个单输出单隐藏层的MLP
- 直接将 query 和 key 做内积
seq2seq
动机
- 机器翻译中, 每个生成的词可能相关与源句子中不同的词
- seq2seq模型不能对此直接建模
加入注意力
- 编码器对每次词的输出作为 key 和 value
- 解码器 RNN 对上一个词的输出是 query
- 注意力的输出和下一个词的词嵌入合并进入decoder
总结
- Seq2Seq中通过隐藏状态在编码器和解码器中传递信息
- 注意力机制可以根据解码器RNN的输出来匹配到合适的编码器RNN的输出来更有效的传递信息
lingvo 中的注意力机制 :
performer
这是一种具有可线性扩展注意力机制的 Transformer 架构,可以加快训练速度,同时允许模型处理更长的长度,从而满足某些图像数据集(如 ImageNet64)和文本数据集(如 PG-19)的训练需求。Performer 使用了高效(线性)的广义注意力框架,可支持使用基于不同相似性度量(内核)的多种注意力机制。我们使用了新的通过正正交随机特征获得快速注意力 (FAVOR+) 算法来实现这一框架。该算法为注意力机制提供了可扩展的低方差和无偏估计 ,并可通过随机特征图分解来表示(具体来说,就是常规的 softmax-attention)。在保持了线性的空间和时间复杂度的情况下,该方法还确保了良好的准确率,并且可以应用到独立的 softmax 运算。
lingvo 组件 :
lingvo.core.favor_attention module