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

Transformer模型学习笔记

Transformer模型

1 seq2seq方法对比

CNN:将序列分为多个窗口(卷积核),每个窗口具有相同的权重,可以带来平移不变性的好处;卷积核之间可以进行并行计算;根据局部关联性建模,若想获得更大的感受野,除了增加卷积核尺寸,还需要增加多层卷积;对相对位置敏感(旋转),对绝对位置不敏感(顺序)。

RNN:对顺序敏感;无法并行计算,耗时;长程建模能力弱(前后序列跨度大,若保存数据则耗费空间过大);对相对位置敏感,对绝对位置敏感。

Transformer:无局部假设,对相对位置不敏感;无有序假设,可并行计算,对绝对位置不敏感,需要增加位置编码来反应位置变化对于特征的影响;任意长度字符都可以建模,依赖自注意力机制,复杂度为序列长度平方级。

2 模型框架

image-20220906204603091

encoder:将输入字符embedding的结果和位置编码作为输入,经过N个block(多头注意力模块、前馈神经网络模块),输出状态。

decoder:以上一状态的字符、位置编码、encoder的状态输出作为输入,经过N个block(带掩码的多头注意力模块和与Encoder相同的模块),输出预测概率。

3 Encoder:

将输入序列数据(x1,…,xn)转化为(z1,…,zn),其中xt为序列中第t位字符,zt为xt的向量标示。

Encoder的层数N可以设定,每一层有两个子层,包括Mult-Head Attention和Feed Forward,并在每一个子层后面增加一个残差连接,最后进行标准化Norm,用公式表示即为:LayerNorm(x+Sublayer(x))。

与CNN每一层的数据维度递减channel数增加不同,Transformer的每一层数据的维度都设置为固定值d(model)。

3.1 Layernorm:

与batchnorm对每个feature做Norm不同,layernorm针对的是每个样本。

如果数据的长度变化较大时,使用batchnorm做均值和方差的抖动也会很大。

3.2 Input Embedding:

使稀疏的one-hot数据,通过不带bias的FCNN得到稠密的连续向量。

3.3 Position Encoding:

(原本无位置信息)

添加位置编码,使位置参数对Transformer有影响。

由于不同长度的序列数据位置编码可能不同,需要使用sin/cos来固定。

对于不同的句子,相同位置的距离一致。

可以推广到更长的测试句子,pe(pos+k)可以写成pe(pos)的线性组合。

通过残差连接使得位置信息流入深层。

3.4 Multi-head Attention:

由多组Q,K,V组成,每组单独计算一共attention向量。

把每组attention向量拼接,通过一个FNN得到最终向量。

使得建模能力更强,表征空间更丰富。

可以使得特征向量维度降低,比如8个自监督模块可以将512维数据降低成64维。

可以弥补无法做到CNN多输出通道的缺陷。

3.5 Feed-Forward Network:

对每个单独位置上的字符建模,不同位置参数共享。

4 Decoder:

将Encoder的输出数据(z1,…,zn),转化为(y1,…,ym),与Encoder不同,编码器可以一次得到该批次所有字符,而解码器只能一个一个读取并输出(自回归)(auto-regressive)(RNN)

Encoder的每层有与Encoder相同的两个子层以外,还有一个Masked Multi-head Attention的子层。

4.1 Output Word Embedding:

另外一个序列的Embedding。在做预测时没有输入。

4.2 Masked Multi-head Self-attention:

因为Decoder是自回归模型,所以需要增加掩码机制,使得每次读取当前字符时不受当前时刻后的字符的干扰。机制是将t时刻之后的数值设置为非常大的负数,使其进入softmax时值接近于0。

4.3 Multi-head Attention:

如 3.4 5.2

5 Attention

Attention函数的功能就是将query向量和key-value向量映射成一个output,output = weight * values,所以output的维度与value的维度相同,其中weight为key与query的相似度。

5.1 Scaled Dot-Product Attention(Self-Attention)

query和keys等长,维度为d(k),vaue维度为d(v)。对每一个query与keys做内积,把它作为相似度。再除以向量的长度(d(k))^(1/2),得到k个权值,再将这k个权重做softmax,得到k个合为1的权重。




Q:n*d(k)

K:m*d(k)

Q(K)^T:n*m

V:m*d(v)

Output:n*d(v)

其中Q、K、V以及相似度的计算过程可以抽象成矩阵乘法:


很容易实现并行计算。

Query和K等长的情况下可以采用该算法,在不等长的情况下,可以采用Additive Attention的方式。

为什么要除dk?:使用Transformer的序列维度一般比较大,做点积时的结果会很大或很小,导致不同的Key计算出来的差距会比较大,在经过softmax以后,有的值会很接近于1,有的值会很接近于0,会产生梯度消失或梯度爆炸。

5.2 Multi-head Attention

将a映射(乘一个矩阵)生成的q,k,v再通过一次映射(再乘一个矩阵),将其维度平分,使所有下标相同的q,k,v分给相同的Attention。

相关文章:

  • 14.Vue3过渡和动画实现
  • SCS【7】单细胞转录组之轨迹分析 (Monocle 3) 聚类、分类和计数细胞
  • EMQX Cloud全托管的 MQTT 消息云服务
  • 【软考 系统架构设计师】操作系统① 操作系统概述
  • ARC113E Rvom and Rsrev
  • Windows与网络基础-26-IP地址概述
  • 模拟用户登录功能的实现以及演示SQL注入现象
  • 天龙八部科举答题问题和答案(全3/8)
  • CH342芯片应用—硬件设计指南
  • 【Android】-- 如何使用按钮和图片(点击事件、长按点击、同时展示文本和图像、ImageView)
  • 什么是文件格式的幻数
  • 【数据结构】绪论
  • C++的4种管理数据内存的方式
  • 中秋节的月亮怎么拍?不用手机和相机,程序员照样能拍出大片的感觉
  • Windows性能监控工具ypeperf
  • C++类中的特殊成员函数
  • javascript 总结(常用工具类的封装)
  • Java知识点总结(JavaIO-打印流)
  • laravel5.5 视图共享数据
  • python_bomb----数据类型总结
  • Redis 中的布隆过滤器
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • Windows Containers 大冒险: 容器网络
  • 阿里云购买磁盘后挂载
  • 诡异!React stopPropagation失灵
  • 基于HAProxy的高性能缓存服务器nuster
  • 手写双向链表LinkedList的几个常用功能
  • 小李飞刀:SQL题目刷起来!
  • # 安徽锐锋科技IDMS系统简介
  • #include到底该写在哪
  • #Linux(Source Insight安装及工程建立)
  • $.ajax,axios,fetch三种ajax请求的区别
  • (1)(1.11) SiK Radio v2(一)
  • (4)logging(日志模块)
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (三)Honghu Cloud云架构一定时调度平台
  • (转)关于pipe()的详细解析
  • .Family_物联网
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .NET使用存储过程实现对数据库的增删改查
  • /boot 内存空间不够
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • [BT]小迪安全2023学习笔记(第15天:PHP开发-登录验证)
  • [BZOJ4016][FJOI2014]最短路径树问题
  • [C#]C# OpenVINO部署yolov8图像分类模型
  • [docker] Docker的数据卷、数据卷容器,容器互联
  • [EFI]Dell Inspiron 15 5567 电脑 Hackintosh 黑苹果efi引导文件
  • [HackMyVM]靶场 Quick3