1 Transformer 模型结构
处理自然语言序列的模型有 rnn, cnn(textcnn),但是现在介绍一种新的模型,transformer。与RNN不同的是,Transformer直接把一句话当做一个矩阵进行处理,要知道,RNN是把每一个字的Embedding Vector输入进行,隐层节点的信息传递来完成编码的工作。简而言之,Transformer 直接粗暴(后面Attention也就是矩阵的内积运算等)。

Attention 的编码,把一个输入序列(x1,...,xn) (x_1,...,x_n)(x
1

,...,x
n

)表示为连续序列z=(z1,...,zn) \mathbf {z} = (z_1,...,z_n)z=(z
1

,...,z
n

).给定z \mathbf {z}z, 解码生成一个输出序列 (y1,...,ym) (y_1,..., y_m)(y
1

,...,y
m

). 模型每一步都是自回归的(?),即假设之前生成的结果都是作为生成下一个符号的额外输入。
TransFormer 模型使用堆叠的自注意力
(self-attention)、逐点(point-wise)、全连接层(fully connected layers).

1.1 堆叠的编码和解码
编码:编码器由 N=6 个相同的层堆叠成,每层有两个减层(sub-layers)和标准化层。
解码: 有6个相同层堆叠而成,此外,在解码堆叠中,增加自注意力减层,防止 位置出现偏差。

1.2 Attention
NLP领域中,Attention网络基本成为了标配,是Seq2Seq的创新。Attention网络是为了解决编码器-解码器结构存在的长输入序列问题。
Attention功能可以被描述为将查询和一组键值对映射到输出,其中查询,键,值和输出都是向量。输出可以通过对查血的值加权来计算。

1.2.1 压缩的点乘注意力机制
输入:查询(query)、键(维度dk d_kd
k

)、值(维度 dv d_vd
v

).
查询矩阵Q、键矩阵K、值矩阵V
输出:
Attention(Q,K,V)=softmax(QKT(dk)√)V Attention(Q,K,V)= softmax(\frac{QK^T}{\sqrt{(d_k)}})VAttention(Q,K,V)=softmax(
(d
k

)

QK
T


)V

Attention与RNN/CNN不同,在于Attention,直接将xt x_tx
t

与原来的每个词进行比较,最后算出yt y_ty
t

;即
yt=f(xt,A,B) y_t = f(x_t, \Alpha, \Beta)y
t

=f(x
t

,A,B)
其中,A,B为另外一个序列或矩阵;如果A=B=X,那么称为 Self Attention.

举例:

embedding在进入到Attention之前,有3个分叉,那表示说从1个向量,变成了3个向量Q,K,V,它是通过定义一个WQ矩阵(这个矩阵随机初始化,通过前向反馈网络训练得到),将embedding和WQ矩阵做乘法,得到查询向量q,假设输入embedding是512维,在上图中我们用4个小方格表示,输出的查询向量是64维,上图中用3个小方格以示不同。然后类似地,定义WK和WV矩阵,将embedding和WK做矩阵乘法,得到键向量k;将embeding和WV做矩阵乘法,得到值向量v。对每一个embedding做同样的操作,那么每个输入就得到了3个向量,查询向量,键向量和值向量。需要注意的是,查询向量和键向量要有相同的维度,值向量的维度可以相同,也可以不同,但一般也是相同的。

至于将获得的Q,K,V矩阵具体操作,总的来说,就是以下这幅图。

获得的Z和目标值进行比较,获得的损失反向传播,优化的参数是,WQ,WK,WV W_Q, W_K, W_VW
Q

,W
K

,W
V

.

1.2.2 Multi-Head Attention
MultiHead(Q,K,V)=Concat(head1,...,headh) MultiHead(Q, K, V) = Concat(head_1,...,head_h)MultiHead(Q,K,V)=Concat(head
1

,...,head
h

)
多头注意力机制,只是多做几次同样的事,然后把结果拼接。

1.3 Position Embedding
Position Embedding,将每个位置编号,每个编号对应一个向量,这样,Attention可以分辨出不同位置的词了。

