2021SC@SDUSC软件工程应用与实践12----Transformer基础

2021SC@SDUSC

一,前言

   为了使用transformer中的encoder和decoder来优化药物蛋白结合的方式,我们需要Transformer相关知识,这里分享下transformer相关基础。

二,参考资料

本篇博客主要参考了:Transformer模型详解(图解最完整版) - 知乎

三,Transformer基础

1.总体结构

Transformer常被用于翻译,这里也用一个翻译的例子

 如图,一个Transformer由Encoder和Decoder组成,而每个部分有六个Block

2.Encoder输入

输入的每个词的embedding都有词Embedding和位置Embedding组成,每个词的embedding最后又组成一个向量矩阵

2.1 单词 Embedding

单词的 Embedding 有很多种方式可以获取,例如可以采用 Word2Vec、Glove 等算法预训练得到,也可以在 Transformer 中训练得到。

2.2 位置 Embedding

Transformer 中除了单词的 Embedding,还需要使用位置 Embedding 表示单词出现在句子中的位置。因为 Transformer 不采用 RNN 的结构,而是使用全局信息,不能利用单词的顺序信息,而这部分信息对于 NLP 来说非常重要。所以 Transformer 中使用位置 Embedding 保存单词在序列中的相对或绝对位置。

位置 Embedding 用 PE表示,PE 的维度与单词 Embedding 是一样的。PE 可以通过训练得到,也可以使用某种公式计算得到。在 Transformer 中采用了后者,计算公式如下:

 其中,pos 表示单词在句子中的位置,d 表示 PE的维度 (与词 Embedding 一样),2i 表示偶数的维度,2i+1 表示奇数维度 (即 2i≤d, 2i+1≤d)

使用该公式表示位置的好处:

  • 使 PE 能够适应比训练集里面所有句子更长的句子,假设训练集里面最长的句子是有 20 个单词,突然来了一个长度为 21 的句子,则使用公式计算的方法可以计算出第 21 位的 Embedding。
  • 可以让模型容易地计算出相对位置,对于固定长度的间距 k,PE(pos+k) 可以用 PE(pos) 计算得到。因为 Sin(A+B) = Sin(A)Cos(B) + Cos(A)Sin(B), Cos(A+B) = Cos(A)Cos(B) - Sin(A)Sin(B)。

两个Embedding相加,就是输入的X的Embedding

 3.Encoder输出

由Encoder输出的是一个与输入规模完全一致的编码矩阵,这个矩阵将作为Decoder的输入

4.Decoder输入输出

Decoder接收编码矩阵C,将根据已经预测出来的0--i行去预测第i+1行,比如C的第一行是Begin,根据这个预测出下一行是I,之后将Begin和I一同输入预测下一个词为have

5.Self-Attention(自注意力机制)

上图是论文中 Transformer 的内部结构图,左侧为 Encoder block,右侧为 Decoder block。红色圈中的部分为 Multi-Head Attention,是由多个 Self-Attention组成的,可以看到 Encoder block 包含一个 Multi-Head Attention,而 Decoder block 包含两个 Multi-Head Attention (其中有一个用到 Masked)。Multi-Head Attention 上方还包括一个 Add & Norm 层,Add 表示残差连接 (Residual Connection) 用于防止网络退化,Norm 表示 Layer Normalization,用于对每一层的激活值进行归一化。

因为 Self-Attention是 Transformer 的重点,所以我们重点关注 Multi-Head Attention 以及 Self-Attention,首先详细了解一下 Self-Attention 的内部逻辑。

 3.1 Self-Attention 结构

上图是 Self-Attention 的结构,在计算的时候需要用到矩阵Q(查询),K(键值),V(值)。在实际中,Self-Attention 接收的是输入(单词的表示向量x组成的矩阵X) 或者上一个 Encoder block 的输出。而Q,K,V正是通过 Self-Attention 的输入进行线性变换得到的。 

3.2 Q, K, V 的计算

 3.3 Self-Attention 的输出

得到矩阵 Q, K, V之后就可以计算出 Self-Attention 的输出了,计算的公式如下:

公式中计算矩阵Q和K的每一行的内积,为了防止内积过大,因此除以dk的平方根。Q乘以K的转置之后,得到的矩阵行列数都是n,n为句子单词数,这个矩阵可以表示单词间的attention强度。下图为Q乘以KT,1234表示四个单词

