原论文链接:https://papers.nips.cc/paper/7181-attention-is-all-you-need.pdf

首先介绍一下Encoder-Decoder

所谓encoder-decoder模型,又叫做编码-解码模型。这是一种应用于seq2seq问题的模型。

那么seq2seq又是什么呢?简单的说,就是根据一个输入序列x,来生成另一个输出序列y。seq2seq有很多的应用,例如翻译,文档摘取,问答系统等等。在翻译中,输入序列是待翻译的文本,输出序列是翻译后的文本;在问答系统中,输入序列是提出的问题,而输出序列是答案。

为了解决seq2seq问题,有人提出了encoder-decoder模型,也就是编码-解码模型。所谓编码,就是将输入序列转化成一个固定长度的向量;解码,就是将之前生成的固定向量再转化成输出序列。


当然了,这个只是大概的思想,具体实现的时候,编码器和解码器都不是固定的,可选的有CNN/RNN/BiRNN/GRU/LSTM等等,你可以自由组合。比如说,你在编码时使用BiRNN,解码时使用RNN,或者在编码时使用RNN,解码时使用LSTM等等。

这边为了方便阐述,选取了编码和解码都是RNN的组合。在RNN中,当前时刻隐藏层状态 hth_{t}ht​ 是由上一时刻的隐藏层状态 ht−1h_{t-1}ht−1​ 和当前时刻的输入 xtx_{t}xt​ 决定的, 如下公式 所示。

ht=f(ht−1,xt)h_{t}=f\left(h_{t-1}, x_{t}\right)ht​=f(ht−1​,xt​)

在编码阶段,获得了各个时刻的隐藏层状态后,我们把这些隐藏层的状态进行汇总,生成最后的语 义编码向量C,如下公式所示, 其中q表示某种非线性神经网络,在这里表示多层RNN。

C=q(h1,h2,h3,…,hTx)C=q\left(h_{1}, h_{2}, h_{3}, \ldots, h_{T_{x}}\right)C=q(h1​,h2​,h3​,…,hTx​​)

一种简单的方法是将最后的隐藏层状态作为语义编码向量C, 即公式所示。

C=q(h1,h2,h3,…,hTx)=hTxC=q\left(h_{1}, h_{2}, h_{3}, \ldots, h_{T_{x}}\right)=h_{T_{x}}C=q(h1​,h2​,h3​,…,hTx​​)=hTx​​

在解码阶段, 我们要根据给定的语义向量C和之前已经生成的输出序列 y1,y2,y3,…,yt−1y_{1}, y_{2}, y_{3}, \ldots, y_{t-1}y1​,y2​,y3​,…,yt−1​ 来 预测下一个输出的单词 yty_{t}yt​,即公式所示。

yt=argmax⁡P(yt)=∏t=1Tp(yt∣y1,y2,…,yt−1,C)y_{t}=\operatorname{argmax} P\left(y_{t}\right)=\prod_{t=1}^{T} p\left(y_{t} \mid y_{1}, y_{2}, \ldots, y_{t-1}, C\right)yt​=argmaxP(yt​)=∏t=1T​p(yt​∣y1​,y2​,…,yt−1​,C)(1)

公式 (1) 可以简写成公式(2)。

yt=g(y1,y2,…,yt−1,C)(2)y_{t}=g\left(y_{1}, y_{2}, \ldots, y_{t-1}, C\right)(2) yt​=g(y1​,y2​,…,yt−1​,C)(2)

而在RNN中,公式 (2) 可以表示为公式 (3) 。

yt=g(yt−1,st−1,C)(3)y_{t}=g\left(y_{t-1}, s_{t-1}, C\right)(3)yt​=g(yt−1​,st−1​,C)(3)

公式 (3) 中, st−1\quad s_{t-1}st−1​ 表示Decoder中RNN神经元的隐藏层状态, yt−1\quad y_{t-1}yt−1​ 表示前一时刻的输出, C 代表的是语义向量。而g则是一个非线性的多层神经网络, 可以输出 yty_{t}yt​ 的概率。g一般情况下是 多层RNN后接softmax层。


