Transformer简单学习

博主刚刚入门深度学习、机器学习领域
这是博主对Transformer基本模型的简单学习笔记,借鉴了其他人的文章。
如果有理解上的疏忽遗漏,欢迎大家评论指出

简单了解

Transformer是一个基于Attention机制的encoder-decoder模型,丢弃了循环与卷积结构,而采用Self-Attention机制

与RNN模型不同,Transformer模型把序列中的所有word进行并行处理,同时使用Self-Attention机制对句子中所有word之间的关系直接进行建模,没有考虑各自的位置。

基本结构

采用encoder-decoder架构

Transformer将多个encoder-decoder堆叠在了一起

简化版

encoder

包含self-attention和Feed Forward Neural Network

self-attention让当前节点不仅仅关注当前的word,还能获得上下文的语义

decoder

包含Self-Attention,Encoder-Decoder Attention和Feed Froward Neural Network

Encoder-Decoder Attention 让当前节点获取当前需要重点关注的内容

Transformer首先对输入的数据进行embedding,然后将得到的数据输入到encoder,self-attention对数据进行处理过后传入Feed Froward,Feed Froward进行并行计算,将得到的输出传入到下一个encoder

简化版

Encoder

Encoder

组成

  • Multi-Head Attention
  • Residual connection
  • Normalisation
  • Position-wise Feed-Forward Networks

Self-Attention

Self-Attention利用了Attention机制,计算每个word与其他所有word(包括自身)之间的关联,然后根据对齐模型分布得到加权表示作为该word的新表示,同时考虑了上下文信息。

Self-Attention 可以捕获句子中长距离的相互依赖特征,从而缩短远距离依赖

采用了残差网络的short-cut机制(还未理解)

处理过程

首先,Self-Attention用embedding向量与随机初始化的矩阵相乘,生成三个向量Query,Key,Value。

Self-Attention处理过程1

计算Self-Attention的score,该score决定了对每个位置encoder一个word时,对输入句子其余word的关注程度。由Query与Key进行点乘计算得到。

然后进行score归一化,将点乘结果乘以一个缩放因子 1 d k \frac{1}{\sqrt{d_k}} dk 1(该缩放因子可以防止结果过大,使得结果经过softmax计算后落入饱和区间)

再进行softmax计算,得到每个word对当前位置的word的相关性大小。

对Value与softmax的值进行加权,得到Self-Attention在当前节点的值

Self-Attention处理过程2

也可以采用矩阵方式,直接计算出Query,Key,Value矩阵,来提高计算速度

矩阵计算方式 矩阵计算方式

该Attention又被称为Scaled Dot-Product Attention

Scaled Dot-Product Attention

Multi-Headed Attention

初始化多组Q,K,V矩阵,然后对于生成的多个特征矩阵Z进行压缩(列排列)得到一个大矩阵,然后用一个随机初始化矩阵与该矩阵相乘,得到最终矩阵
A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dk QKT)V

Multi-Headed Attention流程

最终,生成的Z被传入下一个模块,Position-wise Feed-Forward Network

Add & Norm

计算公式
L a y e r N o r m ( X + M u l t i H e a d A t t e n t i o n ( X ) ) L a y e r N o r m ( X + F e e d F o r w a r d ( X ) ) LayerNorm(X+MultiHeadAttention(X))\\ LayerNorm(X+FeedForward(X)) LayerNorm(X+MultiHeadAttention(X))LayerNorm(X+FeedForward(X))
X表示Multi-Head Attention 或者 Feed Forward 的输入,MultiHeadAttention(X)FeedForward(X) 表示输出

Add表示Residual connection,通常用于解决多层网络训练的问题,可以让网络只关注当前差异的部分,在 ResNet 中经常用到。

add

Norm表示Layer Normalisation,通常用于 RNN 结构,Layer Normalization 会将每一层神经元的输入都转成均值方差都一样的,这样可以加快收敛。

Position-wise Feed-Forward Network

一个前馈全连接网络,一共两层

第一层的激活函数是 ReLU,

第二层是一个线性激活函数, F F N ( Z ) = m a x ( 0 , Z W 1 + b 1 ) W 2 + b 2 FFN(Z)=max(0,ZW_1+b_1)W_2+b_2 FFN(Z)=max(0,ZW1+b1)W2+b2

Positional Encoding

Transformer在encoder和decoder之间引入一个额外向量Position Encoding,该向量可以决定当前word的位置,从而使Transformer可以解释输入序列中word的顺序。

计算方法
P E ( p o s , 2 i ) = s i n ( p o s 1000 0 2 i d m o d e l ) P E ( p o s , 2 i + 1 ) = c o s ( p o s 1000 0 2 i d m o d e l ) PE(pos,2i)=sin(\frac{pos}{10000^{\frac{2i}{d_model}}})\\ PE(pos,2i+1)=cos(\frac{pos}{10000^{\frac{2i}{d_model}}}) PE(pos,2i)=sin(10000dmodel2ipos)PE(pos,2i+1)=cos(10000dmodel2ipos)

然后将Position Encoding与embedding相加,作为输入传入下一层

Position Encoding

Decoder

Decoder

相比于Encoder,在最下层多了一个Masked Multi-Head Attention

Masked

在解码过程中,结果是一个time_step一个time_step生成的,在当前time_step解码输出只能依赖当前时刻之前的输出,所以使用 Mask 将后面的掩盖

两种方法

  • Padding Mask
  • Sequence Mask

Masked

输出

当Decoder层全部执行完毕后,通过在结尾加一个全连接层和softmax层,将输出的向量映射为我们需要的word

output

参考阅读

Transformer 模型详解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值