【课程总结】day19(中):Transformer架构及注意力机制了解

news2024/9/25 9:40:21

前言

本章内容,我们将从注意力的基础概念入手,结合Transformer架构,由宏观理解其运行流程,然后逐步深入了解多头注意力、多头掩码注意力、融合注意力等概念及作用。

注意力机制(Attension)

背景

深度学习中的注意力机制(Attention Mechanism)是一种模仿人类视觉和认知系统的方法。

注意力的产生

如下图所示,人脑在看到一幅图像时是如何分配有限的注意力资源:红色区域表明视觉系统更加关注的区域。

人们会把注意力更多的投入到人的脸部、文本的标题以及文章的首句等位置。

注意力机制核心思想

模仿人的注意力分配方式,将输入数据的重要性动态地分配权重,从而提高模型的表现。

如上图:

  • 小孩的脸部:重要,乘以一个较大的权重(如0.99),突出重要性
  • 图片的背景:不重要,乘以一个较小的权重(如0.01),削弱重要性

注意力本质:关注的增强,不关注的减弱

公共底层架构Transformer

在了解注意力机制后,我们从人工智能的公共底层架构Transformer入手来逐步了解整体的运行机制。

背景回顾

在【课程总结】Day17(上):NLP自然语言处理及RNN网络中,我们曾介绍过自然语言是具有时序性:

“狗追猫。”
“猫追狗。”

以上例子中,字都是相同的,但是字的顺序不同的,所表达的意思完全相反。

RNN的问题


为了处理上述时序数据,RNN通过循环结构,将每个时间步的输出作为下一时间步的输入,最终得到一个完整的输出序列。但这也随之带来了一些问题:

  1. 梯度消失与爆炸:传统 RNN 在处理长序列时,容易出现梯度消失或梯度爆炸的问题,导致训练困难。
  2. 训练时间较长:由于序列数据的特性,RNN 的训练时间通常较长,尤其是在长序列上。
  3. 并行化困难:RNN 的计算依赖于前一个时间步的输出,导致其在训练和推理时难以进行并行化,效率较低,无法有效利用硬件加速。
Transformer的优势

2017年:Google的研究团队在论文《Attention is All You Need》中首次提出了Transformer架构。该架构完全基于自注意力机制(self-attention),摒弃了传统的循环结构,极大地提高了并行处理能力和训练效率。

优势

  1. 摆脱循环:Transformer 摆脱了循环,能够在训练和推理时进行并行化,大大提高效率。
  2. 并行化:Transformer 通过自注意力并行抽取特征,没有前后顺序的依赖,也就无从谈起信息遗忘。
  3. 可堆叠:有ResBlock和LayerNorm的加持,模型可以无限堆叠,重复越多,能力越大。
  4. 能力涌现:真正实现了量变到质变,能力发生了涌现。

所谓能力涌现是指:

  • 早期人工智能:只是在既有数据基础上进行学习,然后可以模仿处理类似问题,这种能力只能点对点的解决特定问题,不能称为智能。
  • Transformer及大模型: 面临新的场景时,可以把自己老的经验和知识迁移过来,解决新的问题,这才是智能。这种能力也称之为能力涌现。

Transformer架构

整体架构


Transformer是一个典型的encoder-decoder结构。

关于Seq2Seq的内容回顾,可以查看【课程总结】Day17(下):初始Seq2Seq模型,本文不再赘述。

宏观处理流程

由于Transformer的架构图有非常多的元素,直接深入细节可能不便于理解整体运行流程,所以我们对模型架构图做一些划分处理,以便从宏观维度理解整体的运行流程。

  • 第一步:上文输入内容经过上文输入处理部分进行embedding以及位置编码,生成对应上文的词向量数据。
  • 第二步:特征经过多头注意力处理部分进行特征抽取。
  • 第三步:抽取的特征经过后处理部分进行非线性变换,以增强模型的表达能力和捕捉复杂特征,最终形成中间表达
  • 第四步下文处理部分采用与上文处理部分的类似机制进行embedding和增加位置信息。(下文初始会增加<SOS>启动信号。)
  • 第五步:下文词向量数据经过多头掩码注意力处理部分进行特征抽取。
  • 第六步融合处理部分将上文产生的中间表达与下文特征进行融合,即提供上文,让模型补充下文。
  • 第七步输出概率部分融合处理部分产生的结果经过softmax进行概率分布,得到输出结果。
  • 第八步:进行自回归循环,将产生的输出结果交给下文处理部分继续第四~第七步,直到输入<EOS>结束。

