当前位置: 首页 > news >正文

Transformer简明笔记:文本翻译

Bert和gpt都是基于transformer的,在此之前流行的是rnn,复杂度有限且效率不高,容易受到文本长度的限制。
项目地址:https://github.com/lansinuote/Transformer_Example
b站视频:https://www.bilibili.com/video/BV19Y411b7qx?p=9&spm_id_from=pageDriver&vd_source=eca9b4f9ea9577b666c089a010621a99

总体架构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
编码器:自注意力层->全连接层
解码器:自注意力层->编码解码注意力->全连接层

计算注意力

在这里插入图片描述
词向量编码
x1*wq得到queries,以此类推,得到Q K V
在这里插入图片描述
除以8和词向量的编码有关
z1是自注意力计算的结果
在这里插入图片描述
在这里插入图片描述
得到多组QKV向量,就是多头注意力
在这里插入图片描述
图中有八组这样的矩阵

词向量编码

在这里插入图片描述
右边计算出的结果是一样的,transformer会做同样的处理

在这里插入图片描述

在这里插入图片描述
pos是第几个词,i是第几个向量,pos是行,i是列,偶数列是上面的式子计算,奇数列是下面的式子计算在这里插入图片描述
红色是大数,蓝色是小数,第0列是sin,第1列是cos,波动比较快,波动频率会逐渐降低

MASK

在这里插入图片描述
把a b pad理解为一句话,为了把各个句子保持相同长度,会补充pad。对pad的计算没有意义,把对pad的注意力全部替换成mask,但是pad对其他的词的注意力不做处理。
在这里插入图片描述
b和c是要预测的结果,所以计算b的时候不能让a看到。
在这里插入图片描述

对两个mask取一个并集

完整计算流程

在这里插入图片描述
layerNorm这部分是短接的计算,然后数据标准化,得到z1,z2,全连接运算
在这里插入图片描述
n个encoder上下串联,decoder拿到x1,x2,也要计算注意力,标准化,encoder-decoder这一层和self-attention其实一样,只不过qkv是拿encoder计算得出的结果当作kv,自己的自注意力层计算出的结果当作q,短接相加,标准化,全连接,标准化,decoder也会有n个,串联,最终做一个全连接层的输出。
在这里插入图片描述
翻译过程,不断预测下一个字

实验数据的生成策略在这里插入图片描述

词表是x语言的所有词汇,这里只有7个词,模仿自然语言,采样概率不等,x的长度随机,均为模仿自然语言。在这里插入图片描述
最终目的:x翻译成y
所以x和y要有关联性,这里的关系非常简单,黑色箭头表明y当中的每一个词是x逆序得到的,小写字母翻译成大写字母,y当中的数字用9-x得到在这里插入图片描述
虚线的箭头表明,y中的第一位取决于x的最后一位,这样y的第一位和第二位是相同的,这样做是为了让y中的数据长度比x多一位,同时增加映射复杂度
在这里插入图片描述
在这里插入图片描述

代码实现:定义数据

在这里插入图片描述
data.py
在这里插入图片描述
字典中共39个词
在这里插入图片描述
m的概率最高
生成数据的函数:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
定义数据集:

在这里插入图片描述
len固定返回10万,get_data生成一对x和y
数据加载器比较简单,每次调用生成8对x和y

代码实现:util.py

注意力计算函数:
在这里插入图片描述
几维向量就除以几的平方根

归一化层:
在这里插入图片描述
规范化,数值的均值是0,标准差是1,bn(batch normalization)取不同的样本做归一化,ln(layer nomalization)对不同通道做归一化。

多头注意力计算层:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
位置编码层:
在这里插入图片描述
在这里插入图片描述
全连接输出层:
在这里插入图片描述

mask.py

在这里插入图片描述
trilmask 上三角mask
在这里插入图片描述
在这里插入图片描述

model.py

编码器:
在这里插入图片描述
完整的编码器:
在这里插入图片描述
解码器:
在这里插入图片描述
完整的解码器:
在这里插入图片描述
主模型:
在这里插入图片描述
维度是变化的,注释有误

main.py

在这里插入图片描述
第一列是epoch 第二列是i 第三列是learning rate 第四列是loss 不断下降 第五列是正确率,97%
在这里插入图片描述
预测时不需要y的最后一个字符,y的第0个字符一定是SOS,不需要预测
在这里插入图片描述
在后面补上49个pad
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
预测结果几乎一模一样

一个更加复杂的翻译任务

用transformer做加法
在这里插入图片描述
y是x左右两边的相加得到的,这个难度要高一些,替换掉生成数据的函数就可以得到,训练10个epoch,learning rate decay也生效了,最终准确率是92%
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 充气泵芯片|充气泵方案芯片SIC8833
  • 【专题】2024年中国游戏出海洞察报告合集PDF分享(附原数据表)
  • Redis的String和Hash
  • 网络-多路io
  • Java基于微信小程序的美食推荐小程序,附源码
  • 基于InstaSPIN-user's guide Foc电流环速度环PI参数计算过程
  • 2024年四款必备的Windows录屏工具推荐!
  • 生成对抗网络在数字病理学中的应用综述|文献精析·24-09-03
  • Docker学习之路【八】安装主从复制MYSQL8
  • 全球大脑外滩“论剑”:2024年科技人文十大热点问题揭晓
  • Vue2转Vue3学习历程
  • 字节6面,面爆炸了
  • ssh结合重定向实现scp拷贝文件的另类用法
  • 通配符证书的申请及配置教程
  • 大规模语言模型开发基础与实践
  • 《Java编程思想》读书笔记-对象导论
  • co.js - 让异步代码同步化
  • CSS3 变换
  • Iterator 和 for...of 循环
  • leetcode-27. Remove Element
  • Markdown 语法简单说明
  • Otto开发初探——微服务依赖管理新利器
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • springboot_database项目介绍
  • ucore操作系统实验笔记 - 重新理解中断
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • vuex 笔记整理
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 工作手记之html2canvas使用概述
  • 解析 Webpack中import、require、按需加载的执行过程
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 让你的分享飞起来——极光推出社会化分享组件
  • 如何编写一个可升级的智能合约
  • 运行时添加log4j2的appender
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 怎样选择前端框架
  • k8s使用glusterfs实现动态持久化存储
  • # 数论-逆元
  • #DBA杂记1
  • #include
  • $().each和$.each的区别
  • (Java入门)学生管理系统
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (二) 初入MySQL 【数据库管理】
  • (利用IDEA+Maven)定制属于自己的jar包
  • (生成器)yield与(迭代器)generator
  • (四)模仿学习-完成后台管理页面查询
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .Net Core 中间件与过滤器
  • .Net Winform开发笔记(一)
  • .Net的DataSet直接与SQL2005交互
  • .NET使用存储过程实现对数据库的增删改查
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构