十二、Transformer(Attention Mechanism)

参考Transformer详解 和 Transforner模型详解

1 Transformer 整体结构

Transformer 由 Encoder 和 Decoder 两个部分组成,Encoder 和 Decoder 都包含 6 个 block。

2 Transformer 局部结构 

2.1 输入层

Transformer 中的输入层是由单词的 Word Embedding 和 Positional Embedding 相加得到。

以"I Really Love You" 翻译成中文 "我真地爱你" 为例:参考Transformer代码讲解

  • Word Embedding 表示将输入的单词 "I", "Really", "Love", "You" ,每一个都用 One-Hot 独热编码、Word2Vec 或 GloVe 等形式的词向量表示,一个句子就可以用一个矩阵来表示。
  • Positional Embedding  表示保存输入的单词"I", "Really",  "Love", "You" 出现在序列中的相对或绝对位置(一句话中词语出现位置不同,意思可能发生翻天覆地的变化)。
  • 编码层 Encoder 的输入则需要将每个单词的 Word Embedding 与位置编码 Positional Encoding 相加得到
  • Output Embedding 与输入 Input Embedding 的处理方法步骤一样,输入 Input Embedding 接收的是 source 数据,输出 Output Embedding 接收的是 target 数据(例如:输入 Input Embedding 接收 "I Love You" 分词后的词向量 Word Embedding;输出 Output Embedding 接收 “我爱你” 分词后的词向量 Word Embedding)
  • 注意:只是在有 target 数据时也就是在进行有监督训练时才会接收 Outputs  Embedding,进行预测时则不会接收。

Q1:Positional Encoding 如何获取?

通过数据训练学习得到 Positional Encoding ,类似于训练学习词向量。

Q2:有监督训练和无监督训练是什么,二者有什么区别?参考有监督学习与无监督学习的区别

  • 有监督学习 Supervised Learning 方法必须要有训练集与测试样本。在训练集中找规律,而对测试样本使用这种规律。(即通过已有的训练样本(即已知数据及其对应的输出)去训练得到一个最优模型(这个模型属于某个函数的集合,最优表示某个评价准则下是最佳的),再利用这个模型将所有的输入映射为相应的输出,对输出进行简单的判断从而实现分类的目的,也就具有了对未知数据分类的能力。)而非监督学习 Unsupervised Learning 没有训练集,只有一组数据,在该组数据集内寻找规律。(即由输入数据(由输入的特征值组成,没有被标记,也没有确定的结果)学到或建立一个模型,并依此模式推测新的结果)。
  • 有监督学习的方法就是识别事物,识别的结果表现在给待识别数据加上了标签。因此训练样本集必须由带标签的样本组成。而非监督学习方法在寻找数据集中的规律性,只有要分析的数据集的本身,预先没有什么标签。如果发现数据集呈现某种聚集性,则可按自然的聚集性分类,但不予以某种预先分类标签对上号为目的。

2.2 编码层

输入层最终得到的字向量 a(i) 作为多头自注意力机制(Self Attention Mechanism)的输入。

编码层由 6 层编码器首位相连堆叠而成,解码器也是六层解码器堆成的(每层的编码器和解码器自身结构是完全相同的,但是并不共享参数)。第一层编码器的输入为句子单词的表示向量矩阵,后续编码器的输入是前一个编码层的输出,最后一个编码器输出的矩阵就是编码信息矩阵 C,这一矩阵后续会用到解码层中。

一个编码器和解码器的内部结构由 Multi-Head Attention、Add & Norm 和全连接神经网络 Feed Forward Network 构成。

2.2.1 多头自注意力(Multi-head Self-Attention)

多头自注意力理论过程:参考注意力机制

多头注意力计算过程:

参考Transformer模型详解 3.2 Q, K, V的计算和 3.3 Self-Attention输出和 3.4 Multi-Head Attention

2.2.2 残差连接和层归一化函数(Add & Norm)

Q1:Add 是什么?

Add 指的是将不同层的输出相加(残差连接(Residual Connection)),指的是在 Z 的基础上加了一个残差块 X,加入残差块 X 的目的是为了防止在深度神经网络训练中发生退化问题(退化:深度神经网络通过增加网络的层数,Loss 逐渐减小,然后趋于稳定达到饱和,接着再继续增加网络层数,Loss 反而增大)。