encoder-decoder模型虽然非常经典,但是局限性也非常大。最大的局限性就在于编码和解码之间的唯一联系就是一个固定长度的语义向量C。也就是说,编码器要将整个序列的信息压缩进一个固定长度的向量中去。但是这样做有两个弊端,一是语义向量无法完全表示整个序列的信息,还有就是先输入的内容携带的信息会被后输入的信息稀释掉,或者说,被覆盖了。输入序列越长,这个现象就越严重。这就使得在解码的时候一开始就没有获得输入序列足够的信息, 那么解码的准确度自然也就要打个折扣了

剩下介绍直接看这篇博客就好,有些疑问在评论区将的很清楚

详解Transformer (Attention Is All You Need)
作者:大师兄

Transformer介绍相关推荐

  1. Transformer介绍及架构解析

    查看全文 http://www.taodudu.cc/news/show-3476239.html 相关文章: 飞浆PaddlePaddle-百度架构师手把手带你零基础实践深度学习(学习笔记) 机器学 ...

  2. 浅谈Transformer 及Attention网络

    1 Transformer 模型结构 处理自然语言序列的模型有 rnn, cnn(textcnn),但是现在介绍一种新的模型,transformer.与RNN不同的是,Transformer直接把一句 ...

  3. 3W字长文带你轻松入门视觉Transformer

    作者丨深度眸@知乎 来源丨https://zhuanlan.zhihu.com/p/308301901 编辑丨极市平台 0 摘要 transformer结构是google在17年的Attention ...

  4. Py之scikit-learn:机器学习sklearn库的简介、六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类)、安装、使用方法(实际问题中如何选择最合适的机器学习算法)之详细攻略

    Py之scikit-learn:机器学习sklearn库的简介(组件/版本迭代).六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类).安装.使用方法(实际问题中如何选择最合适的机器学 ...

  5. 3万字长文带你轻松入门视觉Transformer

    0 摘要 transformer结构是google在17年的Attention Is All You Need论文中提出,在NLP的多个任务上取得了非常好的效果,可以说目前NLP发展都离不开trans ...

  6. Transformer,bert—t for transformers

    关系 bert是unsupervise-train 的transformer transformer是seq2seq model with "self-attention" RNN ...

  7. 自然语言处理(二十八):BERT介绍

    自然语言处理笔记总目录 论文地址:BERT Transformer介绍 何为BERT BERT,全称Bidirectional Encoder Representation from Transfor ...

  8. 深入理解transformer源码

    参考资料: transformer原论文 深入理解transformer及源码 图解Transformer(完整版) The Annotated Transformer The Annotated T ...

  9. 时序 transformer

    目录 时列 transformer 介绍 预处理 流行的时间序列预处理技术包括: 可学习的时间表示 time2vextor 构建模型 技巧包(训练 transformer 注意事项) referenc ...

最新文章

  1. 微信小程序之生成二维码
  2. oracle 性能优化--索引总结
  3. python使用界面-python 可视化界面
  4. 肝!一文讲解JWT用户认证全过程
  5. Ocelot简易教程(二)之快速开始1
  6. php数据关系图,如何利用navicat查看数据表的ER关系图
  7. Linux查询端口的任务
  8. JSONObject简单测试使用
  9. GNS3中RIP的过滤和修改
  10. struts1:Struts的中央控制器
  11. HEX文件和BIN文件格式的区别
  12. 在线搜索音乐播放器源码
  13. 蓝阔无线打印服务器设置,蓝阔打印服务器远程打印
  14. 深入百度蜘蛛IP段详解
  15. 计算机重启报错69,[转载]速达3000 常见问题一(下)
  16. CSS3:boder-radius
  17. 叶俊:从一匹马的电影读懂人才管理与商业经营
  18. 19款奥迪a5支持Android,19款奥迪a5有敝篷版吗?
  19. ES压测工具(一):esrally工具入门与实践
  20. rman怎么恢复数据文件

热门文章

  1. 结构设计模式 - 适配器设计模式
  2. k3 cloud 文件服务器搭建,k3cloud服务器推荐配置
  3. python读取html文件中的表格数据_使用解析html表pd.read_html文件其中单元格本身包含完整表...
  4. 高能解析得时候忽略某个字段_我们什么时候应该忽略批评?
  5. g++链接boost库
  6. k2pdfopt教程
  7. Django表单form
  8. 我用python远程探查女友每天的网页访问记录,她不愧是成年人!
  9. Python玩转各种多媒体,视频、音频到图片
  10. python如何操作excel 基础代码