文章目录

  • transformer和RNN、LSTM相比
    • seq2seq
    • 编码器-解码器架构
  • What is Input?
  • What is Output?
  • N-N:each vector has a label
    • (1)整体结构
    • (2)如何实现self-attention模块
    • (3)从矩阵乘法的角度理解self-attention
    • (4)Muti-head Self-attention(多头注意力模块)
    • (5)Positional Encoding:位置编码为自注意力机制赋能

transformer和RNN、LSTM相比

RNN需要t0t_0t0时刻的数据才能计算出t1t_1t1时刻的数据,无法并行化计算,只具有短期记忆。
而transformer理论上的记忆长度是不受限制的,并且可以并行化计算。
transformer基于编码器-解码器来处理序列对,跟使用注意力的seq2seq不同,transformer纯基于注意力。

seq2seq

编码器-解码器架构

一个模型可以分成两块:

  • encoder,处理输入;
  • decoder,生成输出,有的时候也可以处理输入。

  • CNN

    对于CNN来说,中间的特征提取层(中间表达式)可以抽象成一个编码器;softmax回归进行分类标号可以抽象成一个解码器。
  • RNN

    RNN同理,最后一个时刻隐藏层的输出是编码器编码的结果,最后再通过全连接层进行解码。
  • 编码器解码器API
from torch import nn#@save
class Encoder(nn.Module):"""编码器-解码器架构的基本编码器接口"""def __init__(self, **kwargs):super(Encoder, self).__init__(**kwargs)def forward(self, X, *args):raise NotImplementedError#@save
class Decoder(nn.Module):"""编码器-解码器架构的基本解码器接口"""def __init__(self, **kwargs):super(Decoder, self).__init__(**kwargs)def init_state(self, enc_outputs, *args):raise NotImplementedErrordef forward(self, X, state):raise NotImplementedError#@save
class EncoderDecoder(nn.Module):"""编码器-解码器架构的基类"""def __init__(self, encoder, decoder, **kwargs):super(EncoderDecoder, self).__init__(**kwargs)self.encoder = encoderself.decoder = decoderdef forward(self, enc_X, dec_X, *args):enc_outputs = self.encoder(enc_X, *args)dec_state = self.decoder.init_state(enc_outputs, *args)return self.decoder(dec_X, dec_state)

What is Input?

  • sentence
  • voice
  • graph

给每个单词一个向量

  • One-hot Encoding
  • Word Embedding(包含了每个单词的语义信息)
    一个句子就是一排长度不一的向量


What is Output?

  • N-N:each vector has a label
  • N-1:the whole sequence has a label

  • N-N’(seq2seq):model decides the number of labels itself
    比如机器翻译、语音识别。输入和输出的数量不一样。

N-N:each vector has a label

为什么出现了self-attention机制?因为如果将输入sequence中每个足够大的向量(因为我们的输入需要统一长度)放进去训练会产生巨大的参数量,不利于我们的训练。因此我们采用一种自注意力机制来对输入sequence的每个向量进行self-attention处理,考虑输入sequence中每个向量和其他输入向量之间的关系。

(1)整体结构

(2)如何实现self-attention模块


每个b向量都是考虑过输入sequence中所有的a向量才输出的。
如何计算出两个向量之间的相关性呢?
一般有两种方法:dot-product和additive
一般情况下我们使用的都是dot-product。


将以上过程封装成一个Self-Attention Layer,即最终transformer模型中的一个小模块。
输入a1,a2a_1,a_2a1,a2,输出b1,b2b_1,b_2b1,b2

(3)从矩阵乘法的角度理解self-attention




(4)Muti-head Self-attention(多头注意力模块)

  • head1

  • head2

用一个大矩阵生成QKV之后拆分成多个头,和用多个小矩阵,每个头生成一个Qi、Ki、ViQ_i、K_i、V_iQiKiVi,在数学上是完全等效的,因此多头自注意力机制就是采用相同结构,不同的参数,把自注意力机制重复n次


此处的WoW^oWo是可训练参数。

muti-head的操作类似于group convolution(组卷积)

将以上过程封装成一个Muti-Head Attention Layer,即最终transformer模型中的一个小模块。

(5)Positional Encoding:位置编码为自注意力机制赋能


