上线形式:
tensorflow直接加载上线
基于openblas重新实现
基于cublas库重新实现
优点:
tensorflow:有谷歌开源代码,不需要另外实现
cublas/openblas:可以定制化优化,耗时更短,可微调
缺点:
tensorflow:耗时长,内部黑盒无法微调
cublas/openblas:部分核心功能要重写,只支持基础包


以下为工程实现细节:

input/output为序列:

基础架构:

每个Encoders中分别由6个Encoder组成(论文中是这样配置的)。而每个Decoders中同样也是由6个Decoder组成:

假设现在存在一个输出vocabulary为32768,输入vocabulary53000
流程:

  • 切词/embedding

    • 0位置不可用,1位置为EOS,作为空格等其他非文本符号的替换
    • 输入词embedding 将词转化为下标 通过映射来查找
    • 输入词embedding维度:1024float
    • 输入词embedding初始化结果来源:w2v
    • 输入词位置信息embedding:左半部分的值是一由一个正弦函数生成的,而右半部分是由另一个函数(余弦)生成。其中,get_timing_signal_1d()源码地址
    • input Embedding = word Embedding + position Embedding
  • Encode(假设每个batch有15个input词)
    • multi-headed attention

      • self-attention

        • 创建一个Query/Key/Value的矩阵,单个矩阵size:1024(16(头数量)x64(q,k,v向量的长度))x1024(词向量的长度)
        • Query/Key/Value的矩阵合并后为15x3x1024x1024
        • 将query向量和key向量点击来对相应的单词打分
        • 再将得到的输出通过softmax函数标准化,使得最后的列表和为1
        • 将每个Value向量乘以softmax后的得分。这里实际上的意义在于保存对当前词的关注度不变的情况下,降低对不相关词的关注。
        • QK的点击为15x64x64x15,结果15x15,这样的矩阵有16个,再对此进行sotfmax压缩
        • 如果batch小于15,则填充负无穷
        • KQ的15x15x16再点积V=XxWv15x64x16,16个15x64的矩阵
        • KQxV得16x(15x15x15x64)=16x15x64
        • 后接一个dense,1024x1024,得到15x1024
        • add一个bias,再normalization
      • resudual feed forward neural network
        • multi-headed attention前的矩阵设为in
        • multi-headed attention后的矩阵设为out
        • 残差处理:Z = sqrt(∑(out-in)xx2)
        • 第一层的激活函数是ReLU,第二层是一个线性变换,W1和W2分别为1024x4096,4096x1024
        • encode out = resudual feed forward neural network in + resudual feed forward neural network out
    • Encoder结束
  • Decode过程与Encode过程保持一致,不同点如下:
    • Decode出来靠近的词更重要,则把对应的input的矩阵的上三角矩阵进行mask,保证尽量减少对已经decode出来的词的影响
    • self-attention – > resudual --> in/out attention --> resudual --> FFN --> resudual,一次解码完成
    • 每次计算Decode完成后把decode出来的词进行储存,下一次的input直接拼接之前m次的带入下一次decode即可
    • 参数矩阵:KV来自encode部分计算好的(1024x2048),Q来自decode部分新建的(1024x1024)
    • Decode:Q:nx16x64,K/V:15x16x64,
      QK:16x(nx64)x(15x64)= 16xnx15
      QKxV=16x(nx15x15x64)=nx1024,n即为decode得词数
    • Q的行数是Decode的词的数量,第一轮是1,第二轮是2…,解多少个词就有多少轮
    • Decode出来的结果矩阵点乘vocabulary_sizex1024,得出vocabulary_size的向量后softmax(所有vocabulary_size和为1),得到top8
    • beam search,beam=4,一直算到eosid;如果下一个就是eosid的话,用top8其他的其他4个
  • trick:
    • Embedding采取半float,绝大多数都是0,所以不会对最后的结果有很大影响
    • 出现eosid及finished的时候,记一次综合score,当后续继续往下解beam search的时候score不如之前的话就以综合score出现的地方为截止点
    • train的过程中,input_size+50为最长decode长度,降低学习耗时

欢迎大家关注我的个人bolg,知乎,更多代码内容欢迎follow我的个人Github,如果有任何算法、代码、转行疑问都欢迎通过邮箱发消息给我。

