Transformer架构(NLP,机器翻译)

发现同样模型能在其他领域可以应用

Encoder—decoder架构:过去时刻你的输出又是你当前的的输入(自回归auto-regressive)

N个层重复N次

编码器输出为解码器输入

Masked带掩码的注意力机制:保证输入进来不会看到t时间以后的输入,从而保证训练和预测行为是一致的。

MLP:纯全连接层的神经网络模型

残差连接:输入和输出加在一起  固定长度显示

Layernorm:对于一个二维输入矩阵,每一行为样本batch,每一列为特征feature。把每个行batch变为均值为0,方差为1

Batchnorm:对于一个二维输入矩阵,每一行为样本batch,每一列为特征feature。把每个列feature变为均值为0,方差为1(做法:减去向量,除以标准差)

一般输入为三维(序列,有很多元素)的样本,那么Layernorm切横的batch,Batchnorm竖的。Layernorm(用的更多):

因为batchnorm算出来均值和方差抖动比较大(假如出现了很长,那么之前的均值和方差就不适用),但是Layernorm都算的自己的均值和方差,不存在这个问题。更稳定

注意力机制:

有一个value,一个key。假如有一个query,靠近第一个,那么第一二个权重比较大,最后一个比较小。

虽然key value没有改变,但是随着query的改变,权重不一样,所以输出不一样。

不同的相似函数导致不同的注意力版本

Transformer用到的注意力机制版本:

Query对每个key做内积

Query写成矩阵(即可能不止一个query),和一个key,相乘得到一个n*m,每一行是query对所有key的内积值,再除以  根号dk(向量大小,即它的长度。因为值比较大,那么他们之间差距会变大,那么这个大的做出来softmax更接近1,其他更接近0。这样会导致值向两端靠拢,这样得到的梯度比较小,就会跑不动。在transformer中dk一般比较大512,所以除以dk)做softmax(softmax:希望做出来的值,置信的更靠近1),相乘得到长为dv(一共做了两次矩阵乘法)。那么每一行就是我们需要的输出。

两种注意力机制:加性、点积的注意力机制(此处用的点乘,因为实现起来更简单高效)

Masked带掩码的注意力机制:保证输入进来不会看到t时间以后的输入,从而保证训练和预测行为是一致的。

具体做法 : 换成一个非常大的复数,这样后面的数做softmax的时候做出来非常接近0,只对前面的值1~t-1有效果

多头注意力机制:不如说我把整个query呀, keyvalue呀投影到一个低维度(这个维度是可以学的,学h次学到不同方法,有点类似卷积网络的多个输出通道),投影h次,再做h次的注意力函数,并在一起做最终输出。此处h=8

512/8=64,即投影64维度上计算注意力函数。在并起来投影回来。

如何使用注意力层:

编码器中:

自注意力机制:key,value,query都是同一个东西,就是自己本身,分成三个。N个query,每个一个输出,有n个输出,输出维度也为d。其实输出是value加权和,权重(权重:该向量和每一个输入的别的向量计算的相似度,图上绿色部分)是query和key的。

输入是长为N的向量

不考虑多头和投影情况,那么输出就是输入的加权和,权重来自自己本身和各个向量的相似度。如果是多头,因为有投影,那么会学习h个不一样的距离空间来,使得输出回有一点不一样。

解码器中:

此处不再是自注意力了,而是key value来自编码器输出,query来自解码器上一个attention的输入。

也就是对于解码器都要算一个输出,输出来自value(即输入)的加权和,权重粗细取决于query与编码器输出部分的相似度,相似度高,权重会大一点。

Feedforward

是一个单隐藏层的MLP,中间隐藏层是吧输入扩大四倍,最后输出再回来。在pytorch上的话就什么都不需要改动,因为在pytorch上输入为3d时候,默认就是在最后一个维度计算。在这里512投影成2048,最后有个残差连接,所以又投影回去为512。

此处Attention的作用是:把整个序列中的信息抓取出来(时序信息,因为当给出一个句子,吧里面顺序打乱,但是attention出来还是一样,不会处理所以需要时序信息。Attention是在输入中,这里的位置加上时序,这个就叫Position Encoding),做一次汇聚aggregation。这里已经抓去了感兴趣的,含有了序列信息,所以在做投影和MLP时候,只需要对每个点独立做就行了。因为在此处attention中序列信息已经汇聚完成,所以可以分开做。这就是transformer如何抽取序列信息,然后把这些信息加工成我最后要的那个语义空间那个向量的过程。

