十二、Transformer(Attention Mechanism)

news2024/11/16 20:37:39

参考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 层会把向量变成概率),接着通过词典,输出概率最大的对应的单词作为我们的预测下一个单词的输出。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

传统电力运维企业的数字化转型案例

一. 传统电力运维企业面临的主要问题 上海某电力集团企业下属有成套设备公司、电力工程公司,依托于自身的设备制造和工程服务能力,以及多年积累的终端客户资源,几年前该公司成立了电力运维服务公司进入用户侧电力托管运维服务行业。 该公司…

4-激活函数:给机器注入灵魂

声明 本文章基于哔哩哔哩付费课程《小白也能听懂的人工智能原理》。仅供学习记录、分享,严禁他用!!如有侵权,请联系删除 目录 一、知识引入 (一)背景 (二)激活函数 &#xff08…

vulhub中DNS域传送漏洞复现

DNS协议支持使用axfr类型的记录进行区域传送,用来解决主从同步的问题。如果管理员在配置DNS服务器的时候没有限制允许获取记录的来源,将会导致DNS域传送漏洞。 环境搭建 Vulhub使用Bind9来搭建dns服务器,但不代表只有Bind9支持AXFR记录。运行…

知识管理系统(KMS)和AI的融合十大场景

我向AI问了一个问题,KMS和AI融合有哪些场景,不得不说AI越来越强大了,他给我列出了十个场景,老铁们知道有哪些可以落地的吗? 将知识管理系统(KMS)与人工智能(AI)融合有着广…

ELK集群实战

1、 Elasticsearch集群部署 服务器 安装软件主机名IP地址系统版本配置ElasticsearchElk10.12.153.180centos7.5.18042核4GElasticsearchEs110.12.153.178centos7.5.18042核4GElasticsearchEs210.12.153.179centos7.5.18042核4G 2、创建运行的ES普通用户 3、上传es的数据包 …

代码随想录阅读笔记-哈希表【三数之和】

题目 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a b c 0 ?请你找出所有满足条件且不重复的三元组。 注意: 答案中不可以包含重复的三元组。 示例: 给定数…

spring注解驱动系列--AOP探究一

一、AOP--动态代理 指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式 二、使用栗子 一、导入aop模块 <dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>4…

数据在内存的存储

整数在内存中的存储 我们来回顾一下&#xff0c;整数在计算机是以补码的形式进行存储的&#xff0c;整数分为正整数和负整数&#xff0c;正整数的原码、反码和补码是一样的&#xff0c;负整数的原码、反码和补码略有不同&#xff08;反码是原码除符号位&#xff0c;其他位按位取…

注册-前端部分

前提:后端jar环境、Vue3环境、Redis环境 搭建页面(html标签、css样式) → 绑定数据与事件(表单校验) → 调用后台接口(接口文档、src/api/xx.js封装、页面函数中调用) Login.vue文件: <script setup> import { User, Lock } from "@element-plus/icons-…

【Axure高保真原型】多色知识图谱

今天和大家分享中继器版多色知识图谱的原型模板&#xff0c;鼠标拖动节点&#xff0c;对应节点会跟随鼠标移动&#xff0c;和相关节点对应的连接线也会自动调整&#xff1b;节点圆是多色的&#xff0c;案例中包括红、黄、浅蓝、深蓝、绿、青、紫、灰色&#xff0c;后续可以根据…

Java代码基础算法练习-数制转换-2024.03.18

任务描述&#xff1a; 输入一个 10 进制正整数n(取值范围:0<n<1000)&#xff0c;然后输出它所对应的八进制(要求用模除取余&#xff0c;不得直接转换输出) 任务要求&#xff1a; 十进制数转八进制数的思想&#xff1a; 十进制数转八进制数的思想主要基于“除基取余”法&…

kingbase 服务器配置(参数修改)

引言&#xff1a; 人大金仓作为国产数据库的佼佼者(单机)&#xff0c;也是每位数据库从业者必须数据库之一 配置文件 kingbase 参数配置 主要由 kingbase.conf 和 kingbase.auto.conf 设置 kingbase.conf 该参数文件为主配置文件&#xff0c;一般情况下&#xff0c;需要 重启…

HarmonyOS(鸿蒙)快速入门

一:下载开发工具 鸿蒙的开发工具叫DevEco 下载点击 其他部分都一直next 就行,这个页面出现的install 建议都点击install 然后单独选择安装目录 可能存在的问题 就是之前安装nodejs&#xff08;比如自己开发web或者RN等情况&#xff09;版本低 等情况 所以建议你单独安装一次 …

Linux chapter1 常用命令 cp

note 1 : netstat、curl、ip、nmap、dig 这些都是常用的网络诊断工具&#xff0c;它们的全称如下&#xff1a; netstat&#xff1a;Network Statistics&#xff0c;网络统计&#xff0c;用于显示网络连接&#xff0c;路由表&#xff0c;网络接口统计等网络信息。curl&#xf…

Springboot 博客_001 环境准备(VS code版本)

本人喜欢用vs coder&#xff08;免费又好用&#xff09;, 所以以下拿vs coder配置开发 安装JDK17 下载JDK17 https://www.oracle.com/java/technologies/downloads/#jdk17-windows 安装JDK17 标题双击运行&#xff0c;一路默认 删除原本的环境变量 配置环境变量 查看是否安…

PTA L2-018 多项式A除以B

这仍然是一道关于A/B的题&#xff0c;只不过A和B都换成了多项式。你需要计算两个多项式相除的商Q和余R&#xff0c;其中R的阶数必须小于B的阶数。 输入格式&#xff1a; 输入分两行&#xff0c;每行给出一个非零多项式&#xff0c;先给出A&#xff0c;再给出B。每行的格式如下…

了解抖音小程序与抖音小店的区别

首先&#xff0c;从功能和定位上来看&#xff0c;抖音小店是抖音官方推出的一种功能&#xff0c;专为商家提供在抖音平台上销售商品的工具。而抖音小程序则是一种无需下载即可使用的应用&#xff0c;类似于微信小程序&#xff0c;但主要在抖音、头条、极速版头条等平台上运行。…

逻辑回归LogisticRegression quickstart

本文将用可视化思路理解逻辑回归 数学背景 比如我们认定一个的值只可能在[0, 1], 那当小于0.5&#xff0c;我们认为他就是a&#xff0c;当大于0.5&#xff0c;我们认为他就是b 数据集 使用鸢尾花数据集 4个特征值3个类别 二分类&#xff0c;单维度 只使用一个特征X ir…

Linux docker3--数据卷-nginx配置示例

一、因为docker部署服务都是以最小的代价部署&#xff0c;所以通常在容器内部很多依赖和命令无法执行。进入容器修改配置的操作也比较麻烦。本例介绍的数据卷作用就是将容器内的配置和宿主机文件打通&#xff0c;之后修改宿主机的配置文件就相当于修改了docker进程的配置文件&a…

“灯塔”——一个让人爱不释手的前端监测工具

引言 "灯塔"&#xff08;fee&#xff09;作为一个前端监控系统&#xff0c;通常具备捕获浏览器端错误、性能监控、用户行为跟踪等功能。它的主要目的是帮助开发者了解他们的网站或应用在用户端的表现&#xff0c;以及时发现并解决问题。下面是关于这种系统的一些关键…