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

Attention在2014年由bengio团队提出。

transformer本质是一种编解码结构。

Bert?基于transformer,用于生成词向量。

transformer的编解码结构

编码部分=self-Attenion?+ Feed Forward Neural Network

解码部分=self-Attenion?+ Encoder-Deccoder Attention+ Feed Forward Neural Network

self-attention:

? ? ? ? ?有三个不同的权值矩阵Wq、Wk、Wv

1)输入两个单词,经过embedding后(例如通过word2Vec等词嵌入方法),转换成等长的特征向量x(又称嵌入向量,均为512长度)。

2)x乘以三个权值矩阵Wq、Wk、Wv后(均为512*64维度),得到3个向量q、k、v(64维)

?3)每个词有q、k、v共3个向量,根据q和k,计算一个score=q*k

4)为了梯度稳定,对score归一化,除k向量以维度开根号,score/,dk=64,实际就是除以8。这一步的目的是缩小softmax前的差距,进而缩小softmax后的差距。实例如下:

import numpy as np
def softmax(x):
    x = np.exp(x)
    sum_x = np.sum(x)
    return x/sum_x

a = np.array([112, 96])   # [  9.99999887e-01   1.12535162e-07]
print(softmax(a))
a = np.array([112/8, 96/8])   # [ 0.88079708  0.11920292]
print(softmax(a))

5)softmax,得到每个kv对应的权重

6)根据权重,对各个V加权求和,得到加权特征向量

Feed Forward Neural Network:

? ? 是个2层的全连接,第一层的激活函数是Relu,第二层是线性激活函数,下式中z代表self-attention的输出,FFN就是全连接结构。

?编码部分中还有位置编码position encoding和残差的设计,即

encoding=self-attentipn+feed forward+resnet+position encodding+add & Normalize

??Multi-Head Attention

? ? 多头注意力机制,transformer使用了8头,初始化8个Q、K、V矩阵,将得到的8个zi进行concat连接后,经过一个全连接层,得到最终的z

?Encoder-Decoder Attention

? ? ? ?编解码注意力层,为解码器独有,接收上一层输出的Q和编码器输出的K、V

Masked Multi-Head Attention

? ? ?掩码多头注意力机制,在解码过程中,只能获取当前位置前面的输出,后面位置信息是masked掩码的。

两种mask:padding mask、?sequence mask

padding mask:将不同长度的序列处理成一样长度,进行对齐,短的补0,长的截断。做法是把这些位置的值加上一个非常大的负数(负无穷),经过 softmax,这些位置的概率就会接近0。

a = np.array([112, -96])   # 较大的负数经过softmax接近于0  
print(softmax(a))   # [  1.00000000e+00   5.10908903e-12]

sequence mask:

? ? ?t的时刻解码器的输出只能依赖于前面的时刻。做法是产生一个上三角矩阵,上三角的值全为0,把这个矩阵作用在每一个序列上,就可以达到目的。

? ? 在需要2种mask效果叠加的场合,2个mask相加即可。

位置编码position embedding

? ? 有别于词袋模型,transformer对位置信息敏感,位置信息可以通过设计或学习得到。位置编码需要和嵌入向量相同维度,使2者可以相加。?在设计中,偶数位置,使用正弦编码,在奇数位置,使用余弦编码。

?

? ? ? ?

transformer完整结构图

? ? ?当需要多个编解码器形成堆栈时,将词嵌入(word embeddings)传递给第一个编码器。输出传递给下一个编码器,最后一个编码器的输出K、V传给所有解码器。

?

?

?

? ? transformer是有别于cnn和rnn的一种新的结构,

优点:

  1. 并行能力,不依赖前一时刻的计算结果
  2. lstm等存在长期依赖问题,即便有门的设计也会出现信息丢失

缺点:

? ? ? ? 注意力只能处理固定长度的文本字符串。在输入系统之前,文本必须被分割成一定数量的段或块。这种文本块会导致上下文碎片化。例如,如果一个句子从中间分隔,那么大量的上下文就会丢失。换言之,在不考虑句子或任何其他语义边界的情况下对文本进行分隔。例如只能处理512长度的信息,有312个box时,切1段补0,;有600个box时,切2段补0。

? ? ? ? 针对这个切断问题,提出了Transformer-XL,将上一段的信息传递到下一段。

参考文献:

https://zhuanlan.zhihu.com/p/48508221

https://www.infoq.cn/article/QBloqM0Rf*SV6v0JMUlF

https://www.cnblogs.com/mantch/p/11591937.html

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-12 16:36:04  更:2021-08-12 16:39:00 
 
开发: 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 20:32:21-

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