transformer对比RNN:都是用线性层/MLP做语义训练的转换,不一样的是,如何传递序列信息。RNN中把上一个时刻的信息输出传给下一个时刻作为输入(这里本来就是一个有时序的)。transformer通过attention层,然后再全局的去拉到整个序列里面信息,再用MLP做语义的转换。

他们两个的关注点都是在你怎么有效的去使用你的序列的信息。

Embedding层

把输入一个个词源token,映射成一个向量。Embedding是将任意一个词,学习一个长为d的向量来表示它,此处d为512。此处乘了根号d,也就是乘根号512是为了最后他的规模差不多。因为在学l2-norm(第二范式,会将向量所有值归一化,向量归一化后其单个值就越小)时候,不管维度多大都会学的比较小,比如是1,也就是权重一大,维度值就会变小。最后加上Position Encoding不会吧长度困住(不会覆盖原本的权重),使得规模差不多相匹配。

Position Encoding:

Attention的作用是:把整个序列中的信息抓取出来(时序信息,因为当给出一个句子,吧里面顺序打乱,但是attention出来还是一样,不会处理所以需要时序信息。Attention是在输入中,这里的位置加上时序,这个就叫Position Encoding)

这个公式是cos 和 sin的一个函数,在-1~1 之间抖动,乘以根号d之后,使得他还是在差不多-1~1之间。这样就可以在输入加入信息了

任何一个值可以用一个长为512的向量记录了时序信息的来表示,告诉了该词的位置。

第四章:为什么用自注意力

自注意力:几个矩阵做运算:query(n行*维度d)*key(也是n行*维度d)矩阵,则算法复杂度为n^2*d。矩阵并行度高(当前操作不需要等待前面步骤完成),一步就能过去所以是1.一个query可以和所有都可以运算一次都能过来,所以长度短为1.

循环:RNN对特别长的序列做的不够好

卷积:用1D的卷积,kernel为k(3、5等),n为长度,d为输出输入通道数。并行度高,所以比RNN快一点。在k距离内一次能传,在k以外就要一层层传了

受限的自注意力:当做注意力的时候,query只和最近的r个相邻的做运算

所以当序列长度,模型快读差不多,深度都一样的话,前三个就散复杂度都差不多。但attention好像在信息糅合性更好一点。但是实际上attention对整个模型的假设做了更少,需要更大的数据和模型才能训练RNN  CNN同样的效果,所以导致现在基于Tranformer的模型呢都是特别大特别贵。

第五章:实验(略)