transformer工程实现笔记相关推荐

  1. Android工程开发笔记一

    Android工程开发笔记<一> ---------------------------------------不同 APP相互调用 activity 1.ComponentName() ...

  2. iOS工程开发笔记二

    iOS工程开发笔记<二> 在Xcode 4, 5的模板工程中可以看到Precompile Prefix Header,但是在Xcode 6被去除了. Xcode 6去掉Precompile ...

  3. 【time series】时间序列领域的Transformer综述论文笔记

    论文名称:Transformers in Time Series: A Survey 论文年份:2022/5/7 论文作者:阿里巴巴达摩院 论文下载:https://arxiv.org/abs/220 ...

  4. 软件制造工程学习笔记(详尽版)

    软件制造工程学习笔记 第一章 软件工程学概述 软件危机 软件工程 第二章 软件设计基本概念 设计过程 设计原理* 模块化 抽象 第三章 详细设计 结构程序设计 人机界面设计 过程设计工具 程序流程图 ...

  5. 工程力学笔记(1)干货!!!

    工程力学笔记(1)!!! 斜体样式工程力学是理工类专业必须的一门学科.但是学习起来却不是那么容易(别问我是怎么知道的),不少人在这里挂过科,所以,特把自己学习时的一些笔记发布出来,这只是一小部分,后续 ...

  6. 离散数学笔记和物联网工程导论笔记

    开学3个星期了,上了离散数学,下面是我的离散数学的笔记(参考课本): ★ 一.命题符号化及联结词. 1.认识简单命题(或原子命题). (1)概念:都是简单的陈述句,都不能分解成更简单的句子的命题. ( ...

  7. 【数据挖掘】心跳信号分类预测 之 特征工程 —— 学习笔记(三)

    目录 三.特征工程 3.1 特征工程概述 3.2 学习目标 3.3 内容介绍 3.4 代码与理论学习 3.4.1 安装.导入依赖并读取数据 3.4.2 数据预处理 3.4.3 使用 tsfresh 进 ...

  8. 【时序】应用于时间序列的 Transformer 综述论文笔记

    论文名称:Transformers in Time Series: A Survey 论文下载:https://arxiv.org/abs/2202.07125 论文源码:https://github ...

  9. arXiv 2021《Transformer in Transformer》论文笔记

    目录 简介 动机 方法 实验 简介 本文出自华为诺亚方舟,作者是韩凯. 文章链接 动机 本文动机是,在ViT基础上,编码patch内的pixel之间的结构信息. 方法 使用两个transformer, ...

最新文章

  1. 超声波传感器特性测量:发送与接收传感器之间的差异
  2. 怎么去掉Xcode工程中的某种类型的警告
  3. php数组删除重复的,从PHP中的数组中删除重复的元素
  4. 【Linux】查看文件内容的相关命令总结
  5. Visual Studio DSL 入门 13---结合T4生成代码
  6. IPv6邻居状态与邻居检测机制
  7. 123.PHP 周边性能优化
  8. 第12期《啊哈算法 PDF版本》
  9. 高中计算机高考时vb试题,高中信息技术vb试题及答案
  10. golang 数组随机排序
  11. 在做开关电路时,三极管限流电阻该如何选择?
  12. 报错ValueError: check_hostname requires server_hostnam ImportError: cannot import name ‘imread’ from
  13. Thymeleaf从后端取数据到js中 js中字符串转数字的函数应用
  14. 即构推出微信引流方案,助力在线教育平台大幅降低获客成本
  15. python中的str()函数
  16. 微信小程序提交上线时 定位接口提示未配置
  17. DIX和DIF该诉你,什么叫端到端数据一致性
  18. 利用阿里云国际购买的服务器搭建个人网站步骤
  19. 【STM32】获取STM32官方固件库
  20. sumo设置公交车站_城市交通仿真平台SUMO.pdf

热门文章

  1. b树删除节点每次只能删一个吗_面试官,请不要问我B+树了!!
  2. 普度网络营销策划_普度网络营销策划-齐宁_新浪博客
  3. minicom指令_【教程】minicom使用教程
  4. BundleTrack:无需实例或类级别3D模型的6D姿态跟踪算法(IROS2021)
  5. 非线性优化:徒手实现LM算法
  6. uniapp 的使用
  7. JCIM| 基于双向RNN的分子生成模型
  8. 盘点COVID-19新冠药物和疫苗研发进展
  9. GraphNVP | 用于分子图生成的可逆流模型
  10. 从大规模文献库中实现生物医学关系抽取