Q2:残差块 X 是什么,又是如何解决退化问题的?参考残差神经网络的介绍

为了解决深层网络中的退化问题(随着网络层数的增加,在训练集上的准确率趋于饱和甚至下降了。这个不能解释为 overfitting(过拟合)问题,因为 overfitting 应该表现为在训练集上表现更好才对),可以人为地让神经网络某些层跳过下一层神经元的连接,隔层相连,弱化每层之间的强联系。这种神经网络被称为残差网络(ResNet)。

“残差块”(residual block)是残差网络的的核心思想,发现了“退化(Degradation)现象”,并针对退化现象发明了 “快捷连接(Shortcut Connection)”,使网络能够保证训练出来的参数能够很精确的完成 f(x) = x 恒等映射(identity mapping),极大的消除了深度过大的神经网络训练困难问题。

Q3:Norm 是什么?

Norm 主要有 BatchNorm(BN) 和 LayerNorm (LN) 两种归一化函数:参考层归一化

  • BatchNorm 是对一个 batch 下的不同样本之间的同一位置的特征(神经元)之间看成一组进行归一化),对小 batchsize 效果不好。
  • LayerNorm 是对一个 batch 下的同一个样本的不同特征(不同神经元)之间进行归一化(针对所有样本)。

在 Transfomer 架构中,Norm 指的是层归一化(Layer Normalization, LN),通过对层的激活值的归一化,可以加速模型的训练过程,使其更快的收敛,提高训练的稳定性。

Q4:Norm 为什么用 LayerNorm (LN) 不用 BatchNorm(BN) ?

针对 BatchNorm(BN) 和 LayerNorm (LN) 两种归一化函数,这里的三个维度表示的信息不同:

BatchNorm(BN)LayerNorm (LN)
Nbatch_sizebatch_size
Cchannelseq_length
H, Wfeature mapdim

  •  一般来说,如果你的特征依赖于不同样本间的统计参数,那 BN 更有效。因为它抹杀了不同特征之间的大小关系,但是保留了不同样本间的大小关系。
  • LN 适合抹杀了不同样本间的大小关系,但是保留了一个样本内不同特征之间的大小关系。(对于NLP或者序列任务来说,一条样本的不同特征,其实就是时序上的变化,这正是需要学习的东西自然不能做归一化抹杀。)参考Transformer为什么要用LayerNorm
  • BN 是对于相同的维度进行归一化,但是 NLP 领域中输入的都是词向量,单独去分析它的每一维是没有意义的,在每一维上进行归一化更加适合,因此这里选用的是LN。

2.2.3 全连接前馈神经网络(Feed Forward Network)

Feed Forward Network 是将每一个神经元都与其他神经元相连接(每两个神经元之间的连接都有不同的连接权重值(connection strength),并且它们在训练过程中都是自动学习调整自身的参数(learned parameters)),每个神经元都掌握着 input 信息(补充一些对 input 有用的东西),并进行处理后将其传递下去。参考轻松理解 Transformers

全连接前馈神经网络由两个线性层(linear layers)和一个激活函数(Activation Function)组成。

激活函数(Activation Function)能够帮助我们进行非线性变换(non-linear transformation),处理非线性关系(nonlinear relationship)。(例如常见的 Softmax 激活函数可以将整数转换为0到1之间的浮点数,转换后的浮点数仍然保持了原始整数之间的相对大小关系;ReLU(修正线性单元)能够将任何负数转化为0,而非负数保持不变)

正则化(Regularization)是让算法仅学习不记忆的一系列技术的总称。在正则化技术中最常用的技术就是 dropout。

Dropout 是将“连接权重(connection strength)”设置为0,这意味着该连接不会产生任何影响(在每一层中使用 dropout 技术时,会随机选择一定数量的神经元(由开发者配置),并将它们与其他神经元的连接权重设为0)

在 Transformer 的架构图中,全连接前馈神经网络工作过程: 

  • 对输入序列的每个位置的特征向量进行逐位置的线性计算,将其映射到一个更高维的空间;
  • 对线性运算的输出应用 ReLU 函数;
  • 对上一步骤 ReLU 运算的输出进行再一次线性运算,将其映射回原始的特征维度。

2.3 解码层

2.3.1  第一个多头自注意力

