【自注意力与Transformer架构在自然语言处理中的演变与应用】

news2024/10/11 8:15:52

背景介绍

  • 在自然语言处理(NLP)领域,序列到序列(seq2seq)模型和Transformer架构的出现,极大地推动了机器翻译、文本生成和其他语言任务的进展。传统的seq2seq模型通常依赖于循环神经网络(RNN)来处理输入序列,并通过编码器-解码器结构进行信息传递。然而,这种方法在处理长序列时存在一定的局限性,主要体现在信息的丢失和长距离依赖的建模能力不足。

  • 为了解决这些问题,Transformer模型于2017年被提出。它引入了自注意力机制(Self-Attention),使得模型能够在处理每个单词时,考虑到句子中所有其他单词的上下文信息。这种机制不仅提高了模型对长距离依赖的捕捉能力,还显著提升了并行计算的效率,从而加快了训练速度。

  • 自注意力机制的核心在于通过计算查询(Query)、键(Key)和值(Value)向量之间的相关性,来动态调整每个单词在上下文中的重要性。这种方法使得模型能够灵活地关注句子中不同位置的词,从而更好地理解和生成语言。

  • 此外,Transformer模型的多头注意力机制进一步增强了模型的表达能力。通过将注意力机制分成多个头,模型能够在不同的子空间中学习到多种不同的表示,从而捕捉到更丰富的语义信息。

  • 近年来,基于Transformer的模型,如BERT、GPT和CLIP等,已经在多个NLP任务中取得了显著的成果。这些模型不仅在文本处理上表现出色,还扩展到了图像处理和多模态学习等领域,展示了Transformer架构的广泛适用性和强大能力。

  • 综上所述,seq2seq模型和Transformer架构的演变,标志着自然语言处理技术的重大进步,为实现更智能的语言理解和生成奠定了基础。

seq2seq原理

  • 参考:https://blog.csdn.net/zhuge2017302307/article/details/119979892
  • 对比作用
    在这里插入图片描述
    在这里插入图片描述

Transformer原理

在这里插入图片描述

Self-Attention 过程

如上一节所讲,Self Attention 在处理某个词之前,通过对句子片段中每个词的相关性进行打分,并将这些词的表示向量加权求和。

Self-Attention 沿着句子中每个 token 的路径进行处理,主要组成部分包括 3 个向量:

  1. Query:Query 向量是当前单词的表示,用于对其他所有单词(使用这些单词的 key 向量)进行评分。我们只关注当前正在处理的 token 的 query 向量。
  2. Key:Key 向量就像句子中所有单词的标签。它们就是我们在搜索单词时所要匹配的。
  3. Value:Value 向量是实际的单词表示,一旦我们对每个词的相关性进行了评分,我们需要对这些向量进行加权求和,从而表示当前的词。
    在这里插入图片描述
  • 以下是计算it时的评分
    在这里插入图片描述
  • 这些加权的 Value 向量会得到一个向量,它将 50% 的注意力放到单词robot 上,将 30% 的注意力放到单词 a,将 19% 的注意力放到单词 it。最终一个具有高分数的 Value 向量会占据结果向量的很大一部分
  • 上面都是展示大量的单个向量,是想把重点放在词汇层面上。而实际的代码实现,是通过巨大的矩阵相乘来完成的

MultiheadAttention

在这里插入图片描述

  • 多头注意力模型中,head数是一个超参数,语料大,电脑性能好就可以设置的高一点

torch实现

torch.nn.MultiheadAttention(embed_dim, num_heads, dropout=0.0, bias=True, add_bias_kv=False, add_zero_attn=False, kdim=None, vdim=None)
 1.embed_dim:最终输出的 K、Q、V 矩阵的维度,这个维度需要和词向量的维度一样
 2.num_heads:设置多头注意力的数量。要求embed_dim%num_heads==0,即要能被embed_dim整除。这是为了把词的隐向量长度平分到每一组,这样多组注意力也能够放到一个矩阵里,从而并行计算多头注意力。
 3.dropout:这个 dropout 加在 attention score 后面
  例如,我们前面说到,8 组注意力可以得到 8 组 Z 矩阵,然后把这些矩阵拼接起来,得到最终的输出。
  如果最终输出的每个词的向量维度是 512,那么每组注意力的向量维度应该是512/8=64 如果不能够整除,那么这些向量的长度就无法平均分配。