如上图所示,如果交换a2,a3a_2,a_3a2,a3的位置,是不影响b1b_1b1的输出的。这显然是不合理的。
所以我们引出位置编码的概念。


这里的P就是我们所说的位置编码信息positional encoding


self-attention在语音上的应用:

self-attention在视觉上的应用:
图像可以看成是vector set。

transformer:self-attention,muti-head attention,positional encoding相关推荐

  1. 基于Transformer的文本情感分析编程实践(Encoder编码器-Decoder解码器框架 + Attention注意力机制 + Positional Encoding位置编码)

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) Encoder编码器-Decoder解码器框架 + Atten ...

  2. 【Transformer开山之作】Attention is all you need原文解读

    Attention Is All You Need Transformer原文解读与细节复现 导读 在Transformer出现以前,深度学习的基础主流模型可分为卷积神经网络CNN.循环神经网络RNN ...

  3. 深度学习之图像分类(十七)-- Transformer中Self-Attention以及Multi-Head Attention详解

    深度学习之图像分类(十七)Transformer中Self-Attention以及Multi-Head Attention详解 目录 深度学习之图像分类(十七)Transformer中Self-Att ...

  4. Transformer 初识:模型结构+attention原理详解

    Transformer 初识:模型结构+原理详解 参考资源 前言 1.整体结构 1.1 输入: 1.2 Encoder 和 Decoder的结构 1.3 Layer normalization Bat ...

  5. attention机制、self-attention、channel attention、spatial attention、multi-head attention、transformer

    文章目录 attention sequence attention attention 与 self-attention channel attention 与 spatial attention m ...

  6. 【AI理论学习】对Transformer中Positional Encoding的理解

    对Transformer中Positional Encoding的理解 1. 什么是Positional Encoding?为什么Transformer需要使用Positional Encoding? ...

  7. positional encoding位置编码详解:绝对位置与相对位置编码对比

    目录 前言 Why What 绝对位置编码 相对位置编码 Sinusoidal Position Encoding Complex embedding How 前言 相信熟悉BERT的小伙伴对posi ...

  8. Self -Attention、Multi-Head Attention、Cross-Attention

    Self -Attention 上图是论文中 Transformer 的内部结构图,左侧为 Encoder block,右侧为 Decoder block.红色圈中的部分为 Multi-Head At ...

  9. 透彻分析Transformer中的位置编码(positional enconding)

    一.Transformer中为什么要使用位置编码positional encoding 在<Attention Is All You Need>这篇论文中首次提到了transformer模 ...

最新文章

  1. 解析postgresql 删除重复数据案例
  2. gear s3刷android wear,3星gear|3星gear s3自动选择手表刷机办法图文详细教程以及风险介绍...
  3. 如何将文件从安卓设备中拷贝到PC中
  4. ……OleContainer中嵌入WORD后,用什么办法显示滚动条???……
  5. 【转】WPF XAML X名称空间详解
  6. 量化投资拥有光明的未来
  7. 苹果开发者中心宕机8天终于回归
  8. vc设备工程师_工程/设备工程师简历工作经历填写样本
  9. 西安电子科技大学出版社 线性代数 参考答案 刘三阳
  10. 解决linux下 firefox 浏览器 视频无法播放问题
  11. 解决云帆小说下载阅读器不能下载https网址的问题
  12. Anaconda 环境克隆、迁移
  13. 推荐2个开源聊天服务器
  14. 中国移动云mas短信对接(http)
  15. 什么专业要学计算机思维导论,大学计算机:计算思维导论CAP
  16. I/Q数据频谱分析仪简介
  17. 微博个人资料信息抓取
  18. 高德API 经纬度转换地市区县(含读取文件)
  19. 智能住宅小区安防报警网络系统
  20. python tkinter设置窗口大小_自动调整tkinter窗口大小以适应所有小部件

热门文章

  1. Vue前端文本对比DIFF
  2. 数学建模优化和仿真模拟的区别001
  3. Moment Generating Function
  4. 不改一行代码,将微信小程序转成商业App?
  5. Win32:三菱FX3U/FX5U读写软元件方法和注意事项
  6. 社区版pycharm的django创建app失败问题解决
  7. win10 常用快捷键
  8. ​区块链公链“三元悖论”专题系列之去中心化(Decentralization)
  9. 常用复原reast.css
  10. 双碑零基础意大利语学习 小白也能看懂的意大利语入门知识