第一个 Multi-Head Attention 采用了 Masked 操作,因为在翻译的过程中是顺序翻译的,即翻译完第 i 个单词,才可以翻译第 i+1 个单词。通过 Masked 操作可以防止第 i 个单词知道 i+1 个单词之后的信息。

Decoder 可以在训练的过程中使用 Teacher Forcing 训练,加快模型训练时间。

Teacher Forcing:是指在训练过程中每次不使用上一个 state 的输出 h(t) 作为当前 state 的输入,而是直接使用训练数据上一个标准答案 ground truth 的输出 y(t) 作为当前 state 的输入。Teacher Forcing训练机制及其缺点和解决方法

2.3.2  第二个多头注意力

第二个 Multi-Head Attention 与第一个 Multi-Head Attention 主要的区别在于其中没有采用掩码 Masked 操作而且Self-Attention 的 K, V 矩阵不是使用上一个解码层的输出计算的,而是使用编码层的编码信息矩阵 C 计算的,Q 使用上一层解码器的输出计算。

2.4 输出层

输出层首先经过一次线性变换(它可以把解码器产生的向量投射到一个比它大得多的向量里),然后利用 Softmax 得到输出的概率分布(Softmax 层会把向量变成概率),接着通过词典,输出概率最大的对应的单词作为我们的预测下一个单词的输出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/455742.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

国产化三防笔记本丨亿道国产加固笔记本FT-2000/4处理器

国产化加固笔记本是指采用国产操作系统和处理器,通过技术手段对其进行硬件加固、软件加密、数据安全等多方面加强处理的产品。这种笔记本电脑通常被用于政府项目、金融行业等对安全性要求极高的领域。 在国产化加固笔记本中,硬件加固是重要的一环。为了保…

【生态适配】亚信安慧AntDB数据库与龙芯3C5000L完成兼容互认

日前,亚信安慧AntDB数据库系统V6.2在龙芯3C5000L平台上完成兼容性测试,功能与稳定性良好,被授予龙架构兼容互认证书。 图1:产品兼容性证明 随着“互联网”的纵深发展,数字技术创新成果与经济社会各领域深度融合&#…

【IOS】应用上架支付(ApplePay)测试流程

注册开发者账号 登录https://developer.apple.com/ 注册购买开发者账号。 mac本生成证书 打开钥匙串程序 选择从证书机构请求证书, 填入开发者账号邮箱,选择存储到本地磁盘 名称自己定义 开发就叫 项目名_dev 等 上传证书 登录开发者网站 点击账户…

Vue.js+SpringBoot开发考研专业课程管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 考研高校模块2.3 高校教师管理模块2.4 考研专业模块2.5 考研政策模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 考研高校表3.2.2 高校教师表3.2.3 考研专业表3.2.4 考研政策表 四、系统展示五、核…

创建SpringCloudGateWay

创建SpringCloudGateWay 本案例基于尚硅谷《谷粒商城》项目&#xff0c;视频27 创建测试API网关 1、创建module 2、引入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:x…

【PCL】(二十八)点云超体素分割

&#xff08;二十九&#xff09;点云超体素分割 论文&#xff1a;Voxel Cloud Connectivity Segmentation - Supervoxels for Point Clouds supervoxel_clustering.cpp #include <pcl/console/parse.h> #include <pcl/point_cloud.h> #include <pcl/point_ty…

后端使用Long类型数据,前后端传值,主键精度丢失

场景描述 在使用Long类型数据时&#xff0c;根据id获取对象&#xff0c;然后传递到前端&#xff0c;后端获取数据是正常的&#xff0c;但是传递到前端会发生精度丢失。 1). 数据表存在一条数据&#xff0c;以雪花算法作为主键 2). 编写Controller&#xff0c;接受get请求&…

android HAL层崩溃排查记录

要最近在调试系统HDMI CEC功能时&#xff0c;遇到一个奇怪的崩溃问题&#xff0c;这边记录下。 初步分析 先上日志&#xff1a; --------- beginning of crash 03-06 10:48:25.503 1133 1133 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** **…

探索数据可视化:Matplotlib 高级绘图功能(四)

3D图形 线形图&散点图 import numpy as np import matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d.axes3d import Axes3Dx np.linspace(0,60,300) y np.sin(x) z np.cos(x)fig plt.figure(figsize(9,6)) a3 Axes3D(fig) # 二维变成3D a3.plot(x,y,z)plt.figure…

对比学习(Contrastive Learning)和孪生网络(Siamese Network)的区别!

