Transfomer编码器中自注意力机制、前馈网络层、叠加和归一组件等讲解(图文解释)

简介: Transfomer编码器中自注意力机制、前馈网络层、叠加和归一组件等讲解(图文解释)

Transformer中的编码器不止一个,而是由一组N个编码器串联而成,一个编码的输出作为下一个编码器的输入,如下图所示,每一个编码器都从下方接收数据,再输出给上方,以此类推,原句中的特征会由最后一个编码器输出,编码器模块的主要功能就是提取原句中的特征

我们又可以将编码器中的结构进行细分

由上图可知,每一个编码器的构造都是相同的,并且包含两个部分

1:多头注意力层

2:前馈网络层

下面我们对其进行讲解

一、自注意力机制

让我们通过一个例子来快速理解自注意力机制

a dog ate the food because it was hungry

想必大家都能看懂这句英文的意思,句中的it可以指代dog也可以指代food,我们自然是很好理解,但是对于计算机而言该如何决定呢?自注意力机制有助于解决这个问题

以上句为例,我们的模型首先需要计算出单词A的特征值,其次计算dog的特征值,以此类推,当计算每个词的特征值时,模型都需要遍历每个词与句子中其他词的关系,模型可以通过词与词之间的关系来更好的理解当前词的意思

比如当计算it的特征值时,模型会将it与句子中的其他词一一关联,以便更好的理解它的意思

如下图所示,it的特征值由它本身与句子中其他词的关系计算所得,通过关系连线,模型可以明确知道原句中it所指代的是dog而不是food,这是因为it与dog的关系更紧密,关系连线相较于其他词也更粗

自注意力机制首先将每个词转化为其对应的词嵌入向量,这样原句就可以由一个矩阵来表示

矩阵X的维度为【句子长度×词嵌入向量维度】通过矩阵X,我们可以再创建三个新的矩阵,分别是

查询矩阵Q

健矩阵K

值矩阵V

为了创建他我们需要先创建另外三个权重矩阵,用X分别乘它们得到上述三个矩阵

值得注意的是,权重矩阵的初始值完全是随机的,但最优值则需要通过训练获得,我们取得的权值越优,则上述三个矩阵也越精确

因为每个向量的维度均为64,所以对应矩阵的维度为【句子长度×64】

自注意力机制会使该词与给定句子中的所有词联系起来,包括四个步骤,下面一一介绍

1:计算查询矩阵与键矩阵的点积,其目的是为了了解单词1与句子中的所有单词的相似度

2:第二步将查询矩阵与键矩阵除以键向量维度的平方根,这样做的目的是为了获得稳定的梯度

3:目前所得的相似度分数尚未被归一化,我们需要使用softmax函数对其进行归一化处理,使数值分布到(0,1)之间

4:至此我们计算了查询矩阵与键矩阵的点积,得到了分数,然后softmax将分数归一化,自注意力机制的最后一步使计算注意力矩阵Z

注意力矩阵就是值向量与分数加权之后求和所得到的结果

下面是自注意力机制的流程图

自注意力机制也被称为缩放点积注意力机制,这是因为其计算过程是先求查询矩阵与键矩阵的点积,再除以键向量维度的平方根对结果进行缩放

二、多头注意力层

多头注意力是指我们可以使用多个注意力头,而不是只用一个,也就是说我们可以利用计算注意力矩阵Z的方法,来求得多个注意力矩阵

如果某个词实际上是由其他词的值向量控制,而这个词的含义又是模糊的,那么这种控制关系是有用的,否则这种控制关系会造成误解,为了确保结果准确,我们不能依赖单一的注意力矩阵,而应该计算多个注意力矩阵,并将其结果串联起来,使用多头注意力的逻辑如下:

使用多个注意力矩阵,而非单一的注意力矩阵,可以提高注意力矩阵的准确性

三、通过位置编码来学习位置

Transformer网络并不遵循递归循环的模式,因此我们不是逐字的输入句子,而是将句子中的所有词并行的输入到神经网络中,并行输入有助于缩短训练时间,同时有利于学习长期依赖,但是这样没有保留词序,因此这里引入了一种叫做位置编码的技术,位置编码是指词在句子中的位置的编码

位置编码矩阵P的维度与输入矩阵X的维度相同,在将输入矩阵传给Transformer之前,我们将其包含位置编码,只需要将P+X即可,然后再作为输入传给神经网络,这样依赖,输入矩阵不仅有词的嵌入值,还有词在句子中的位置信息

Transformer论文的作者使用正弦函数来计算位置编码

四、前馈网络层

前馈网络层由两个有ReLU激活函数的全连接层组成,前馈网络的参数在句子的不同位置上是相同的,但在不同的编码器模块上是不同的

五、叠加和归一组件

在编码器中还有一个重要的组成部分,即叠加和归一组件,它同时连接一个子层的输入和输出

叠加和归一组件实际上包含一个残差连接与层的归一化,层的归一化可以放置每层的值剧烈变化,从而提高了模型的训练速度

总结

编码器总结如下

1:将输入转换为输入矩阵,并将位置编码加入其中,再将结果作为输入传入底层的编码器

2:编码器1接收输入并将其送入多头注意力层,该子层运算后输入注意力矩阵

3:将注意力矩阵输入到下一个子层,即前馈网络层,前馈网络层将注意力矩阵作为输入,并计算出特征值作为输出