注意
Transformer相比较RNN抛弃循环的部分,主要体现在上图浅蓝色的方框中,即通过注意力机制将RNN循环处理的方式一次性并行处理。

动图演示宏观处理过程:

输入处理部分

作用:解决序列数据不会丢失顺序的问题。由于Transformer取消了RNN的循环结构,其在处理特征时是并行处理,所以在输入部分需要引入Positional Encoding解决序列数据不会丢失顺序的问题。

以"狗追猫"为例

  • 原始输入:“狗追猫”
  • 经过分词:“狗 追 猫”
  • 经过word2idx之后:“1 2 3”
  • 此时inputs = [1, 2, 3]
  • 经过embedding之后:(假设转换后的词向量如下)
    • “狗” → [0.1,0.2,0.3,0.4]
    • “追” → [0.5,0.6,0.7,0.8]
    • “猫” → [0.9,1.0,1.1,1.2]
  • 经过Positional Encoding:
    • 第一步:计算位置编码:
      • 位置0的编码为 [0, 1, 0, 1]
      • 位置1的编码为 [0.0001, 1, 0.0001, 1]
      • 位置2的编码为 [0.0002, 1, 0.0002, 1]
    • 第二步:将位置编码和词向量相加:
      • 句子1:“狗追猫。”
        • 对于“狗”:[0.1,0.2,0.3,0.4]+[0,1,0,1]=[0.1,1.2,0.3,1.4]
        • 对于“追”:[0.5,0.6,0.7,0.8]+[0.0001,1,0.0001,1]≈[0.5001,1.6,0.7001,1.8]
        • 对于“猫”:[0.9,1.0,1.1,1.2]+[0.0002,1,0.0002,1]≈[0.9002,2.0,1.1002,2.2]
      • 句子2:“猫追狗。”
        • 对于“猫”:[0.9,1.0,1.1,1.2]+[0,1,0,1]=[0.9,2.0,1.1,2.2]
        • 对于“追”:[0.5,0.6,0.7,0.8]+[0.0001,1,0.0001,1]≈[0.5001,1.6,0.7001,1.8]
        • 对于“狗”:[0.1,0.2,0.3,0.4]+[0.0002,1,0.0002,1]≈[0.1002,1.2,0.3002,1.4]
  • 计算位置编码的方式一般是人工预设的方式计算出来。
  • 以上Position的示例是由GPT辅助生成,我并没有深究,关于计算公式详情请见Positional Encoding

通过位置编码,Transformer能够有效地捕获“狗追猫”和“猫追狗”这两个句子中词语的位置信息,从而理解它们之间的关系和语义,进而达到时序数据并行计算

编码encoder部分

对encoder结构归纳总结,其由两部分组成:前馈网络(Feed Forward)和 自注意力(Self-Attention)。

自注意力(Self-Attention)

基本思想:在处理序列数据时,每个元素都可以与序列中的其他元素建立关联,而不仅仅是依赖于相邻位置的元素。

计算原则:关注的增强,不关注的减弱

具体方法

  1. 输入表示:原始输入的词,经过变ID、embedding、位置编码等处理后,词向量序列(如图中$$PV^1$$~$$PV^5$$)。
  2. 一分三:通过三个不同的线性变换,将每个词一分三
    • $$Q = PVW_Q$$:query 查询向量(作用:查询他人)
    • $$K = PVW_K$$:key 关键词向量(作用:等着别人来查询)
    • $$V = PVW_V$$:value 值向量(作用:代表该词的信息)
  • PV :代表具有位置信息的词向量。
  • $$W_Q$$$$W_K$$$$W_V$$:代表三个公共的、可学习的权重矩阵。
  1. 计算注意力权重:通过计算查询与键的向量内积来获得相似度,然后进行缩放和softmax处理,归一化为注意力权重。

例如:q1与k1,q1与k2,q1与k3计算点积,然后除以$$\sqrt{d}$$进行缩放和softmax处理为小数。

  • ( d ) 是词向量维度。
  1. 加权求和:通过将每个元素与对应的注意力权重进行加权求和,可以得到自注意力机制的输出$$Z^1$$~$$Z^5$$
多头注意力(Multi-Head Attention)

多头注意力机制是在自注意力机制的基础上发展起来的,是自注意力机制的变体,旨在增强模型的表达能力和泛化能力。