Self-Attention 和经典的(seq2seq)模型的区别

一个注意力模型不同于经典的(seq2seq)模型,主要体现在 3 个方面:

  1. 编码器把所有时间步的 hidden state(隐藏层状态)传递给解码器,而非只传递最后一个 hidden state。即编码器会把更多的数据传递给解码器。
  2. 对于 Self Attention 机制,会把其他单词的理解融入处理当前的单词。使得模型不仅能够关注这个位置的词,而且能够关注句子中其他位置的词,作为辅助线索,进而可以更好地编码当前位置的词。
  3. 解码器输出之前,计算了注意力。让模型找到此时刻最该注意的词。

对于第二点举例如下:

机器人第二定律

机器人必须服从人给予它的命令,当该命令与第一定律冲突时例外。

句子中高亮的 3 个部分,用于指代其他的词。如果不结合它们所指的上下文,就无法理解或者处理这些词。当一个模型要处理好这个句子,它必须能够知道:

  • 指的是机器人
  • 该命令 指的是这个定律的前面部分,也就是人给予它的命令
  • 第一定律 指的是机器人第一定律

Self Attention 能做到这一点。它在处理某个词之前,将模型中这个词的相关词和关联词的理解融合起来(并输入到一个神经网络)。它通过对句子片段中每个词的相关性打分(attention score),并将这些词向量加权求和。

下图顶部模块中的 Self Attention 层在处理单词 it 的时候关注到 a robot。它最终传递给神经网络的向量,是这 3 个单词的词向量加权求和的结果。
在这里插入图片描述

QKV计算过程

在这里插入图片描述

为什么求内积之后除以 d \sqrt{d} d

在计算相似度 s = ⟨ q , k ⟩ s = \langle q, k \rangle s=q,k 时, s s s 要除以 d k e y \sqrt{d_{key}} dkey (Key 向量的长度)。原因是词向量 embedding 维度过高时, s s s 过大,softmax 函数会进入饱和区。例如:

对于两个 d d d 维向量 q , k q, k q,k,假设它们都采样自“均值为 0、方差为 1”的分布。Attention 是内积后 softmax,主要设计的运算是 e q ⋅ k e^{q \cdot k} eqk,我们可以大致认为内积之后、softmax 之前的数值在 − 3 d -3\sqrt{d} 3d 3 d 3\sqrt{d} 3d 这个范围内,由于 d d d 通常都至少是 64,所以 e 3 d e^{3\sqrt{d}} e3d 比较大而 e − 3 d e^{-3\sqrt{d}} e3d 比较小,softmax 函数进入饱和区。这样会有两个影响:

  1. 带来严重的梯度消失问题,导致训练效果差。
  2. softmax 之后,归一化后计算出来的结果 a a a 要么趋近于 1 要么趋近于 0,Attention 的分布非常接近一个 one hot 分布了,加权求和退化成胜者全拿,则解码时只关注注意力最高的(attention 模型还是希望别的词也有权重)。