对QT用softmax进行归一化(每一行的和都变成1)

得到 Softmax 矩阵之后可以和V相乘,得到最终的输出Z

PS:Z的计算方式并非普通矩阵乘法

 

6.Decoder结构

上图红色部分为 Transformer 的 Decoder block 结构,与 Encoder block 相似,但是存在一些区别:

  • 包含两个 Multi-Head Attention 层。
  • 第一个 Multi-Head Attention 层采用了 Masked 操作。
  • 第二个 Multi-Head Attention 层的K, V矩阵使用 Encoder 的编码信息矩阵C进行计算,而Q使用上一个 Decoder block 的输出计算。
  • 最后有一个 Softmax 层计算下一个翻译单词的概率。

5.1 第一个 Multi-Head Attention

Decoder block 的第一个 Multi-Head Attention 采用了 Masked 操作,因为在翻译的过程中是顺序翻译的,即翻译完第 i 个单词,才可以翻译第 i+1 个单词。通过 Masked 操作可以防止第 i 个单词知道 i+1 个单词之后的信息。下面以 "我有一只猫" 翻译成 "I have a cat" 为例,了解一下 Masked 操作。

下面的描述中使用了类似 Teacher Forcing 的概念,不熟悉 Teacher Forcing 的童鞋可以参考以下上一篇文章Seq2Seq 模型详解。在 Decoder 的时候,是需要根据之前的翻译,求解当前最有可能的翻译,如下图所示。首先根据输入 "<Begin>" 预测出第一个单词为 "I",然后根据输入 "<Begin> I" 预测下一个单词 "have"。

 

Decoder 可以在训练的过程中使用 Teacher Forcing 并且并行化训练,即将正确的单词序列 (<Begin> I have a cat) 和对应输出 (I have a cat <end>) 传递到 Decoder。那么在预测第 i 个输出时,就要将第 i+1 之后的单词掩盖住,注意 Mask 操作是在 Self-Attention 的 Softmax 之前使用的,下面用 0 1 2 3 4 5 分别表示 "<Begin> I have a cat <end>"。

第一步:是 Decoder 的输入矩阵和 Mask 矩阵,输入矩阵包含 "<Begin> I have a cat" (0, 1, 2, 3, 4) 五个单词的表示向量,Mask 是一个 5×5 的矩阵。在 Mask 可以发现单词 0 只能使用单词 0 的信息,而单词 1 可以使用单词 0, 1 的信息,即只能使用之前的信息。 

第二步:输入矩阵X计算得到Q,K,V矩阵,再计算Q与KT乘积

 

 第三步:得到QKT后softmax一下,得到attention_score,但是在softmax之前需要先mask一下,具体操作如下 

第四步:使用Mask QKT与V相乘就可输出Z,单词1的输出Z1仅包含单词1的信息

第五步:完成

四,总结

以上便是本次博客的全部内容,如有问题,欢迎在评论区讨论

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
深度学习是近年来非常热门的技术领域,而预训练模型-transformer深度学习中一种非常受关注的模型。在MATLAB中实战应用预训练模型-transformer可以实现许多有趣的应用。 首先,预训练模型-transformer在自然语言处理领域有很好的应用。通过使用MATLAB中提供的transformer模型,我们可以对文本进行处理和分析。比如,可以利用transformer模型进行文本分类、情感分析、机器翻译等任务。通过使用预训练模型-transformer,我们可以获得更好的性能,并减少模型的训练时间和资源消耗。 其次,预训练模型-transformer还可以应用于图像处理和计算机视觉任务。在MATLAB中,我们可以使用transformer模型来进行图像分类、目标检测和图像生成等任务。通过利用预训练模型-transformer的强大表示能力,可以提高图像处理任务的准确性和效率。 此外,预训练模型-transformer还可以用于推荐系统和推荐算法中。在MATLAB中,我们可以使用transformer模型来构建个性化的推荐系统,根据用户的历史行为和兴趣来推荐相关的内容。通过使用预训练模型-transformer,可以提高推荐系统的精度和用户体验。 总的来说,MATLAB提供了丰富的工具和函数来实现预训练模型-transformer应用。无论是在自然语言处理、图像处理还是推荐系统中,预训练模型-transformer都能够帮助我们实现更好的结果。通过深入学习和应用预训练模型-transformer,可以在实际项目中获得更好的效果,并提高工作效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

见到我请过去学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值