transformer一天搞懂

  • 1 transformer
    • 1.1 从整体来看transformer干的事情
    • 1.2 位置编码
    • 1.3 注意力机制(3个向量,3个阶段)
      • 1.3.1 从图像上理解
      • 1.3.2 从nlp上理解
    • 1.4 多头注意力机制
    • 1.5 残差边
    • 1.6 BN和LN
    • 1.7 整个Encoder流程
    • 1.8 Decoder
    • 1.9 Encoder和Decoder交互
    • 1.10 transformer
  • 2 BERT
    • 2.1 自然语言处理nlp的基本流程
    • 2.2 BERT的整体架构
    • 2.3 输入部分由3部分组成
    • 2.4 mask
    • 2.5 模型迁移学习4个步骤
    • 2.6 bert总结
  • 3 VIT(vision transformer)
    • 3.1 如何转换图像作为transformer的输入
    • 3.2 VIT的整体架构
    • 3.3 位置编码
    • 3.4 vit和原transformer的一点不同
  • 4 代码部分
  • 参考资料

1 transformer

为什么这么好:

1.1 从整体来看transformer干的事情


下面这个图和上面的图一样


1.2 位置编码

上面的rnn输入进去的字是有顺序的,而在transformer中一起输入,需要加入位置顺序信息。

1.3 注意力机制(3个向量,3个阶段)

注意力机制的公式:

需要QKV三个矩阵

1.3.1 从图像上理解


(1)Q向量是查询向量,我们要找的东西,比如是婴儿,点乘结果越大越相似。
(2)K是键向量,代表各个位置的向量
(3)V是值向量

1.3.2 从nlp上理解


3个计算阶段


整个计算过程,就说矩阵相乘

总结步骤:
(1)词向量和权重矩阵相乘分别得到Q,K,V
Q的含义就是要查询的某个东西
K就相当于位置
V就是一个基本值,通过Q和K的计算经过softmax得到了一个注意力的权重,注意力权重乘上这个基本值就得到注意力的值了
(2)Q、K、V根据公式进行计算,主要是点乘得到注意力的值

1.4 多头注意力机制

就说用多个注意力机制的基本模块,bert中用了8个
通俗理解就和卷积层的通道是一个道理,相当于8个通道,多个特征信息。

上面一个注意力机制得到一个V的结果,但是对一个汉字只得到了一个v向量,那这个向量能得到我们想要的结果吗?不一定吧
这里要对比卷积核了,我们在卷积中要用多个卷积核,就说多个输出通道,目的就是为了提取多个特征,那现在你用一组Q,K,V得到的特征不一定好,所以用多组
多头指的就说多组注意力机制,就是多个人去提取它的特征

1.5 残差边

残差的作用解决梯度消失,从公式中来看,就说有最下面的公式里面有个1,不会是多个相乘等于0

1.6 BN和LN

BN就是批标准化
BN不能用到RNN中
在nlp中用的BN比较少,一般用LN,就说LayerNorm

1.7 整个Encoder流程

就是前面的结合,一共就是3个部分

1.8 Decoder

也是由多个基本模块叠加,文中是6个基本块

1.9 Encoder和Decoder交互


进一步细节

1.10 transformer

transformer就说整个对自然语言处理的流程,核心思想是多头注意力机制。
多头注意力机制是包括多个注意力机制
transformer中用了编码器用了6个多头注意力机制,解码器用了6个多头注意力机制,每个多头注意力机制用了8个注意力机制。

做的一个事情:
拿到了一个序列,对这个序列进行了重新的组合,得到了特征,最后进行分类等任务。

2 BERT

2.1 自然语言处理nlp的基本流程

个人猜想的理解:
(1)把word转换为向量,word2vec
秒懂词向量https://zhuanlan.zhihu.com/p/26306795
(2)Seq2Seq:向量经过解码器和编码器得到另一个序列

(3)最重要的是中间的编码器和解码器
之前都是RNN实现,传统的RNN无法做并行运算

2.2 BERT的整体架构

(1)基本模块

2.3 输入部分由3部分组成

2.4 mask

2.5 模型迁移学习4个步骤

2.6 bert总结

BERT是使用了transformer的核心模块,外部进行了一些调整。核心是transformer.
Transformer是和cnn,rnn并列的一个东西。

3 VIT(vision transformer)

2020年10月提出

3.1 如何转换图像作为transformer的输入

通过把图片和nlp类比,得到图像应该转换成什么样的格式输入到网络中

(1)我们最基本的思路

把每个像素点的数据替换bert中的汉字
缺点:
Bert中的输入是512个大小,你现在如果把像素点输进去
224*224是50176,长度太大了,会导致参数太大了

(2)改进方式

3.2 VIT的整体架构

5步走
(1)第一步是将图片分成小块,论文中是1616,比如图像大小是4848,变成了9个1616的小块。
(2)16
16进行flaten拉平,然后将256长度变成768长度,这里博主讲的有些问题,256变成768是因为有3个通道,每个通道是256,3个通道进行拼接就得到了768个长度。
(3)生成位置编码,第一小块就是0,第2小块是1,0变成768维和第二步的相加,1变成768维和第2步的相加
(4)进行多头注意力机制的训练
(5)最后得到9个768长度的向量,然后转换成比如20个长度,进行softmax,得到20类的分类任务。

3.3 位置编码

需要告诉模型位置在哪个地方,两种位置编码方式

3.4 vit和原transformer的一点不同

4 代码部分

整个代码都比较简单

参考资料

