• 详解Transformer中的Encoder


    一.Transformer架构

    在这里插入图片描述
    左半边是Encoder,右半边是Decoder。

    二.Vision Transformer

    Vision Transformer取了Transformer的左半边。包含

    1. Input Embedding
    2. Positional Encoding
    3. 多头注意力机制 + Add & Norm
    4. (前馈网络)Feed Forward + Add & Norm
      在这里插入图片描述

    2.1 Input Embedding

    在这里插入图片描述

    2.2 Positional Encoding

    1. 为什么需要位置编码?

    Transformer替代的是RNN(循环神经网络),RNN本身是一种训练网络,天然包含句子之间的位置信息,Tranformer用attention替代了RNN,所以就缺乏位置信息。模型没有办法知道每个单词在句子中的相对位置和绝对位置。

    1. 具体实现方法是:

    每个奇数时间步,使用余弦函数创建一个向量。

    在这里插入图片描述

    1. 偶数时间步,使用正弦函数创建向量
      在这里插入图片描述
      然后将这些向量添加到相应的嵌入向量中。

    这样就成功了为网络提供了每个向量的信息。选用正弦和余弦函数,是因为他们有线性特性。

    2.3 多头注意力机制

    在这里插入图片描述

    它的内部如下:
    在这里插入图片描述
    多头注意力机制是多个自注意力。
    多头注意力模块运用了自注意力,自注意力机制可将输入的每个单词和其它单词关联起来。
    比如:模型将You与How 和 are联系起来。
    在这里插入图片描述

    1. 自注意力机制中的Q,K,V

    在这里插入图片描述

    在这里插入图片描述
    为了实现自注意力,将输入分别输入到三个不同的全连接层,来创建查询向量、键向量、值向量

    查询向量、键向量、值向量来自检索系统,
    Q:例如当在youtube上输入一个查询词Q,搜索某个视频。
    K:搜索引擎将你的查询值映射到一组键K中(如视频标题,视频描述)。
    V:与数据库的候选视频相关联。

    2. 自注意力机制中的第一个MatMul

    查询和键经过点积矩阵乘法产生一个分数矩阵。分数矩阵确定了一个单词应该如何关注其它单词。
    在这里插入图片描述

    (MatMul)点乘获得分数矩阵:

    在这里插入图片描述
    分数矩阵确定一个单词应该如何关注其它单词。
    在这里插入图片描述
    每个单词都会有一个与时间步长中的其他单词相对应的分数。分数越高,关注度越高。这就是查询如何映射到键的。

    3.缩放

    在这里插入图片描述

    在这里插入图片描述
    将查询和键的维度开平方将得分缩放,因为这样可以让梯度更稳定,因为乘法可能会产生爆炸效果。

    4. softmax

    在这里插入图片描述

    对缩放后的得分进行softmax计算,得到注意力权重,进行softmax计算后,较高的得分会得到增强,较低的得分得到抑制。
    在这里插入图片描述
    得到的是注意力权重。

    5. 第二个MatMul操作

    在这里插入图片描述

    在这里插入图片描述

    将注意力权重 和 值向量相乘。得到输出向量。

    6. concat层

    为了使这个计算成为多头注意力计算,在应用自注意力之前将查询、键、值分成N个向量。分割后的向量分别经过相同的自注意力,每个自注意力过程称为一个头,每个头产生一个输出向量。这些向量经过最后的线性层之前被拼接成一个向量。
    在这里插入图片描述

    理论上,每个头都会学到不同的东西。从而为编码器模型提供更多的表达能力。

    7.多头注意力机制总结

    多头注意力是一个模块,用于计算输入的注意力权重,并生成一个带有编码信息的输出向量,指示序列中每个词应该如何关注其它所有词。

    8.多头注意力机制后的Add & Norm

    在这里插入图片描述
    接下来,使用残差连接,将多头注意力机制输出向量,加到原始输入上。

    2.4 前馈网络 + Add & Norm

    在这里插入图片描述

    在这里插入图片描述

    残差连接的输出经过层归一化(LayerNorm)。归一化后的残差输出被送入点对点前馈网络进行进一步处理。点对点前馈网络是几个线性层,中间有ReLu激活函数。

    残差连接有助于网络训练,因为它允许梯度直接流过网络。

    使用层归一化来稳定网络,显著减少所需训练时间。

    最后:

    可将编码器堆叠n次,以进一步编码信息。其中每一层都有机会学习不同的注意力表示。从而有可能提高transformer网络的预测能力。

    在这里插入图片描述

    参考

    超强动画,一步一步深入浅出解释Transformer原理!
    https://www.bilibili.com/video/BV1ih4y1J7rx/?spm_id_from=333.999.top_right_bar_window_history.content.click&vd_source=ebc47f36e62b223817b8e0edff181613

  • 相关阅读:
    redis分布式锁
    人工智能基础_机器学习045_逻辑回归的梯度下降公式推导_更新公式---人工智能工作笔记0085
    深度剖析数据在内存中的存储
    【Redis】为什么要学 Redis
    基于BP神经网络的多因素房屋价格预测matlab仿真
    港联证券:短债基金收益?
    RK3568平台开发系列讲解(驱动篇)RK3568 PWM详解
    java中的接口
    日志记录升级(中间件全局日志)
    汽车防抱死制动系统(ABS)技术
  • 原文地址:https://blog.csdn.net/qq_42864343/article/details/132716372