对比学习&#xff08;Contrastive Learning&#xff09;和孪生网络&#xff08;Siamese Network&#xff09;是两种常见的无监督学习方法&#xff0c;它们有着不同的原理和应用场景。 原理与目标&#xff1a; 对比学习旨在通过最小化相似样本对之间的距离&#xff0c;最大化不相…

算法思想总结:二分查找算法

创作不易&#xff0c;感谢三连&#xff01;&#xff01; 一、二分查找算法思路总结 大家先看总结&#xff0c;然后再根据后面的题型去慢慢领悟 二、二分查找&#xff08;easy&#xff09; . - 力扣&#xff08;LeetCode&#xff09;二分查找 思路&#xff1a;&#xff08;模…

基于 K8s 容器集群的容灾架构与方案

作者&#xff1a;庄宇 在设计系统架构时&#xff0c;我们必须假设任何组件和任何基础设施可能会在任何时间失效&#xff0c;例如&#xff1a;自然灾害&#xff0c;电力中断&#xff0c;网络中断&#xff0c;错误的系统变更等。为了应对挑战&#xff0c;我们必须设计合适的容灾…

COOH-PEG-Galactose 羧基-聚乙二醇-半乳糖 Galactose 靶向肝肿瘤细胞

在生物体内&#xff0c;正常细胞通过有氧呼吸将糖类等物质分解代谢产生能量&#xff0c;从而供给细胞的增殖和生 长。而癌细胞似乎更为“蛮横”&#xff0c;它们主要依靠糖酵解作用为生&#xff0c;因此癌细胞代谢葡萄糖的速度比正 常细胞要快得多。值得注意的是&#xff0c;…

Verilog——综合和防真

2.1综合 Verilog 是硬件描述语言&#xff0c;顾名思义&#xff0c;就是用代码的形式描述硬件的功能&#xff0c;最终在硬件电路上实 现该功能。在Verilog描述出硬件功能后需要使用综合器对Verilog代码进行解释并将代码转化成实际 的电路来表示&#xff0c;最终产生实际的电路&a…

PEG(2K)-g-[3.5]-PLL(20k)-g[3.5]-PEG(3.4k)-Biotin 生物素修饰聚乙二醇聚赖氨酸聚乙二醇

PEG-g-PLL-g-PEG-BIOTIN是一种生物素修饰的三嵌段共聚物。 PLL&#xff08;Poly-L-lysine&#xff09;是一种阳离子聚合物&#xff0c;由L-赖氨酸单体组成的聚合物。它具有多种应用&#xff0c;包括细胞培养、基因转染、组织工程和生物传感器等领域。 生物素可以与蛋白质亲和…

案例分析篇15:软件开发方法考点(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-…

[JAVAEE]—进程和多线程的认识

文章目录 什么是线程什么是进程进程的组成什么是pcb 进程概括线程线程与进程的关系线程的特点 创建线程创建线程方法创建线程的第二种方法对比 其他的方式匿名内部类创建线程匿名内部类创建Runable的子类lambda表达式创建一个线程 多线程的优势 什么是线程 什么是进程 首先想…

Java基础_内部类

文章目录 1.基本介绍1.定义&#xff1a;2.基本语法&#xff1a;3.内部类的分类 2.局部内部类1.快速入门2.局部内部类的使用 3.匿名内部类1.匿名内部类实现接口2.匿名内部类继承抽象类3.匿名内部类细节4.匿名内部类最佳实践1.匿名内部类作为实参传入函数2.匿名内部类课堂练习 4.…

一文浅谈射频识别RFID

RFID&#xff0c;全称为Radio Frequency Identification&#xff0c;即射频识别&#xff0c;是一种通过无线电信号识别特定目标并读取相关数据的技术。这种技术利用射频信号及其空间耦合、传输特性&#xff0c;实现对静止或移动物品的自动识别。 RFID由以下2个部分组成&#xf…

MongoDB从0到1:高效数据使用方法

MongoDB&#xff0c;作为一种流行的NoSQL数据库。从基础的文档存储到复杂的聚合查询&#xff0c;从索引优化到数据安全都有其独特之处。文末附MongoDB常用命令大全。 目录 1. 引言 MongoDB简介 MongoDB的优势和应用场景 2. 基础篇 安装和配置MongoDB MongoDB基本概念 使…