IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【Transformer论文模型细致讲解】 -> 正文阅读

[人工智能]【Transformer论文模型细致讲解】

Transformer是谷歌在2017年6月提出,发表在NIPS2017上。论文地址 Attention Is All You Need。

Transformer主体框架是一个encoder-decoder结构,去掉了RNN序列结构,完全基于attention和全连接。在WMT2014英语翻译德语任务上,bleu值达到了28.4,达到当时的SOTA。其总体结构如下所示
在这里插入图片描述

1.首先是Encoder
我们将Encoder分为两个部分,一个是输入层embedding,另一个是编码层,也就是左边放方框框里面的东西

1.1.Embedding,又分为两个部分,token embedding和positional encoding
1.1.1Token embedding
这个就是文本向量化,普遍有两种方法:
1)采用固定词向量,比如利用Word2vec预先训练好的。这种方式是LSTM时代常用的方式,比较简单省事,无需训练。但由于词向量是固定的,不能解决一词多义的问题,词语本身也没有结合上下文语境信息,另外对于不在词向量中的词语,比如特定领域词语或者新词,容易出现OOV问题。
2)随机初始化,然后训练。这种方式比较麻烦,需要大规模训练语料,但能解决固定词向量的一系列问题。Transformer采用了这种方式

关键点1:Transformer的随机初始化
一开始我还以为Transformer的随机初始化是很简单的,比如随便弄个确定长度的词向量然后直接给进去训练返回,后来我看到后面的attention层之后才知道和我想的区别很大,如果不弄懂这个我们后面就很难理解。
首先对于每个词,我们都会有一个随机的xi列向量对应,x1-m对应了文本所有词汇,共同组成文本矩阵X(有多少词就有多少列,行数对应的就是一个xi的行数),最关键的就是attention,注意力机制,特别是self-attention,我们分别有三个矩阵W(q,k,v),这个是就是随机初始化的,然后我们分别与原文本矩阵X相乘,得到QKV三个矩阵,分别为Query,Key和Value。这三个得到的矩阵就是我们实现self-attention的关键。

在这里插入图片描述
在这里插入图片描述

我是这样理解的,因为其实后面我们会讲到每一个encoder的输入都来自于上个encoder的输出,所以Q=K=V(不过这里的QKV是相当于第一个Input的X,而Q‘,K‘,V’才是真正新的QKV),那么我们认为Q就是保存了原来的信息,后面会计算Q@K’,这个时候我们就是计算不同的K对于同一个q(Q中的元素)的影响,也就是上下文的对于这个元素q的影响(包括自己),一般来说应该是计算相似性,然后经过防止太大然后还有softmax进行归一化,最后再乘以V来得到输出,也就是加权求和,所以V才是我们真正需要提炼的信息,不过实际上还是给网络自己来训练得到,其实和卷积挺像的,W类似于kernel。
先讲到这里,我们继续往下走,因为剩下的就是encoder主要结构,也是transformer的核心所在,我会在后文详细讲述。

1.1.2Positional encoding
位置编码其实也普遍有两种,一个固定的,一个训练的。
1)固定编码。Transformer采用了这一方式,通过奇数列cos函数,偶数列sin函数方式,利用三角函数对位置进行固定编码。
2)动态训练。BERT采用了这种方式。先随机初始化一个embedding table,然后训练得到table 参数值。predict时通过embedding_lookup找到每个位置的embedding。这种方式和token embedding类似。

Transformer的方法这个比较神奇,我们先把图挂上去:
在这里插入图片描述
在这里插入图片描述

虽然我知道有线性,整个位置成为一个级数,说是很容易让模型通过相对位置学习参加,但但实际上我也还是不太理解什么意思。
不过后面看了deberta就知道了,其实我理解的是对的,文本随机初始化+固定位置编码其实并只能学到一点,还是需要解耦合,用另外的vector来存储位置信息然后concat而不是加法。
作者有解释:
在这里插入图片描述
在这里插入图片描述

1.2Encodeing layer
1.2.1Mult-head Attention
这里就是精华所在了,是transformer的核心,默认为6层。而且我们要开始话接上文。
首先我们要介绍一下细节部分:
在这里插入图片描述

是不是很眼熟,这就是我们上面纯口述的Embedding随机初始化训练的操作。但是实际上这个是self-attention的操作,
具体结构如下图:
在这里插入图片描述

QKV矩阵怎么得到我们上面已经说过了,这里我们就来根据图像讲解一下具体怎么运算的,计算过程:

Q.shape=[m,dk]

K^T .shape=[dk,m]

V.shape=[m,dv]

A=QK^T,shape=[m,m]

A=A/sqrt(dk)

B=softmax(A,dim=0), 按列计算softmax, shape=[m,m]

B.shape=[m,m],每一行相当于是某一个querry对所有K的attention比例。

out = B *V ,shape=[m,dv]

可以看到这里我们的dk必须相同,即QK维度需要相同,因为要做矩阵运算,但是dv可以完全随机的,但是为了方便我们还是用的一个维度的。这是为了防止在使用大dk时,A矩阵数值上过大,使得经过softmax变成B以后,梯度太小。

然后就是最关键的Mult-head attention layer
Transformer采用了多头感知机,把原来的QKV矩阵都通过Wi(q,k,v)线性映射到Q‘K’V‘上,这个时候就和上面是一样的内容了,结构如下图所示:
在这里插入图片描述

我们可以看到,如果是h头,那么拿Q举例子,就被分割成h个512/h维的向量,因为这里的QKV就是上一层encoder的输出,或者是第一层的embedding转化得到的。其实我们第一层的QKV就是随机初始化得到的矩阵,通过Wiqkv矩阵映射,然后我们后面训练Wiqkv就可以得到好的结果了,在经历我们上面讲的sclaed attention层之后,因为是h块,所以我们要通过concat连接,随后再通过一个线性连接输出,这里说的是因为要兼容不相等,这个也是一个疑问点。

在encoder里,每一个self-attention sub-layer的Q,K,V都是上一个encode layer的输出。
意思就是Q,K,V是同一个东西。这样的好处是,当前encode layer的每一个位置,都可以处理上一层encode layer的每一个位置。

1.2.2Add&Norm
说白了就是个残差连接,把原来的输入+经过Mult-head Attention层的结果当作新的输出往下传递。

1.2.3Feed Forward
这个说白了就是个全连接层而已。

2.Decoder
这个也很关键,但是却是类似的,只是说比encoder多了一个sub-layer,然后这个layer就是在multi-head attention层多了一个mask而已。
其中值得注意的是:
2.1mask问题

在这里插入图片描述

可以发现,我们decoder的第一个子层有一个mask,虽然我们也想这一层的decoder可以处理上一层的所有信息,但是我们作为解码器其实不应该是知道输出后面的信息的,为了符合逻辑防止信息穿越,我们就要把后面的信息设置掩码,所以第i行只能看到第i列为止的信息。所以我们设置mask处的值为负无穷,这样softmax之后值就趋近于0,没有影响。

2.2输入问题
可以看到我们的第二个子层输入和encoder是很不一样的,因为不是完全接受上一层的输出,而是QK矩阵来自encoder的输出,而V矩阵才来之上一个mask multi-head attention层。

剩下的就都讲过了,和encoder一样。

3.参数共享及输出
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

因为这三个地方的参数维度都是一样的,所以可以共享,并且有工作指出,直接利用embd里训练出来的相似性,可以提高softmax的表现
Using the Output Embedding to Improve Language Models(Ofir Press and Lior Wolf),https://arxiv.org/pdf/1608.05859.pdf 。

这个共享参数是本质上还是decoder输出的用户向量与所有词向量的内积,即代表了当前output与所有词向量的“距离”,或者说关系程度。其实我也还是不太理解…

至此,Transformer就讲完了
Transformer相比LSTM的优点
1.完全的并行计算,Transformer的attention和feed-forward,均可以并行计算。而LSTM则依赖上一时刻,必须串行
2.减少长程依赖,利用self-attention将每个字之间距离缩短为1,大大缓解了长距离依赖问题
3.提高网络深度。由于大大缓解了长程依赖梯度衰减问题,Transformer网络可以很深,基于Transformer的BERT甚至可以做到24层。而LSTM一般只有2层或者4层。网络越深,高4.阶特征捕获能力越好,模型performance也可以越高。
5.真正的双向网络。Transformer可以同时融合前后位置的信息,而双向LSTM只是简单的将两个方向的结果相加,严格来说仍然是单向的。
6.可解释性强。完全基于attention的Transformer,可以表达字与字之间的相关关系,可解释性更强。

但是小规模数据集或者太大的文本长度都不太好,所以还有其他工作或者变式有所补充。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-11-30 15:37:27  更:2021-11-30 15:37:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 4:00:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码