多头注意力在生成q、k、v时,会再分配多个q、k、v,上图为2个头为例。

具体方法

  1. 输入表示:与自注意力相同。
  2. 一分三:对于每个注意力头 $$i$$,使用不同的线性变换矩阵来生成查询、键和值:
  • 查询 $$Q_i = X W_Q^i$$
  • $$K_i = X W_K^i$$
  • $$V_i = X W_V^i$$
  • $$W_Q^i$$$$W_K^i$$$$W_V^i$$ 是每个头的可学习权重矩阵。
  1. 计算注意力权重:对于每个头计算注意力权重,方法同自注意力。
  2. 加权求和:加权求每个头的输出。
  3. 拼接输出:将每个头的输出拼接起来,得到最终的输出。
  4. 线性转换:将拼接后的输出通过线性变换矩阵得到最终的输出。

多头注意力的计算仅进行了简单地概念了解,具体的计算过程未做深究,如须了解请参考The Illustrated Transformer

解码decoder部分

下文处理部分

该部分的逻辑与encoder中的上文处理部分逻辑一致,所以不再赘述。

多头掩码注意力(Masked Multi-Head Attention)处理部分

多头掩码注意力(Masked Multi-Head Attention)比多头注意力(Multi-Head Attention)结构多了一个masked。所以首先搞清楚mask掩码的作用。

Mask掩码的作用:
  • 作用1:处理非定长序列,区分 padding 和非 padding 部分
  • 作用2:处理定长序列,区分不同时间步之间的依赖关系
pad mask

背景
在NLP中,文本一般是不定长的,所以在进行 batch训练之前,要先进行长度的统一,其中过短的句子通过 padding 增加到固定的长度;但是 padding 对应的字符只是为了统一长度,padding参与运算等于让无效的部分参与了运算,这会影响模型的性能。

以上内容曾在【课程总结】Day18:Seq2Seq的深入了解也遇到过,Seq2Seq是通过传入实际的数据长度以略过padding部分。

在Transformer中,通过给无效区域加一个很大的负数偏置,使无效区域经过softmax计算之后得到的结果几乎为0,从而避免了无效区域参与计算。

subsequence mask

在语言模型中,常常需要从上一个词预测下一个词,但如果要在LM中应用 self attention 或者是同时使用上下文的信息,要想不泄露要预测的标签信息,就需要 mask 来“遮盖”它。

  • 一个包括四个词的句子[A,B,C,D],在计算了相似度scores之后,得到上面第一幅图
  • 将scores的上三角区域mask掉,即替换为负无穷,再做softmax得到第三幅图。
  • 这样,比如输入 B 在self-attention之后,也只和A,B有关,而与后序信息无关。

以上内容搬运自动图图解Transformer及其工程领域应用。

除此之外,其他功能与多头注意力一致,不再赘述。

融合注意力处理部分

融合处理部分的输入箭头中:

  • 左侧两个是来自encoder的中间表达K和V
  • 右侧一个箭头来自 decoder的输出
  • 这部分功能是将encoder的输出与decoder的输出进行融合,从而得到一个完整的输出。

回顾Transformer的整体结构

详细的结构图(带有内部组件)

简化的结构图(带有动画效果)

内容小结

  • 注意力机制是一种模仿人类视觉和认知系统的方法,其本质是:关注的增强,不关注的减弱
  • Transformer 架构基于自注意力机制(self-attention),摒弃了传统的RNN循环结构,极大地提高了并行处理能力和训练效率。
  • Transformer 是一个典型的seq2seq结构(encoder-decoder结构),
    • 在endoder部分,主要由上文输入处理外挂多头注意力处理组成;
    • 在decoder部分,主要由下文输入处理外挂多头掩码注意力融合处理组成。
  • 关于注意力
    • 自注意力机制 在处理序列数据时,每个元素都可以与序列中的其他元素建立关联,而不仅仅是依赖于相邻位置的元素。
    • 多头注意力机制 是在 自注意力机制 的基础上发展起来的,是自注意力机制的变体,旨在增强模型的表达能力和泛化能力。
    • 多头掩码注意力(Masked Multi-Head Attention)多头注意力(Multi-Head Attention) 结构多了一个masked
    • 融合注意力 是将encoder的输出与decoder的输出进行融合,从而得到一个完整的输出。
  • mask掩码有两种作用:
    • 作用1:处理非定长序列,区分 padding 和非 padding 部分。
    • 实现原理是:通过给无效区域加一个很大的负数偏置,使无效区域经过softmax计算之后得到的结果几乎为0,从而避免了无效区域参与计算。
    • 作用2:处理定长序列,区分不同时间步之间的依赖关系,即从上一个词预测下一个词,避免"未来词"信息干扰。
    • 实现原理是:在计算词的相似度scores之后,通过三角矩阵mask掉(即替换为负无穷)再做softmax,从而遮挡住"未来词"。
  • Transformer的decoder时通过自回归循环,将产生的输出结果交给下文处理部分重复进行多头注意力处理融合注意力处理,直到输入<EOS>结束。

