transformer:self-attention,muti-head attention,positional encoding
文章目录
- 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_iQi、Ki、Vi,在数学上是完全等效的,因此多头自注意力机制就是采用相同结构,不同的参数,把自注意力机制重复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相关推荐
- 基于Transformer的文本情感分析编程实践(Encoder编码器-Decoder解码器框架 + Attention注意力机制 + Positional Encoding位置编码)
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) Encoder编码器-Decoder解码器框架 + Atten ...
- 【Transformer开山之作】Attention is all you need原文解读
Attention Is All You Need Transformer原文解读与细节复现 导读 在Transformer出现以前,深度学习的基础主流模型可分为卷积神经网络CNN.循环神经网络RNN ...
- 深度学习之图像分类(十七)-- Transformer中Self-Attention以及Multi-Head Attention详解
深度学习之图像分类(十七)Transformer中Self-Attention以及Multi-Head Attention详解 目录 深度学习之图像分类(十七)Transformer中Self-Att ...
- Transformer 初识:模型结构+attention原理详解
Transformer 初识:模型结构+原理详解 参考资源 前言 1.整体结构 1.1 输入: 1.2 Encoder 和 Decoder的结构 1.3 Layer normalization Bat ...
- attention机制、self-attention、channel attention、spatial attention、multi-head attention、transformer
文章目录 attention sequence attention attention 与 self-attention channel attention 与 spatial attention m ...
- 【AI理论学习】对Transformer中Positional Encoding的理解
对Transformer中Positional Encoding的理解 1. 什么是Positional Encoding?为什么Transformer需要使用Positional Encoding? ...
- positional encoding位置编码详解:绝对位置与相对位置编码对比
目录 前言 Why What 绝对位置编码 相对位置编码 Sinusoidal Position Encoding Complex embedding How 前言 相信熟悉BERT的小伙伴对posi ...
- Self -Attention、Multi-Head Attention、Cross-Attention
Self -Attention 上图是论文中 Transformer 的内部结构图,左侧为 Encoder block,右侧为 Decoder block.红色圈中的部分为 Multi-Head At ...
- 透彻分析Transformer中的位置编码(positional enconding)
一.Transformer中为什么要使用位置编码positional encoding 在<Attention Is All You Need>这篇论文中首次提到了transformer模 ...
最新文章
- 解析postgresql 删除重复数据案例
- gear s3刷android wear,3星gear|3星gear s3自动选择手表刷机办法图文详细教程以及风险介绍...
- 如何将文件从安卓设备中拷贝到PC中
- ……OleContainer中嵌入WORD后,用什么办法显示滚动条???……
- 【转】WPF XAML X名称空间详解
- 量化投资拥有光明的未来
- 苹果开发者中心宕机8天终于回归
- vc设备工程师_工程/设备工程师简历工作经历填写样本
- 西安电子科技大学出版社 线性代数 参考答案 刘三阳
- 解决linux下 firefox 浏览器 视频无法播放问题
- 解决云帆小说下载阅读器不能下载https网址的问题
- Anaconda 环境克隆、迁移
- 推荐2个开源聊天服务器
- 中国移动云mas短信对接(http)
- 什么专业要学计算机思维导论,大学计算机:计算思维导论CAP
- I/Q数据频谱分析仪简介
- 微博个人资料信息抓取
- 高德API 经纬度转换地市区县(含读取文件)
- 智能住宅小区安防报警网络系统
- python tkinter设置窗口大小_自动调整tkinter窗口大小以适应所有小部件