【1】最好,唐宇迪的网易云课堂
【1】然后是那个,这是一个系列,讲的超级棒https://www.bilibili.com/video/BV1Di4y1c7Zm?p=2&spm_id_from=333.851.header_right.history_list.click
【2】基础,莫凡的自然语言处理
https://www.bilibili.com/video/BV1LA411n73X?spm_id_from=333.999.0.0
【3】很简单理解
https://www.bilibili.com/video/BV1Di4y1c7Zm?spm_id_from=333.999.0.0
【4】VIT
https://www.bilibili.com/video/BV18Q4y1o7NY?spm_id_from=333.999.0.0
【5】手推公式
https://www.bilibili.com/video/BV1UL411g7aX?spm_id_from=333.999.0.0

Transformer一文搞懂相关推荐

  1. 一文搞懂RNN(循环神经网络)

    基础篇|一文搞懂RNN(循环神经网络) https://mp.weixin.qq.com/s/va1gmavl2ZESgnM7biORQg 神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只 ...

  2. 一文搞懂 Python 的 import 机制

    一.前言 希望能够让读者一文搞懂 Python 的 import 机制 1.什么是 import 机制? 通常来讲,在一段 Python 代码中去执行引用另一个模块中的代码,就需要使用 Python ...

  3. python语言语句快的标记是什么_一文搞懂Python程序语句

    原标题:一文搞懂Python程序语句 程序流 Python 程序中常用的基本数据类型,包括: 内置的数值数据类型 Tuple 容器类型 String 容器类型 List 容器类型 自然的顺序是从页面或 ...

  4. 一文搞懂 Java 线程中断

    转载自   一文搞懂 Java 线程中断 在之前的一文<如何"优雅"地终止一个线程>中详细说明了 stop 终止线程的坏处及如何优雅地终止线程,那么还有别的可以终止线程 ...

  5. 一文搞懂HMM(隐马尔可夫模型)-Viterbi algorithm

    ***一文搞懂HMM(隐马尔可夫模型)*** 简单来说,熵是表示物质系统状态的一种度量,用它老表征系统的无序程度.熵越大,系统越无序,意味着系统结构和运动的不确定和无规则:反之,,熵越小,系统越有序, ...

  6. 一文搞懂如何使用Node.js进行TCP网络通信

    摘要: 网络是通信互联的基础,Node.js提供了net.http.dgram等模块,分别用来实现TCP.HTTP.UDP的通信,本文主要对使用Node.js的TCP通信部份进行实践记录. 本文分享自 ...

  7. 【UE·蓝图底层篇】一文搞懂NativeClass、GeneratedClass、BlueprintClass、ParentClass

    本文将对蓝图类UBlueprint的几个UClass成员变量NativeClass.GeneratedClass.BlueprintClass.ParentClass进行比较深入的讲解,看完之后对蓝图 ...

  8. 一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下

    B站实操视频更新 跟着拉面学习AWS--EC2, IGW, RT, NAT, SG 简介 长文多图预警,看结论可以直接拖到"总结"部分 本文承接上一篇文章介绍以下 AWS 基础概念 ...

  9. 一文搞懂CAN FD总线协议帧格式

    目录 1.为什么会出现CAN FD? 2.什么是CAN FD? 3.CAN FD和CAN总线协议帧异同 4.解析CAN FD帧结构 4.1.帧起始 4.2.仲裁段 4.3.控制段 4.4.数据段 4. ...

最新文章

  1. 使用visual vm 分析线程(上)
  2. Entity Framework Core 2.0的新特性
  3. 不能用 + 拼接字符串? 这次我要吊打面试官!
  4. SMARTFORM 转 PDF
  5. 【学习笔记】JAVA IO与NIO(new IO)的对比与不同IO模型的理解
  6. idea怎么将本地文件和远程git对比_IntelliJ IDEA将文件和文件夹与本地版本进行比较...
  7. 调用接口处理时间过长,前端访问超时解决方案
  8. Mac与Phy组成原理的简单分析
  9. Extjs 之 initComponent 和 constructor的区别(转)
  10. Azure Messaging-ServiceBus Messaging消息队列技术系列1-基本概念和架构
  11. Linux编程中 #define _XOPEN_SOURCE的作用
  12. x5内核有什么优点_关于接入腾讯X5内核的一些坑(不断更新)
  13. 基于Proteus的51单片机程序设计及仿真(交通灯控制系统)
  14. 从0开发《工程测绘大师》小程序之6°带中央子午线计算篇(八)
  15. matlab空间面板门槛,学习笔记——面板门槛模型
  16. html网页文本框无法输入,浏览器打开网页文本框无法输入文字如何解决
  17. linux 终端打开chrome,我应该输入什么命令来从终端运行Chrome?
  18. 接口转换器故障与解决办法
  19. package.json文件解读
  20. 大厂HR:我让你测试一个(电梯、杯子、笔、桌子、洗衣机),你会怎么测试它?

热门文章

  1. iso三体系认证有什么用
  2. window python 读取路径问题
  3. 【永久免费】胜率95%,非常精准外汇mt4趋势波段指标,无未来(最新版)
  4. ubuntu安装显卡问题
  5. WeChatExtension1.8.8中文版
  6. 【opencv】获取视频中的“黑白蓝绿”屏
  7. 页面图钉_图钉—将REST API转变为实时API的开源库
  8. OpenCV 中的 warpAffine
  9. android am pm命令
  10. 【089】MESHY-ios12壁纸风格的渲染图生成器