参考资料

论文:Attention Is All You Need
博客:The Illustrated Transformer
CSDN:论文解读:Attention Is All You Need
CSDN:《Attention Is All You Need》算法详解
CSDN:动图图解Transformer及其工程领域应用

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

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

相关文章

如何在立创EDA的PCB电路板导入logo图案

1、首先制作好logo图案&#xff0c;一般为公司logo图标&#xff0c;如下图 2、打开立创EDA的PCB文件&#xff0c;如下图 3、将PCB的图层切换到丝印层&#xff1a; 4、然后选择EDA菜单栏的放置---图片&#xff1a; 5、进入后点击选择图片&#xff0c;将logo图片导入&#xff0c;…

人生低谷来撸C#--022 winfrom 和WPF

1、简单介绍 标题其实是写错了&#xff0c;是winform,不是winfrom&#xff0c;如果再准确点&#xff0c;应该是 WinForms&#xff08;复数形式&#xff09;&#xff0c;它代表的是 Windows Forms 技术&#xff0c;用于在 .NET Framework 中创建桌面应用程序的用户界面。在 Vis…

数据结构——八大排序

一.排序的概念和其应用 1.1排序的概念 排序&#xff1a;排列或排序是将一组数据按照一定的规则或顺序重新组织的过程&#xff0c;数据既可以被组织成递增顺序&#xff08;升序&#xff09;&#xff0c;或者递减顺序&#xff08;降序&#xff09;。稳定性&#xff1a;假定在待…

Prometheus监控的搭建(ansible安装——超详细)

目录 1.各组件功能介绍 2.安装批量部署工具ansbile 3.执行服务器 4.各服务器间做免密 5.下载安装包 5.1Prometheus的下载的下载地址 5.2exporter的下载地址 5.3grafana的下载地址 6.编辑ansible需要的配置文件 7.编写ansible文件 8.验证执行结果 今天和大家分享一下…

网站在线查询工具箱源码分享

终极网络工具系统”(SAAS)&#xff0c;是一款功能强大的PHP脚本在线查询工具。本版集合了超过470种快速且易用的Web工具&#xff0c;为日常任务处理和开发人员提供了极大的便利。作为一款综合性的网络工具系统&#xff0c;66toolkit不仅满足了用户的基本网络需求&#xff0c;更…

Java面试题 -- 为什么重写equals就一定要重写hashcode方法

在回答这个问题之前我们先要了解equals与hascode方法的本质是做什么的 1. equals方法 public boolean equals(Object obj) {return (this obj);}我们可以看到equals在不重写的情况下是使用判断地址值是否相同 所以默认的 equals 的逻辑就是判断的双方是否引用了一个对象&am…

【EI会议征稿】第四届高性能计算与通信工程国际学术会议(HPCCE 2024)

出版出版 【SPIE出版 | 往届会后3个月内完成EI检索】 第四届高性能计算与通信工程国际学术会议(HPCCE 2024) 2024 4th International Conference on High Performance Computing and Communication 第四届高性能计算与通信工程国际学术会议&#xff08;HPCCE 2024&#xf…

使用Chainlit接入通义千问快速实现一个自然语言转sql语言的智能体

文本到 SQL 让我们构建一个简单的应用程序&#xff0c;帮助用户使用自然语言创建 SQL 查询。 最终结果预览 ​ 先决条件 此示例有额外的依赖项。你可以使用以下命令安装它们&#xff1a; pip install chainlit openai​ 导入 应用程序 from openai import AsyncOpenAI…

扩展------零拷贝技术(Mmap,SendFile)

什么是零拷贝 零拷贝&#xff08;Zero-Copy&#xff09;是一种计算机操作技术&#xff0c;旨在减少数据在内存之间的拷贝次数&#xff0c;以提高数据传输的效率和性能。 传统的IO模式&#xff1a; 模拟网络传输数据运行过程&#xff1a; 用户态read()发起系统调用&#xff0c…