相应地,解决方法有两个(参考苏剑林《浅谈 Transformer 的初始化、参数化与标准化》):

  1. 像 NTK 参数化那样,在内积之后除以 d \sqrt{d} d ,使 q ⋅ k q \cdot k qk 的方差变为 1,对应 e 3 e^{3} e3 e − 3 e^{-3} e3 都不至于过大过小,这也是常规的 Transformer 如 BERT 里边的 Self Attention 的做法。对公式 s = ⟨ q , k ⟩ s = \langle q, k \rangle s=q,k 进行优化:( q q q k k k 求内积,所以其实 key 和 q q q 的向量长度一样。)

    s = ⟨ q , k ⟩ d k e y s = \frac{\langle q, k \rangle}{\sqrt{d_{key}}} s=dkey q,k

  2. 另外就是不除以 d \sqrt{d} d ,但是初始化 q , k q, k q,k 的全连接层的时候,其初始化方差要多除以一个 d d d,这同样能使得 q ⋅ k q \cdot k qk 的初始方差变为 1,T5 采用了这样的做法。

参考

  • https://blog.csdn.net/qq_56591814/article/details/119759105
  • https://blog.csdn.net/weixin_38252409/article/details/133828294

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

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

相关文章

【idea】切换多个仓库到一个分支

需求描述 打开个一个Project 里面包含多个子项目,每一个子项目都有一个自己的git仓库。在idea 中有没有一次性把多个项目切换到同一个分支上面。 解决方案 右键git -> branch 点击右上角的此轮 勾选Execute Branch Operations on All Roots 点击ommon Remote …

萱仔求职复习系列——2 Linux的常用方法(包含基础进阶高级操作)

由于最近接了一个笔试,发现笔试可能涉及到Linux,我准备临时抱佛脚一下赶紧复习一下Linux的用法哈哈。Linux 的基础用法包含文件系统操作、权限管理、网络配置、进程管理等基本命令;进阶操作包括网络调试、包管理、服务管理和用户管理等&#…

【jdk19虚拟线程 VS 普通线程】

文章目录 一.什么是虚拟线程二.虚拟线程与普通线程的区别1.普通线程2.虚拟线程3. 实际应用中的区别 三.上demo对比性能。1.线程池配置2.Service实现3.测试结果 四.小结 一.什么是虚拟线程 虚拟线程,也称作轻量级线程,是由JVM直接管理的线程类型&#xf…

jmeter入门:脚本录制

1.设置代理。 网络连接-》代理-》手动设置代理. ip: 127.0.0.1, port:8888 2. add thread group 3. add HTTP(s) test script recorder, target controller chooses Test plan-> thread Group 4. click start. then open the browser …

Golang | Leetcode Golang题解之第467题环绕字符串中唯一的子字符串

