Transformer模型

1 seq2seq方法对比

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

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

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

2 模型框架

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。

Transformer模型学习笔记相关推荐

  1. DMU-单性状重复力模型-学习笔记3

    单性状重复力模型 本次主要是演示如何使用DMU分析单性状重复力模型. 重复力模型和动物模型的区别: 不是所有的性状都可以分析重复力模型, 首先重复力模型是动物模型的拓展, 它适合一个个体多个观测值的情 ...

  2. 文本分类模型学习笔记

    文本分类模型学习笔记 TextCNN 模型结构 HAN 模型结构 实验 数据集 预处理 模型内容 模型训练 模型测试 近年来,深度学习模型在计算机视觉和语音识别中取得了显著成果.在自然语言处理中,深度 ...

  3. 概率图模型学习笔记:HMM、MEMM、CRF

    作者:Scofield 链接:https://www.zhihu.com/question/35866596/answer/236886066 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权 ...

  4. Heckman两阶段模型学习笔记

    有近两周的时间都在学习Heckman两阶段模型.网上看了一些资料,在CSDN里找到了几篇珍贵的学习笔记,有一篇相当于带我入了门学习笔记 | Heckman两阶段法介绍_Claire_chen_jia的 ...

  5. ARIMA模型学习笔记

    ARIMA模型学习笔记 目录 ARIMA模型学习笔记 ARIMA模型 时间序列平稳性 什么是平稳性 严平稳 弱平稳 平稳性检验 ADF检验(Augmented Dickey-Fuller test) ...

  6. 生成模型学习笔记:从高斯判别分析到朴素贝叶斯

    机器之心专栏 作者:张威 翻译:燕子石 本文是哥伦比亚大学研究生张威在生成模型上的学习笔记,由毕业于新西兰奥克兰理工大学的燕子石翻译.机器之心之前曾介绍过张威所写的吴恩达<机器学习>课程的 ...

  7. 图神经网络(GNNs)模型学习笔记与总结

    GCN学习笔记 1 基于谱域的GCN 1.1 知识要点: 1.2 Spectral-based models 1.2.1 Spectral Network 1.2.2 ChebNet(2016) 1. ...

  8. MNL——多项Logit模型学习笔记(二)

    本节将会通过案例举例,介绍Logit模型的建模思路和过程 内容为摘抄他人学习资料的个人学习笔记,如有侵权则删 1.正确打开/解读Logit模型系数的方式 本节的具体内容在笔记里不详细表示了,大家在软件 ...

  9. Transformer论文学习笔记

    <Attention Is All You Need>一文中所提出的Transformer模型,与传统的CNN架构完全不同.Transformer中的注意力机制(attention mec ...

最新文章

  1. 面试必备|带你彻底搞懂Python生成器
  2. 讲讲我和Spring创始级程序员共同review代码的故事
  3. [洛谷P4735]最大异或和
  4. Github Star 11.5K项目再发版:AAAI 2021 顶会论文开源,80+多语言模型全新升级
  5. 11个步骤完美排查Linux机器是否已经被入侵
  6. PAT乙级(1009 说反话)
  7. requests模块爬取糗事百科用xpath解析
  8. (zz)最大子序列和问题
  9. 记录下关于qt使用windeployqt.exe打包程序之后运行报错无法定位程序输入点
  10. 切底删掉顽固360的.dll文件、删除删不掉的一些文件
  11. 三行代码让你轻松下载全网任意视频-Python小知识
  12. 教你在Windows自带的微软拼音输入法中用上小鹤双拼方案
  13. vim 插件配置与安装
  14. C# 下拉菜单的设置 lookupedit
  15. GWT(Google Web Toolkit)是干嘛用的
  16. Movavi Video Editor 15 Plus for mac(视频编辑软件)
  17. lr背景虚化_LR调色教程,用LR调出后期唯美cosplay人像思路及案例(3)
  18. 老程序员教你如何提高开发效率、成为大神4——快速学习方法
  19. 获取frame 标签里#documents里面的内容
  20. php mysql 手机归属地_PHP手机号码归属地查询代码(API接口/mysql)_PHP教程

热门文章

  1. 短网址跳转微信公众号
  2. xp任务栏不显示任务 vbs脚本
  3. 在Excel表格中如何设置字体随单元格大小变化
  4. IDEA 快速返回上次查看代码的位置常用的IDEA快捷键(持续更新)
  5. 3 移动机器人路径规划(1- 栅格地图绘制)
  6. abaqus导出全部节点应力值
  7. UOJ#310. 【UNR #2】黎明前的巧克力
  8. javascript中使用split对多个分割符进行分割
  9. 【软件设计模式】常用的设计模式的介绍
  10. http-invoker插件原理解析