10分钟入门transformer

本文介绍了Transformer模型的背景及结构,包括Embedding、Position Encoding、Encoder的multi-head self-attention层、Decoder的masked multi-head self-attention,强调self-attention在处理长距离依赖和并行计算的优势。
摘要由CSDN通过智能技术生成

理解本文需要以下基础知识

  • 前向神经网络
  • attention
  • encoder-decoder
  • sequence to sequence learning

背景介绍

基于RNN的神经网络在自然语言处理领域一直处于领先地位。RNN衍生的两个方法LSTMGRU很好的解决了梯度消失的问题,因此基于RNN的神经网络成为sequence to sequence learning的优先选择。

Ilya Sutskever[6]等人在2014年将encoder-decoder用于机器翻译。先用一个LSTM模型编码输入的序列的信息,再用一个LSTM输出另一个序列。如图
在这里插入图片描述但是,通过encoder得到是一个固定长度的向量,当句子较长时,RNN结构无法关注到距离较远的信息。Bahdanau等人[7]在2016提供了attention结构用于关注句子中的重点信息。

无论是encoder-decoder还是attention都基于RNN的网络结构作出的改进,而RNN迭代式计算的效率不高,很难充分利用GPU的进行并行计算。

因此,一些学者打算抛弃RNN结构。Facebook AI 团队在2017年采用CNN卷积核的网络结构[8],把句子通过卷积核提取信息,在底层CNN覆盖的语义范围小,而越到高层,覆盖的语义环境会越大[9]。如下图
在这里插入图片描述虽然CNN结构可以并行化,但是依然无法解决长距离依赖的问题。同年,google brain发表了论文《Attention Is All You Need》,完全使用attention进行训练。提出的self-attention结构充分考虑了句子所有词的关系,更好地编码序列中的数据。

文中提出的transformer结构如下图。一眼看过去是不是有点晕,没事,我们接下来按照数据流向解析一下这张图
在这里插入图片描述

Transformer结构解析

第一部分:Embedding

Input Embedding

input embedding和word embedding 方式一样。可以选择pretrained 的embedding比如fasttext, word2vec,或者直接初始化一个embedding matrix,在模型中训练参数。

Position Encoding(划重点)

transformer不像RNN结构保留了序列中的相对位置信息。因此使用position encoding来记录序列的位置信息。这里用的是sine and cosine函数(见公式)表示position encoding。作者认为 P E ( p o s + k ) PE{(pos + k)} PE(pos+k) P E ( p o s ) PE{(pos)} PE(pos) 线性相关,因此用三角函数能够表示这种关系(我也不知道为啥,大家可以看看https://kazemnejad.com/blog/transformer_architecture_positional_encoding/

P E ( p o s , 2 i ) = s i n ( p o s / 1000 0 2 i / d m o d e l ) PE_{(pos, 2i)} = sin(pos/10000^{2i/d_model}) PE(pos,2i)=sin(pos/100002i/dmodel)

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 + 1)} = cos(pos/10000^{2i/d_model}) PE(pos,2i+1)=cos(pos/100002i/dmodel)

在这里插入图片描述

第二部分:Encoder

Encoder (见下图)叠加了6层相同的layer, 每个layer有两个sublayer,一个sublayer是multi-head self-attention, 一个sublayer是position-wise feed forward neural network。在每个sublayer后面,采用了residual learning 和 layer normalization计算输出,输出为LayerNorm(x + sublayer(x))。residual learning是由Kaiming He[1]等人提出的,用于解决CNN层数过多导致的训练误差增大,模型性能下降的问题。residual learning 的表现形式之一: y = f ( x ) + x y = f(x) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值