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

transformer_01

一、传统RNN存在的问题

1.序列前序太长,每个xi要记住前面的特征,而且一直在学,没有忘记,可能特征不能学的太好

2.串行,层越多越慢,难以堆叠很多层;

3.只能看到过去,不能看到未来

搞个双向的,然后把两个方向学到的特征拼接,那么对于xi影响最大的是xi-1和xi+1吗?是相邻的两个吗,不一定,所以也不太合理

二、重大事件 

1.2017年 attention is all your need  出现,RNN退出历史舞台

2.2018 年 transformer  更空出世,bert 和GPT1 

transformer究竟是干什么的?通俗上说就是:1是平淡无奇的特征,2是特征鲜明的特征,transformer的功能就是把1输入进去,然后输出2.

没有transformer之前的算法  训练模型就是训练参数,更新参数,但是transformer不仅更新参数,还可以根据上下文信息更新数据,transformer站的高看的远,考虑全文

三. self-attention

假设x1,x2是两个向量,它们两个的关系就是算内积 ,x1.x2=0表示没关系,x1.x2=表示关系特别大。

transformer中 不是简单算内积,而是构建三个向量参数  q,k,v,q相当于问,k相当于答,比如词 thing ,mathines编码后的特征是x1,x2,则x1和x1的关系是 q1.k1,x1和x1的关系是 q1.k2,x2和x2的关系是 q2.k2,x2于x1的关系是 q2.k1,怎么得到q,k,v呢?

q,k,v都是需要设计一个wx+b(w,b都是先初始化,再通过训练更新)的矩阵,通过和向量矩阵x1x2  全连接 计算得来的。参数值是通过训练得到的。transformer本质就是提特征。最后得到w,b,q,k,v ,怎么得到v呢?

value 表示自身特征,表示对自身的认知。也是需要学习的,输出attention value

向量维度越大,得到内积就越大,这是不合适的,需要排除特征维度的影响。所以要归一化,将值变成概率,dk是特征的维度。

比如想得到500维的特征向量,那就可以分5个头,也就是5组q,k,v,最后拼接,就可以得到更丰富的特征。

此例子中,我打你  ,你打我,两句话中的词 的特征是不变的,也就是说transformer对位置特征不敏感,所以需要加入位置信息

加入one-hot的位置编码,特征与对应位置的编码做加法就可以了

可以堆叠多层self-attention吗?可以模仿15年出世的resnet残差结构来实现,因为每一次的self-attention的输入和输出维度都一样,所以可以堆叠多层。

self-attention相当于encoder层,会得到每一个词的特征,那输出就是要利用这个学出来的特征去做事,比如翻译,就是decoder层了。左边的encoder部分每个词都通过self-attention学到了特征,右边decoder部分每一个词要提供q, encoder提供k,v ,q1k1=v1,q1k2=v2,q1k3=v3,q1k4=v4, 这就是cross-attention,decoder需要self-attention吗?要,只不过是只需要算后面和前面的关系,即算q2和q1的关系,不需要算q1和q2的关系,因为算去q1的时候,还没有q2呢,只能从后往前看,不能从前往后看,所以加入MASK机制遮挡后面看不到的

input: 输入一个词   

input Embedding  :词嵌入,即把词变成一个特征向量

norm:BN,批处理

add:残差链接

feed forward: 全连接     linear  也是全连接

注意:decoder部分 既有self-attention,又有cross-attention

多模态就是要学习各种特征,实际上就是cross- attention

bert  : 自监督  ,随机遮挡15%的词,然后预测这些词

http://www.lryc.cn/news/196198.html

相关文章:

  • JavaSE入门---认识方法
  • 编译[Bug]——too few arguments for template template parameter “Tuple“ detected
  • 网工内推 | 南天软件,base北京,需持有CCIE认证,最高25k
  • Unity有限状态机的简易实现
  • 什么是NetApp的DQP和如何安装DQP?
  • Vue之Vue的介绍安装开发实例生命周期钩子
  • 【计网】计算机网络概述
  • 初识Java 14-1 测试
  • react常用的hooks有哪些?
  • Nacos config 配置中心详解
  • C++ UDP通信
  • 自由程序员想接私活?那你还不得知道这几个接单平台!最后一个就是宝藏!!
  • 二叉树与递归的相爱相杀
  • Docker 安装 reids
  • opensl学习——base16编码解码、base64编码解码、ASCII码表、扩展ASCII码
  • gazebo各种插件
  • C语言Free空指针会怎样?
  • 软件测试全套教程,软件测试自学线路图
  • 禁止浏览器缩放
  • 前端食堂技术周刊第 100 期:TS 5.3 Beta、ViteConf2023、Rspress 1.0、Fresh 1.5、Chrome 118
  • 汇川IT7000系列HMI使用脚本实现画面跳转时自动切换手自动模式
  • FDTD Solutions笔记
  • SQL SELECT DISTINCT(选择不同) 语法
  • 常见的数据结构及应用
  • 基于模型预测人工势场的船舶运动规划方法,考虑复杂遭遇场景下的COLREG(Matlab代码实现)
  • 【UE5 Cesium】19-Cesium for Unreal 建立飞行跟踪器(4)
  • TrustZone
  • ✔ ★【备战实习(面经+项目+算法)】 10.16学习时间表(总计学习时间:5h)
  • React + Router
  • 微信小程序设置动态变量设值