Position Embedding:
⎧⎩⎨⎪⎪PE2i(p)=sin(p/100002i/dpos),PE2i+1(p)=cos(p/100002i/dpos) \left\{\begin{array}{lr}PE_{2i}(p) = sin(p/10000^{2i/d_{pos}}), & \\PE_{2i+1}(p) = cos(p/10000^{2i/d_{pos}}) & \end{array}\right.{
PE
2i

(p)=sin(p/10000
2i/d
pos

),
PE
2i+1

(p)=cos(p/10000
2i/d
pos

)

p,代表位置; i,代表维度;
使用这个公式,在于这个能更好表示相对位置。

sin(α+β)=sinαcosβ+sinβcosα sin({\alpha} + {\beta}) = sin{\alpha} cos{\beta} + sin{\beta} cos{\alpha}sin(α+β)=sinαcosβ+sinβcosα ,
cos(α+β)=cosαcosβ−sinαsinβ cos(\alpha + \beta) = cos{\alpha}cos{\beta} - sin{\alpha}sin{\beta}cos(α+β)=cosαcosβ−sinαsinβ
位置可以由两个位置之间的线性变换得到。

2 实践
import numpy as np
encoder = np.transpose([[3,12,45], [59,2,5], [1,43,5], [4,3,45.3]])
decoder = np.array([0.5, 0.1, 2])

#Score Matrix
def score(encoder, decoder):
return np.dot(np.transpose(encoder),decoder)

scoreMatrix = score(encoder, decoder)

#softmax score matrix
def softmax(x):
# x = np.array(x, dtype = np.float128)
print(np.exp(x))
print(np.sum(np.exp(x)))
return np.exp(x)/np.sum(np.exp(x), axis = 0)
scoreSoftmax = softmax(scoreMatrix)

#multiply with encoder matrix
def multiply(x, weight):
return np.multiply(x, weight)

weightEncoder = multiply(encoder, scoreSoftmax)

#get Attention Vector
def attentionVec(x):
return np.sum(x, axis = 1)
att_vec = attentionVec(weightEncoder)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
reference:

Attention is all you need;
bojone Attentionn;
RNN 中的Attention;
attention kaggle;
公众号大数据文摘 transformer介绍;
英文blog,非常详细,5是其译文;
---------------------
作者:rosefun96
来源:CSDN
原文:https://blog.csdn.net/rosefun96/article/details/84930540
版权声明:本文为博主原创文章,转载请附上博文链接!

浅谈Transformer 及Attention网络相关推荐

  1. 【工大SCIR笔记】浅谈Transformer模型中的位置表示

    作者:哈工大SCIR 徐啸 0. 何为位置信息 首先简单谈一下位置信息.一般将位置信息简单分为绝对位置信息和相对位置信息,并且前者对句子语义的影响不大,更为重要的是后者. 以情感分析 (Sentime ...

  2. 浅谈Transformer的初始化、参数化与标准化

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨苏剑林@知乎(已授权) 来源丨https://zhuanlan ...

  3. CNN看清世界——浅谈四个经典网络的差异

    本文介绍4种经典的卷积神经网络CNN,分别是AlexNet,VGGNet,Google Inception Net和ResNet,这4种网络依照出现的先后顺序排列,深度和复杂度也依次递进,并且在ILS ...

  4. [转]浅谈基于数据分析的网络态势感知

    原文地址:https://www.jianshu.com/p/821032f40372 态势感知(Situational Awareness,SA)的概念最早在军事领域被提出.20世纪80年代,美国空 ...

  5. 计算机网络高校校园网设计思路,浅谈高校信息化校园网络设计及教育应用

    摘 要: 信息化校园主要是以校园网为基础,将网络化.智能化.数字化和应用化作为发展目标,将校园信息充分数字化.其中所谓的校园网就是指校园内连接起来的计算机网络,它可以将信息管理.教学管理.行政管理等结 ...

  6. 存储大师班 | 浅谈 RDMA 与无损网络

    魏国武 QingStor 资深研发工程师 近 10 年企业级软件开发经验,专注于大规模分布式存储研发,擅长集群性能调优.高可用研究及容灾. 为什么需要 RDMA 当今是云计算.大数据的时代,企业业务持 ...

  7. 浅谈百度云计算网络的构建之路

    在云计算的三大基础设施中,网络服务被认为是构建云生态最重要的基石.然而不管是业界流行的 SDN/NFV,还是兼容并包的开源框架 openstack neutron,都没有很好的解决来自数据平面和控制平 ...

  8. 浅谈“双平面”冗余架构

    浅谈"一网双平面"网络冗余架构 理论上来看:双平面架构的优势-冗余程度极高,可以实现高强度的互备分流效果. 如图所示,假设这是一个大型企业集团自己组建的广域骨干网络架构图,采用了双 ...

  9. 浅谈Attention机制的作用

    浅谈注意力机制的作用 前言 什么是注意力机制 空间注意力 对于时间步的注意力机制 1.数据集的制作 2.建立注意力模型 3.建立整体神经网络 4.完整代码 5.实验效果 通道注意力机制 前言 Atte ...

最新文章

  1. 移动web开发常用JavaScript代码(转)
  2. ad输出光绘文件_90%的工程师容易忽视(一):PCB输出gerber文件,这样操作才正确!...
  3. isfull mysql_MySQL数据库之MySQL 出现 The table is full 的解决方法
  4. 算法笔记_056:蓝桥杯练习 未名湖边的烦恼(Java)
  5. ROS2官网安装教程补充
  6. linux系统下:IO端口,内存,PCI总线 的 读写(I/O)操作
  7. Dockerfile最佳实践
  8. java递归mysql生成树_java递归生成树结构的数据
  9. Wirkshark表达式
  10. PHP专家陪练营试听课程下载
  11. 官方授权正版 Avast AntiTrack Premium 反跟踪工具软件
  12. win7桌面计算机图标去掉,win7桌面图标小箭头怎么去掉?
  13. Jenkins+GitLab+Docker持续集成LNMP
  14. 在用origin画图时,图表左上角会出现大写字母C,去除方法:
  15. iOS企业签名过程中APP频繁出现闪退是什么原因?
  16. fatfs文件系统详解之f_mount函数分析
  17. 百变郁锦香,开创新典范,深化全球战略布局成就国际高端酒店品质之选
  18. 安装系统遇到MBR的硬盘,EFI系统只能安装GPT硬盘
  19. 读计算机专业买什么电脑比较好?
  20. excel多表数据汇总

热门文章

  1. UUID的使用及其原理
  2. 2022-2028年中国三轴陀螺仪行业市场深度分析及投资前景分析报告
  3. QT学习之状态机框架
  4. Ubuntu使用wget下载zabbix的扩展源
  5. BERT大火却不懂Transformer?读这一篇就够了 重点 命名实体识别
  6. 【快速上手mac必备】常用优质mac软件推荐(音视频、办公、软件开发、辅助工具、系统管理、云存储)
  7. Typora+PicGo图床配置(本地图片-->网络url~博客必备)
  8. C语言与OpenCL的编程示例比较
  9. Non-Maximum Suppression,NMS非极大值抑制
  10. C++ OP相关注意事项