2021-11-02

[软件工程应用与实践]lingvo学习笔记

2021SC@SDUSC

beam search

  • 保存最好的k个候选

  • 在每个时刻, 对每个候选项新加一项(n个可能), 在kn个选项中选择最好的k个
    beam search原理图

  • 时间复杂度O(knT)

  • 每个候选的最终分数是:
    (1 / Lα)logp(y1, … , yL) = (1 / Lα)Σlogp(yt’|y1, … , yt’-1)

    • 通常 α = 0.75
  • 当 k = 1 时是贪心搜索

  • 当 k = n 时是穷举搜索

注意力机制

  • 卷积、全连接、池化层都只考虑不随意线索
  • 注意力机制显示的考虑随意线索
    • 随意线索被称为***查询***(query)
    • 每个输入是一个***值***(value)和***不随意线索***(key)的对
    • 通过注意力池化层来有偏向性的选择某些输入(根据query)
      attention笔记
      非参注意力池化层
  • 给定数据 (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相近
  • 使用高斯核
    Nadaraya-Watson核回归公式推导
    参数化的注意力机制
  • 在非参数化注意力机制上引入可以学习的w
    公式

总结
注意力机制中,通过 query 和 key 来有偏向性的选择输入

  • 可以一般的写作 f(x) = Σα(x, xi)yi,这里α(x, xi)是注意力权重

注意力分数

在这里插入图片描述
注意力机制在做什么?

将key value拓展到高维度
  • 假设 query q ∈ Rq, m 对 key-value (k1, v1), …,这里 ki ∈ Rkvi ∈ 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

描述 用户行为日志表tb_user_log id uid artical_id in_time out_time sign_in 1 101 9001 2021-11-01 10:00:00 2021-11-01 10:00:31 0 2 102 9001 2021-11-01 10:00:00 2021-11-01 10:00:24 0 3 102 9002 2021-11-01 11:00:00 2021-11-01 11:00:11 0 4 101 9001 2021-11-02 10:00:00 2021-11-02 10:00:50 0 5 102 9002 2021-11-02 11:00:01 2021-11-02 11:00:24 0 (uid-用户ID, artical_id-文章ID, in_time-进入时间, out_time-离开时间, sign_in-是否签到) 场景逻辑说明:artical_id-文章ID代表用户浏览的文章的ID,artical_id-文章ID为0表示用户在非文章内容页(比如App内的列表页、活动页等)。 问题:统计202111月每天的人均浏览文章时长(秒数),结果保留1位小数,并按时长由短到长排序。 输出示例: 示例数据的输出结果如下 dt avg_viiew_len_sec 2021-11-01 33.0 2021-11-02 36.5 解释: 11月1日有2个人浏览文章,总共浏览时长为31+24+11=66秒,人均浏览33秒; 11月2日有2个人浏览文章,总共时长为50+23=73秒,人均时长为36.5秒。以下写法:select dt, round(avg(diff),1) avg_viiew_len_sec from ( select uid, date(in_time) dt sum(timestampdiff(SECOND,in_time,out_time)) diff from tb_user_log where dt='2021-11' group by uid,dt )t group by dt order by avg_viiew_len_sec 报错程序异常退出, 请检查代码"是否有数组越界等异常"或者"是否有语法错误" SQL_ERROR_INFO: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'sum(timestampdiff(SECOND,in_time,out_time)) diff\nfrom\n tb_user_log\nwhere dt='' at line 9"
03-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值