作者:yueji0j1anke
首发于公号:剑客古月的安全屋
字数:1898
阅读时间: 20min
声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。本文章内容纯属虚构,如遇巧合,纯属意外
目录
-
前言
-
Transformer整体架构
-
Transformer输入
-
Self-Attention
-
Encoder
-
Decorder
-
总结
0x00 前言
随着各大厂商的ai全面接入,笔者刚好把以前学习的深度学习知识拿出来晒晒,顺便温故而知新
对于transformer,大家的第一印象是什么呢?
对我而言,第一次接触到transformer还是gpt,毕竟这玩意儿就是基于transformer的大语言模型。
所以,重要吗,当然重要。
这也是笔者为什么选择拿transformer当作该专题的开山之作。
0x01 Transformer整体架构
transformer结构主要由 encoder和decoder 两部分组成
每部分都包含6个block
其是如何把 法语的一句·我是学生· 转换成 英语的 ·我是学生·的呢
step 1:获取每一个单词的表示向量x,x由 单词的embbdding与单词位置的Embedding相加而成(机器学习模型都只能处理数值输入,为了把这些离散对象正确传入,会通过向量方式投影到低维空间表达这些对象的内在联系,原理就是矩阵乘法)
比如->
-
"cat" → [0.23, 0.58, -0.17, 0.90]
-
"dog" → [0.31, 0.46, -0.23, 0.86]
-
"apple" → [-0.59, 0.05, 0.75, -0.11]
最后把每个词的x组合一起,形成一个矩阵
step 2: 将得到的向量矩阵传入encoder,经过6个block之后得到一个编码信息矩阵 C,我们用矩阵X(n*d)表示,n表示单词个数,d表示维度
step 3: 将矩阵c传到decoder,进行翻译
这是大致流程,下面详细讲解各部分细节(会很多。)
0x02 Transformer输入
刚刚讲到单词输入会转换成x向量,由单词Embedding和单词位置Embedding相加得到
1.单词Embedding
直接使用一些公开的、在大规模数据上训练好的词向量文件,如Google的Word2Vec、Stanford的GloVe、FastText等,即可获取单词Embedding
2.单词位置Embedding
除了单词Embedding,还需要表示单词出现的位置。Transformer不使用RNN结构,从而不能利用单词顺序信息。如何解决呢?
单词位置Embedding应运而生,用PE向量表示,其维度和单词Embedding一样,在transformer中,其采用公式计算得到
pos表示位置,d表示维度
0x03 Self-Attention(自注意力机制)
该图为transformer内部结构图,红色的部分就是Multi-Head Attention,由多个Self-Attention组成
encoder block包含1个Multi-Head Attention,decoder block包含两个Multi-Head Attention,除此之外还包括一个add & norm, add表示残差连接防止网络退化,norm表示层归一化,对每一层激活值归一化
1.Self-Attention 结构
该图为Self-Attention结构,计算的时候需要用到矩阵Q(查询) K(健值) V(值),三个矩阵是通过接受输入或者上一个Encoder Block的输出 通过线性变换得到的
2.Q、K、V的计算
使用线性变阵矩阵WQ,WK,WV计算得到
3.Self-Attention输出
得到Q、K、V之后就可以计算输出了,计算公式如下
1.计算 Attention 分数(打分)
2.缩放
3.归一化(softmax)
4.加权求和输出
4.multi-head Attention
我们已经知道 Self-Attention是如何输入输出的了,而multi-head Attention 则是由多个 Self-Attention 组合形成
multi-head Attention 包含多个 Self-Attention,我们假设是8个 得到8个输出矩阵之后,把他们concat一起,传入一个Linear层,得到最终的输出
0x04 Encoder结构
红色打圈部分便是encoder部分,包含了Muti-Head Attention + Add&Norm + Feed Forward + Add&Norm,那我们来好好了解Add&Norm 与 Feed Forward
1.Add&Norm
该层前面介绍过,由Add与Norm组成,前者为残差运算,后者为层归一化
公式如下
x表示Muti-Head Attention或Feed Forward的输入
add表示X+MultiHeadAttention(X),为残差连接,解决网络退化问题
norm 为层归一化,将每一层神经元的输入转成均值方差都一样的,加快收敛速度
2.Feed Forward
为两层的全连接层,第一层激活函数为Relu,第二层不使用激活函数
0x05 Decoder结构
上图红色部分为Decoder block结构,包含两个Mutl-Head Attention层和一个softmax层
1.第一个 Muti-Head Attention
第一个 Multi-Head Attention 采用了 Masked 操作,因为在翻译的过程中是顺序翻译的,即翻译完第 i 个单词,才可以翻译第 i+1 个单词。通过 Masked 操作可以防止第 i 个单词知道 i+1 个单词之后的信息
实际操作中通输入mask矩阵来确定哪些词是遮挡和不遮挡
在计算QKt之后需要进行softmax,计算attention score,这个时候会用mask矩阵遮挡信息
从而导致但是单词 0 在单词 1, 2, 3, 4 上的 attention score 都为 0。依次类推
2.第二个 Muti-Head Attention
和之前差别不大,但需要注意的是,其中self-attention的K、V矩阵不是使用上一个Decorder Block输出计算出,而是由encoder计算出的信息编码矩阵C计算出
3.softmax预测输出单词
Decoder block 最后的部分是利用 Softmax 预测下一个单词,在之前的网络层我们可以得到一个最终的输出 Z,因为 Mask 的存在,使得单词 0 的输出 Z0 只包含单词 0 的信息
Softmax 根据输出矩阵的每一行预测下一个单词:
0x06 Transformer总结
首先给transformer来句盖棺定论的话:其以自注意力机制为核心,实现高效、高质量的序列建模
核心
1.self注意力机制:其中用到Q、K、V向量通过输入进行线性变换得到
2.多头注意力机制:让模型以多种方式多角度对序列信息进行融合,深入挖掘多样化、复杂的特征和联系
原文始发于微信公众号(剑客古月的安全屋):攻防ai基础篇-transformer模型详解
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论