李沐论文讲解笔记 之 Transformer相关推荐

  1. 李沐论文精读系列一: ResNet、Transformer、GAN、BERT

    文章目录 一. ResNet 1.0 摘要,论文导读 1.1 导论 1.1.1 为什么提出残差结构? 1.1.2 实验验证 1.2 相关工作 1.3 实验部分 1.3.1 不同配置的ResNet结构 ...

  2. 李沐论文精读系列四:CLIP和改进工作串讲(LSeg、GroupViT、VLiD、 GLIPv1、 GLIPv2、CLIPasso)

    文章目录 一.CLIP 1.1 简介 1.1.1 前言 1.1.2 模型结构 1.1.3 模型效果 1.1.3.1 对自然分布偏移的鲁棒性 1.1.3.2 StyleCLIP 1.1.3.3 CLIP ...

  3. 李沐论文精读系列五:DALL·E2(生成模型串讲,从GANs、VE/VAE/VQ-VAE/DALL·E到扩散模型DDPM/ADM)

    文章目录 一. 前言 1.1 DALL·E简介 1.2 DALL·E2简介 1.3 文生图模型进展 二. 引言 2.1 摘要 2.2 引言&模型结构 三. 算法铺垫 3.1 GANs 3.2 ...

  4. 李沐论文精度系列之七:Two-Stream双流网络、I3D

    文章目录 一.双流网络 1.1 前言 1.2 网络结构 1.3 光流(Optical flow) 1.3.1 什么是光流 1.3.2 如何利用光流 1.3.3 双向光流(Bi-directional ...

  5. 李沐论文精读: ResNet 《Deep Residual Learning for Image Recognition》 by Kaiming He

    目录 1 摘要 主要内容 主要图表 2 导论 2.1为什么提出残差结构 2.2 实验验证 3 实验部分 3.1 不同配置的ResNet结构 3.2 残差结构效果对比 3.3 残差结构中,输入输出维度不 ...

  6. 【动手学深度学习v2李沐】学习笔记07:权重衰退、正则化

    前文回顾:模型选择.欠拟合和过拟合 文章目录 一.权重衰退 1.1 硬性限制 1.2 柔性限制(正则化) 1.3 参数更新法则 1.4 总结 二.代码实现 2.1 从零开始实现 2.1.1 人工数据集 ...

  7. 【深度学习】ResNet残差网络 ResidualBlock残差块实现(pytorch) | 跟着李沐学AI笔记 | ResNet18进行猫狗分类

    文章目录 前言 一.卷积的相关计算公式(复习) 二.残差块ResidualBlock复现(pytorch) 三.残差网络ResNet18复现(pytorch) 四.直接调用方法 五.具体实践(ResN ...

  8. 线性回归原理(李沐老师学习笔记)

    目录 1 线性回归的定义 1.1 线性回归的基本元素 1.1.1 线性模型 1.1.2  损失函数 1.1.3 为什么传统线性回归解不能应用于深度学习 1.1.4 随机梯度下降 2 自动求导 2.1 ...

  9. 毫米波目标检测论文 阅读笔记 | Radar Transformer: An Object Classification Network Based on 4D MMW Imaging Radar

    毫米波目标检测论文 | Radar Transformer: An Object Classification Network Based on 4D MMW Imaging Radar Jie Ba ...

  10. 李沐论文精度系列之十:GPT-4

    文章目录 一.AIGC资讯速览 1.1 Toolformer(2023.2.9) 1.2 ChatGPT plugin 1.3 LLaMA(2023.2.24) 1.4 Visual ChatGPT( ...

最新文章

  1. 学习 Linux,101: 引导系统
  2. 如让自己想学不好shell编程都困难?
  3. crossdomain.xml配置错误导致登录不了
  4. Android App定位和规避内存泄露方法研究
  5. android gradle + junit +jacoco +sonarscaner(sonarrunner) 获取单元测试覆盖率以及代码质量
  6. c 语言输出后不关闭_穿书+娱乐圈 |再不跑路就要被迫C位出道了花瓶女配和影帝组CP后豪门娇美人是爽文剧本...
  7. 2009年即将过去,准备迎接2010
  8. 机器视觉——双目视觉的基础知识(视差深度、标定、立体匹配)
  9. ArcGIS学习总结(五)——地形分析-TIN及DEM的生成
  10. VirtualBox文件数量一多,必然崩溃
  11. 人人商城人人店人人分销商城V2.8.0解密开源版,收银台+秒杀+区域代理+积分商城+多商户
  12. MyEclipse 注册码
  13. 贪吃蛇“大作战”(二)
  14. Word如何绘制整行下划线,如何给分好的栏添加分隔线?
  15. Word中相邻的两页无法没有对齐的解决方法
  16. 《Rethinking Boundaries: End-To-End Recognition of Discontinous Mentions with Pointer Networks》读后感
  17. 报错 - 使用marked报错 marked__WEBPACK_IMPORTED_MODULE_4___default(...) is not a function
  18. 结构光三维重建之光栅图像相位解算(MATLAB)
  19. 吃瓜教程——第1,2章
  20. Spotlight on Windows监控软件

热门文章

  1. 抖音 iOS 工程架构演进
  2. 蓝桥杯单片机—— PCF8591的基本原理及A/D转换应用(14)
  3. Prometheus通知模板参考
  4. java定义矩形的周长和面积_定义一个长方形类,定义 求周长和面积的方法实例
  5. C++ STL使用实例
  6. Win11未识别的网络无internet怎么办?
  7. BUAA 1489
  8. UVA#11584Partitioning by Palindromes
  9. DBMS 中实现事务持久性的子系统是()
  10. java基础:运算符