Transformer学习总结一

Transformer的基本原理

1.transforemr整体结构

比如在机器翻译中需要将法语翻译为英语
在这里插入图片描述
探究transformer的内部,可以分为encoder和decoder两部分
在这里插入图片描述
再展开一点,Encoder由很多(6个)结构一样的Encoder堆叠(stack)而成,Decoder也是一样。如下图所示。注意:每一个Encoder的输入是下一层Encoder输出,最底层Encoder的输入是原始的输入(法语句子);Decoder也是类似,但是最后一层Encoder的输出会输入给每一个Decoder层,这是Attention机制的要求。
在这里插入图片描述
每一层encoder都是相同的结构,都是由一个self-attention和一个前馈网络(全连接层)组成,如下图所示:
在这里插入图片描述
每一层的decoder也是相同的结构,除了self-attention层和全连接层之外外多了一个普通的attention层,这个attention层使得decoder在解码时会考虑最后一层Encoder所有时刻的输出。它的结构如下图所示。
在这里插入图片描述

2.self-attention理解

基本结构如下:
在这里插入图片描述
关键在于Q,K和V三个矩阵。这三个矩阵分别代表什么意思?
以机器翻译为例子,现在要让机器理解:

The animal didn't cross the streent because it was too tired.

这句话里面"it"的含义,代表的是street还是animal。那么,Q表示为了编码当前词"it",需要去attend的其他词,包括它自己本身,这些词表征为Q这个查询向量。K表示的是,当前Q里面需要被关注的这些词,需要被检索的关键,表征为K这个关键向量。我们就是通过Q和K这两个矩阵去生成当前词与其他词的attention score。而V代表的就是输入的这句话。这句话后面的每一个词需要去乘以Q和K生成的概率,得到最后"it"这个词的表征。
举一个例子:
翻译“I am chinese”
source : I am Chinese
target: 我是中国人
比如翻译目标单词为 I 的时候,Q为I
而source中的 “我” “是” “中国人”都是K,
那么Q就要与每一个source中的K进行对齐(相似度计算);"I"与"我"的相似度,"I"与"是"的相似度;"I"与"中国人"的相似度;
相似度的值进行归一化后会生成对齐概率值(“I"与source中每个单词的相似度(和为1)),也可以注意力值;
而V代表每个source中输出的context vector;如果为RNN模型的话就是对应的状态向量;即key与value相同;
然后相应的V与相应的概率值进行加权求和,就得到了context vetor;
在这里插入图片描述
再举个例子:
翻译一个词组Thinking Machines,其中Thinking的输入的embedding vector用 x 1 x_1 x1表示,Machines的embedding vector用 x 2 x_2 x2表示。
在这里插入图片描述
当我们处理Thinking这个词时,我们需要计算句子中所有词与它的Attention Score,这就像将当前词作为搜索的query,去和句子中所有词(包含该词本身)的key去匹配,看看相关度有多高。我们用 q 1 q_1 q1代表Thinking对应的query vector, k 1 k_1 k1 k 2 k_2 k2 分别代表Thinking以及Machines对应的key vector,则计算Thinking的attention score的时候我们需要计算 q 1 q_1 q1 k 1 , k 2 k_1,k_2 k1,k2 的点乘,同理,我们计算Machines的attention score的时候需要计算 q 1 q_1 q1 k 1 , k 2 k_1,k_2 k1,k2 的点乘。如上图中所示我们分别得到了 q 1 q_1 q1 k 1 , k 2 k_1,k_2 k1,k2 的点乘积,然后我们进行尺度缩放与softmax归一化,如下图所示:
在这里插入图片描述
显然,当前单词与其自身的attention score一般最大,其他单词根据与当前单词重要程度有相应的score。然后我们在用这些attention score与value vector相乘,得到加权的向量。
在这里插入图片描述
如果将输入的所有向量合并为矩阵形式,则所有query, key, value向量也可以合并为矩阵形式表示
在这里插入图片描述
其中 W Q , W K , W V W^Q,W^K,W^V WQ,WK,WV是我们模型训练过程学习到的合适的参数。上述操作即可简化为矩阵形式
在这里插入图片描述

3. multi-Head Attention

这篇论文还提出了Multi-Head Attention的概念。其实很简单,前面定义的一组Q、K和V可以让一个词attend to相关的词,我们可以定义多组Q、K和V,它们分别可以关注不同的上下文。计算Q、K和V的过程还是一样,这不过现在变换矩阵从一组 ( W Q , W K , W V ) (W^Q,W^K,W^V) (WQ,WK,WV)变成了多组 ( W 0 Q , W 0 K , W 0 V ) (W_0^Q,W_0^K,W_0^V) (W0Q,W0K,W0V) ( W 1 Q , W 1 K , W 1 V ) (W_1^Q,W_1^K,W_1^V) (W1Q,W1K,W1V),…。如下图所示:
在这里插入图片描述
对于输入矩阵(time_step, num_input),每一组Q、K和V都可以得到一个输出矩阵Z(time_step, num_features)。如下图所示。
在这里插入图片描述
但是后面的全连接网络需要的输入是一个矩阵而不是多个矩阵,因此我们可以把多个head输出的Z按照第二个维度拼接起来,但是这样的特征有一些多,因此Transformer又用了一个线性变换(矩阵 W O W^O WO)对它进行了压缩。这个过程如下图所示。
在这里插入图片描述
完整过程:
在这里插入图片描述
参考链接:

http://fancyerii.github.io/2019/03/09/transformer-illustrated/
https://blog.csdn.net/ningyanggege/article/details/89786077

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值