Flink中上游DataStream到下游DataStream的内置分区策略及自定义分区策略

目录 全局分区器GlobalPartitioner 广播分区器BroadcastPartitioner 哈希分区器BinaryHashPartitioner 轮询分区器RebalancePartitioner 重缩放分区器RescalePartitioner 随机分区器ShufflePartitioner 转发分区器ForwardPartitioner 键组分区器KeyGroupStreamPartitio…

力扣SQL50 第二高的薪水 ifnull() 分页

Problem: 176. 第二高的薪水 &#x1f468;‍&#x1f3eb; 参考题解 Code select ifNull((select distinct salaryfrom employeeorder by salary desclimit 1,1),null) as SecondHighestSalary

【Python数据结构与算法】分治----汉诺塔问题

题目&#xff1a;汉诺塔问题 描述 古代有一个梵塔&#xff0c;塔内有三个座A、B、C&#xff0c;A座上有n个盘子&#xff0c;盘子大小不等&#xff0c;大的在下&#xff0c;小的在上。三个座都可以用来放盘子。有一个和尚想把这n个盘子从A座移到C座&#xff0c;但每次只能允许移…

AWS SES 认证策略设置全攻略:轻松掌握简单步骤!

最近&#xff0c;我有机会设置 Amazon Simple Email Service&#xff08;以下简称&#xff1a;SES&#xff09;的认证策略&#xff0c;所以这次写下来作为备忘。 前言 Amazon Simple Email Service&#xff08;SES&#xff09;是一项通过 API 端点或 SMTP 接口进行邮件发送的服…

MySQL:VIEW视图

概述 MySQL 视图&#xff08;View&#xff09;是一种虚拟存在的表&#xff0c;同真实表一样&#xff0c;视图也由列和行构成&#xff0c;但视图并不实际存在于数据库中。行和列的数据来自于定义视图的查询中所使用的表&#xff0c;并且是在使用视图时动态生成的。 数据库中只…

从Notion Sites的推出,分析SaaS服务发展浪潮

引言 前段时间&#xff0c;Notion发布了新功能“Notion Sites”&#xff0c;允许用户直接在Notion中编辑页面并将其作为网站发布。其实在此之前&#xff0c;一些SaaS&#xff08;软件即服务&#xff09;软件也具有该功能&#xff0c;比如HelpLook AI知识库、Squarespace、Wix等…

buu做题(13)

[BSidesCF 2019]Kookie 给了一个账户: cookie / monster 根据提示, 我们需要以 admin 的身份登录 抓个包 , 可以发现一个奇怪的地方, Set-Cookie: usernamecookie; 以这样的方式确定登录的用户, 尝试伪造一下 直接 加上一个请求头: Cookie:usernameadmin 就可以得到flag 也…

卡码网--数组篇(二分法)

系列文章目录 文章目录 系列文章目录前言数组二分查找 前言 详情看&#xff1a;https://programmercarl.com/ 总结知识点用于复习 数组 概念: 数组是存放在连续内存空间上的相同类型数据的集合。 数组可以方便的通过下标索引的方式获取到下标对应的数据。 特点&#xff1a;…

图欧资源站与AI站23年5月~24年5月一年更新日志大汇总!

Hello&#xff0c;大家好&#xff0c;我是图欧君&#xff0c;很久没上CSDN啦&#xff0c;来跟大家一口气盘点一下我和我们团队从2023年5月到2024年5月以来都干了些什么大事吧~本文超长&#xff01;流量预警&#xff01;建议在WIFI环境下观看&#xff01; 别眨眼&#xff0c;三&…

python实现图像分割算法4

python实现流域变换算法 算法原理基本步骤数学模型Python实现详细解释优缺点应用领域流域变换(Watershed Transform)算法是一种用于图像分割的技术,特别适用于分割重叠和相邻的对象。它的基本思想是将图像视为拓扑表面,通过模拟水的流动来分割区域。流域变换广泛应用于医学…

Hadoop学习(三)

一、MapReduce框架原理 1.1InputFormat数据输入 MapTask并行度决定机制 1&#xff09;数据块&#xff08;HDFS存储数据单位&#xff09;&#xff0c;物理上把数据分成一块一块 2&#xff09;数据切片&#xff08;MapReduce程序计算输入数据的单位)&#xff1a;只是在逻辑上…