题目: 题解: func findSubstringInWraproundString(p string) (ans int) {dp : [26]int{}k : 0for i, ch : range p {if i > 0 && (byte(ch)-p[i-1]26)%26 1 { // 字符之差为 1 或 -25k} else {k 1}dp[ch-a] max(dp[ch-a], k)}for _, v :…

Java主流框架项目实战——SpringBoot入门

单元1-1 1) IDEA工具安装好 2) Maven安装,配置好 IDEA安装及永久试用 配置maven 单元1-2 使用aliyun(https://start.aliyun.com/)创建一个spring boot项目,hello world! 构建项目 1)构建项目 直接默认…

MicroFlow:一种高效的基于Rust的TinyML推理引擎

英文论文标题:MICROFLOW: AN EFFICIENT RUST-BASED INFERENCE ENGINE FOR TINYML 中文论文标题:MicroFlow:一种高效的基于Rust的TinyML推理引擎 作者信息: Matteo Carnelos,意大利帕多瓦大学,Grepit AB,…

什么软件可以晚上睡觉录音

什么软件可以晚上睡觉录音,在日常生活中,我们常常忽略夜间的声音,然而这些声音有时可能会揭示重要信息,比如打鼾情况、说梦话、甚至是潜在的睡眠问题。因此,一款适合夜间录音的软件对于关注健康及生活细节的人来说至关…

在IDEA中配置Selenium和WebDriver

前言: 在当今自动化测试和网络爬虫的领域,Selenium是一个被广泛使用的工具。它不仅能够模拟用户与浏览器的交互,还能进行网页测试和数据抓取。而为了使用Selenium与谷歌/Edge浏览器进行自动化测试,配置合适的WebDriver至关重要。本…

【时时三省】(C语言基础)指针笔试题8

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 笔试题8 c是个数组 它的每个元素是char* 它初始化了四个字符串 把这四个字符串的首字符的地址 传到了c里面 cp有四个元素 每个元素的类型是char** 所以c3指向FORST c2指向POINT c1指向NE…

数学建模算法与应用 第9章 支持向量机及其方法

目录 9.1 支持向量机的基本原理 核函数的种类: 9.2 支持向量机的Matlab命令及应用 Matlab代码示例:二分类支持向量机 9.3 乳腺癌的诊断案例 Matlab代码示例:乳腺癌数据分类 9.4 支持向量回归(SVR) Matlab代码示…

uibot发送邮件:自动化邮件发送教程详解!

uibot发送邮件的操作指南?uibot发送邮件的两种方式? 在现代办公环境中,自动化流程的引入极大地提高了工作效率。uibot发送邮件功能成为了许多企业和个人实现邮件自动化发送的首选工具。AokSend将详细介绍如何使用uibot发送邮件。 uibot发送…

【AIGC】寻找ChatGPT最佳推理步骤:CoT思维链技术的探索与应用

博客主页: [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯CoT思维链概述💯CoT思维链在大型语言模型中的应用💯CoT思维链改变对模型推理能力的理解和改进方式多样化应用场景挑战与未来发展总结 &#x1f4a…

鸿蒙NEXT开发-动画(基于最新api12稳定版)

注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下 如果大家觉得博主文章写的好的话,可以点下关注,博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…

用FPGA做一个全画幅无反相机

做一个 FPGA 驱动的全画幅无反光镜数码相机是不是觉得很酷? 就是上图这样。 Sitina 一款开源 35 毫米全画幅 (3624 毫米) CCD 无反光镜可换镜头相机 (MILC),这个项目最初的目标是打造一款数码相机,将 SLR [单镜头反光] 相机转换为 DSLR [数码…

探索Semantic Kernel:开启AI编程新篇章(入门篇)

文章目录 一、引言二、什么是Semantic Kernel?三、为什么选择Semantic Kernel?四、Semantic Kernel的核心特性4.1企业级4.2 自动化业务流程4.3 模块化和可扩展性 五、Semantic Kernel入门5.1 安装SDK5.2 编写控制台应用1. 配置2.实例3.示例一&#xff1a…

【漏洞复现】某知识付费纯净发卡小程序系统存在SQL注入漏洞

漏洞描述 知识吾爱纯净版小程序源码,附详细视频+文字教程【小白可0基础搭建】跟随教程步骤即可简单搭建属于自己的知识付费小程序,实现支付变现+流量主收益,快速建立自己的IP知识付费小程序源码包括以下功能:会员管理:支持用户注册、登录、个人信息管理等功能,以及会员等…

《系统架构设计师教程(第2版)》第18章-安全架构设计理论与实践-01-安全架构概述

文章目录 1. 信息安全面临的威胁2. 安全架构的定义和范围2.1 安全架构的概念2.2 安全架构的范围2.3 安全架构应具备的特性2.4 安全技术2.5 过程 3. 与信息安全相关的国内外标3.1 国外标准3.2 国内标准3.2.1 标准缩写含义3.2.2 主要技术标准1)国家标准2)特…

安全网络架构

网络安全解决方案是指通过一系列技术和措施来保护网络系统和数据的安全。它涉及多个方面,包括网络设备的防护、数据的加密和备份、安全策略的制定和执行等。以下是一些常见的网络安全解决方案: 防火墙:防火墙是一种硬件或软件设备&#xff0c…

怎么将视频原声提出来?视频原声提取,让创作更自由

在数字媒体时代,视频已成为我们日常生活和工作中不可或缺的一部分。有时,我们可能想要提取视频中的音频部分,无论是为了制作音频素材、学习语言,还是为了其他创意用途。那么,怎么将视频原声提出来呢?本文将…