4:接下来,把从编码器1中得到输出作为输入,传入下一个编码器

5:编码器2进行同样的处理,再将给定输入的句子的特征值作为输出

这样可以将N个编码器一个接一个的叠加起来,从最后一个编码器得到输出将是给定输入句子的特征值,让我们把从最后一个编码器得到的特征值表示为R

我们把R作为输入传个解码器,解码器将基于这个输入生成目标句子

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
1月前
|
安全 网络安全 数据安全/隐私保护
访问控制列表(ACL)是网络安全中的一种重要机制,用于定义和管理对网络资源的访问权限
访问控制列表(ACL)是网络安全中的一种重要机制,用于定义和管理对网络资源的访问权限。它通过设置一系列规则,控制谁可以访问特定资源、在什么条件下访问以及可以执行哪些操作。ACL 可以应用于路由器、防火墙等设备,分为标准、扩展、基于时间和基于用户等多种类型,广泛用于企业网络和互联网中,以增强安全性和精细管理。
151 7
|
2月前
|
机器学习/深度学习 数据可视化 测试技术
YOLO11实战:新颖的多尺度卷积注意力(MSCA)加在网络不同位置的涨点情况 | 创新点如何在自己数据集上高效涨点,解决不涨点掉点等问题
本文探讨了创新点在自定义数据集上表现不稳定的问题,分析了不同数据集和网络位置对创新效果的影响。通过在YOLO11的不同位置引入MSCAAttention模块,展示了三种不同的改进方案及其效果。实验结果显示,改进方案在mAP50指标上分别提升了至0.788、0.792和0.775。建议多尝试不同配置,找到最适合特定数据集的解决方案。
680 0
|
3月前
|
XML 网络协议 物联网
基于surging的木舟IOT平台如何添加网络组件
【8月更文挑战第30天】在基于 Surging 的木舟 IOT 平台中添加网络组件需经历八个步骤:首先理解 Surging 及平台架构;其次明确组件需求,选择合适技术库;接着创建项目并配置;然后设计实现网络功能;再将组件集成至平台;接着进行详尽测试;最后根据反馈持续优化与维护。具体实施时应参照最新文档调整。
69 10
|
4月前
|
缓存 应用服务中间件 nginx
Web服务器的缓存机制与内容分发网络(CDN)
【8月更文第28天】随着互联网应用的发展,用户对网站响应速度的要求越来越高。为了提升用户体验,Web服务器通常会采用多种技术手段来优化页面加载速度,其中最重要的两种技术就是缓存机制和内容分发网络(CDN)。本文将深入探讨这两种技术的工作原理及其实现方法,并通过具体的代码示例加以说明。
429 1
|
18天前
|
机器学习/深度学习 Serverless 索引
分类网络中one-hot编码的作用
在分类任务中,使用神经网络时,通常需要将类别标签转换为一种合适的输入格式。这时候,one-hot编码(one-hot encoding)是一种常见且有效的方法。one-hot编码将类别标签表示为向量形式,其中只有一个元素为1,其他元素为0。
22 2
|
1月前
|
机器学习/深度学习 计算机视觉 Python
【YOLOv11改进 - 注意力机制】SimAM:轻量级注意力机制,解锁卷积神经网络新潜力
【YOLOv11改进 - 注意力机制】SimAM:轻量级注意力机制,解锁卷积神经网络新潜力本文提出了一种简单且高效的卷积神经网络(ConvNets)注意力模块——SimAM。与现有模块不同,SimAM通过优化能量函数推断特征图的3D注意力权重,无需添加额外参数。SimAM基于空间抑制理论设计,通过简单的解决方案实现高效计算,提升卷积神经网络的表征能力。代码已在Pytorch-SimAM开源。
【YOLOv11改进 - 注意力机制】SimAM:轻量级注意力机制,解锁卷积神经网络新潜力
|
2月前
|
网络协议 Java 应用服务中间件
深入浅出Tomcat网络通信的高并发处理机制
【10月更文挑战第3天】本文详细解析了Tomcat在处理高并发网络请求时的机制,重点关注了其三种不同的IO模型:NioEndPoint、Nio2EndPoint 和 AprEndPoint。NioEndPoint 采用多路复用模型,通过 Acceptor 接收连接、Poller 监听事件及 Executor 处理请求;Nio2EndPoint 则使用 AIO 异步模型,通过回调函数处理连接和数据就绪事件;AprEndPoint 通过 JNI 调用本地库实现高性能,但已在 Tomcat 10 中弃用
深入浅出Tomcat网络通信的高并发处理机制
|
1月前
|
缓存 JavaScript
Vue加载网络组件(远程组件)
【10月更文挑战第23天】在 Vue 中实现加载网络组件(远程组件)可以通过多种方式来完成。
|
2月前
|
NoSQL 网络协议 应用服务中间件
redis,memcached,nginx网络组件
redis,memcached,nginx网络组件
21 0
|
4月前
|
C++
C++ Qt开发:QUdpSocket网络通信组件
QUdpSocket是Qt网络编程中一个非常有用的组件,它提供了在UDP协议下进行数据发送和接收的能力。通过简单的方法和信号,可以轻松实现基于UDP的网络通信。不过,需要注意的是,UDP协议本身不保证数据的可靠传输,因此在使用QUdpSocket时,可能需要在应用层实现一些机制来保证数据的完整性和顺序,或者选择在适用的场景下使用UDP协议。
197 2