详解注意力机制上篇【RNN,Seq2Seq(Encoder-Decoder,编码器-解码器)等基础知识】

NLP-大语言模型学习系列目录

一、注意力机制基础——RNN,Seq2Seq等基础知识
二、注意力机制【Self-Attention,自注意力模型】


🔥 在自然语言处理(NLP)领域,理解和生成自然语言的能力对于构建智能系统至关重要。从文本分类、机器翻译到对话系统,底层技术的不断进步推动了NLP的发展。在这些技术中,循环神经网络(RNN)及其变种如长短期记忆网络(LSTM)、Seq2Seq模型和注意力机制(Attention Mechanism)扮演了重要角色。

📚 本系列博客将从基础知识开始,逐步深入探讨大语言模型在NLP中的应用。我们将从RNN的经典结构出发,介绍其工作原理和局限性,接着探讨Seq2Seq模型及其在机器翻译中的应用,最后深入解读注意力机制及其在现代深度学习模型中的重要性。


文章目录

  • NLP-大语言模型学习系列目录
  • 一、RNN经典结构
  • 二、vector-to-sequence结构
  • 三、sequence-to-vector结构
  • 四、Seq2Seq模型
    • 1 Encoder
    • 2 Decoder
  • 五、Embedding
    • 1 什么是 Embedding?
    • 2 为什么需要 Embedding?
    • 3 Embedding 的实现
    • 4 例子
    • 5 实例:机器翻译
    • 6 总结
  • 参考资料


循环神经网络(Recurrent Neural Network, RNN)是一类以序列数据为输入,在序列的演进方向进行递归且所有节点(循环单元)按链式连接的递归神经网络(recursive neural network)。对循环神经网络的研究始于二十世纪 80-90 年代,并在二十一世纪初发展为深度学习算法之一,其中双向循环神经网络和长短期记忆网络(Long Short-Term Memory networks,LSTM)是常见的循环神经网络。

一、RNN经典结构

经典循环神经网络的单个神经元如下图所示,它由输入层、一个隐藏层和一个输出层组成:

截屏2024-05-26 19.18.11
  1. x t x_t xt 是一个向量,它表示t时刻输入层的值;
  2. h t − 1 , h t h_{t-1},h_t ht1,ht 分别表示t-1时刻和t时刻隐藏层的值.

其中 h t h_t ht的计算如下:
h t = f ( U h t − 1 + W x t + b ) , h_t=f(Uh_{t-1}+Wx_t+b), ht=f(Uht1+Wxt+b),
其中 x t ∈ R M \mathbf{x}_t\in\mathbb{R}^M xtRM t t t时刻网络的输入, U ∈ R D × D \mathbf{U}\in\mathbb{R}^{D\times D} URD×D 为状态-状态权重矩阵, W ∈ R D × M \mathbf{W}\in\mathbb{R}^{D\times M} WRD×M为状态-输入权重矩阵, b ∈ R D \mathbf{b}\in\mathbb{R}^D bRD 为偏置向量, f f f激活函数.上面是RNN网络中的单个结点,下面给出长度为 T T T的RNN网络,我们可以更清晰的看到前一时刻对后一时刻的影响.

截屏2024-05-26 19.29.15

现在看上去就比较清楚了, 这个网络在 t \mathrm{t} t 时刻接收到输入 x t \mathrm{x}_{t} xt 之后, 隐藏层的值是 h t h_t ht, 输出值是 y t \mathrm{y}_{t} yt 。关键一点是, h t h_t ht 的值不仅仅取决于 x t \mathrm{x}_{t} xt, 还取决于 h t − 1 \mathrm{h}_{t-1} ht1 。可以用下面的公式来表示循环神经网络的计算方法:
y t = V h t ( 1 ) \mathrm{y}_{t}=V \mathrm{h}_{t}\quad (1) yt=Vht(1)
h t = f ( W x t + U h t − 1 ) ( 2 ) \mathrm{h}_{t}=f\left(W \mathrm{x}_{t}+U \mathrm{h}_{t-1}\right)\quad(2) ht=f(Wxt+Uht1)(2)

  1. 式 1 是输出层的计算公式, 输出层是一个全连接层, 也就是它的每个节点都和隐藏层的每个节点相连, V \mathrm{V} V 是输出层的权重矩阵.
  2. 式 2 是隐藏层的计算公式, 它是循环层。 U \mathrm{U} U 是输入 x x x 的权重矩阵, W \mathrm{W} W 是上一次的值 h t − 1 \mathrm{h}_{t-1} ht1 作为这一次的输入的权重矩阵, f f f 是激活函数.(这里我们省略 b b b

从上面的公式可以看出, 循环层和全连接层的区别就是循环层多了一个权重矩阵 W \mathrm{W} W 。如果反复把式 2 带入到式 1 , 将得到:
y t = V h t = V f ( W x t + U h t − 1 ) = V f ( W x t + U f ( W x t − 1 + U h t − 2 ) ) = V f ( W x t + U f ( W x t − 1 + U f ( W x t − 2 + U h t − 3 ) ) ) = V f ( W x t + U f ( W x t − 1 + U f ( W x t − 2 + U f ( W x t − 3 + … ) ) ) ) \begin{aligned} \mathrm{y}_{t} &=V \mathrm{h}_{t} \\ &=V f\left(W \mathrm{x}_{t}+U \mathrm{h}_{t-1}\right) \\ &=V f\left(W \mathrm{x}_{t}+U f\left(W \mathrm{x}_{t-1}+U \mathrm{h}_{t-2}\right) \right)\\ &=V f\left(W \mathrm{x}_{t}+U f\left(W \mathrm{x}_{t-1}+U f\left(W \mathrm{x}_{t-2}+U \mathrm{h}_{t-3}\right)\right)\right) \\ &=V f\left(W \mathrm{x}_{t}+U f\left(W \mathrm{x}_{t-1}+U f\left(W \mathrm{x}_{t-2}+U f\left(W \mathrm{x}_{t-3}+\ldots\right)\right)\right)\right) \end{aligned} yt=Vht=Vf(Wxt+Uht1)=Vf(Wxt+Uf(Wxt1+Uht2))=Vf(Wxt+Uf(Wxt1+Uf(Wxt2+Uht3)))=Vf(Wxt+Uf(Wxt1+Uf(Wxt2+Uf(Wxt3+))))
从上面可以看出, 循环神经网络的输出值 y t \mathrm{y}_t yt, 是受前面历次输入值 $ x_{t}, x_{t-1}, \cdots,x_1$影响的, 这就是为什么循环神经网络可以往前看任意多个输入值的原因。

Note:

  • 从以上结构可看出,传统的RNN结构的输⼊和输出等⻓.
  • 我们可以看到每个节点会共用参数 W , U , V W,U,V W,U,V.

二、vector-to-sequence结构

有时我们要处理的问题输⼊是⼀个单独的值,输出是⼀个序列。

此时,有两种主要建模⽅式:

  1. ⽅式⼀:可只在其中的某⼀个序列进⾏计算,⽐如序列第⼀个进⾏输⼊计算,其建模⽅式如下:
    截屏2022-06-02 下午8.13.43
  2. 把输⼊信息X作为每个阶段的输⼊,其建模⽅式如下:
    截屏2022-06-02 下午8.14.19

三、sequence-to-vector结构

有时我们要处理的问题输⼊是⼀个序列,输出是⼀个单独的值,此时通常在最后的⼀个序列上进⾏输出变换,其建模如下所⽰:

截屏2024-05-26 16.56.09

四、Seq2Seq模型

RNN最重要的一个变种:Seq2Seq,这种结构又叫Encoder-Decoder模型。

原始的sequence-to-sequence结构的RNN要求序列等长,然⽽我们遇到的⼤部分问题序列都是不等长的,如机器翻译中,源语⾔和⽬标语⾔的句⼦往往并没有相同的长度。

1 Encoder

将输⼊数据编码成⼀个上下⽂向量 c,这部分称为Encoder,其⽰意如下所⽰:

截屏2022-06-02 下午8.19.38

得到c有多种⽅式:

  1. 最简单的⽅法就是把Encoder的最后⼀个隐状态赋值给c : c = h 4 c=h_4 c=h4
  2. 还可以对最后的隐状态做⼀个变换得到 : c = q ( h 4 ) c=q(h_4) c=q(h4)
  3. 也可以对所有的隐状态做变换: c = q ( h 1 + h 2 + h 3 + h 4 ) c=q(h_1+h_2+h_3+h_4) c=q(h1+h2+h3+h4)

2 Decoder

拿到c之后,就用另一个RNN网络对其进行解码,这部分RNN网络被称为Decoder。具体做法就是将c当做初始状态输入到Decoder中:

截屏2022-06-02 下午8.24.57

还可以将c作为Decoder的每⼀步输⼊,⽰意图如下所⽰:

截屏2022-06-02 下午8.26.20

由于这种Encoder-Decoder结构不限制输入和输出的序列长度,因此应用的范围非常广泛,比如:

  • 机器翻译,Encoder-Decoder的最经典应用,事实上这一结构就是在机器翻译领域最先提出的;
  • 文本摘要,输入是一段文本序列,输出是这段文本序列的摘要序列;
  • 阅读理解,将输入的文章和问题分别编码,再对其进行解码得到问题的答案;
  • 语音识别,输入是语音信号序列,输出是文字序列。

五、Embedding

1 什么是 Embedding?

Embedding 是一种将离散的、高维的输入数据(如单词或符号)转换为连续的、低维的向量表示的方法。其目的是捕捉输入数据中的语义和结构信息,使其在向量空间中具有有意义的分布。

2 为什么需要 Embedding?

在 NLP 中,原始的文本数据通常由单词、子词或字符组成,这些元素本质上是离散的符号。传统的处理方法(如 one-hot 编码)会将每个单词表示为一个高维的稀疏向量,缺点如下:

  1. 维度过高:词汇表中的每个单词都需要一个独立的维度,对于大型词汇表,这会导致向量的维度非常高。
  2. 稀疏性:大多数维度都是 0,只有一个维度是 1,这导致向量非常稀疏。
  3. 缺乏语义信息:one-hot 向量无法捕捉单词之间的语义关系,如“国王”与“王后”之间的关系。

Embedding 方法通过学习一个低维的、连续的向量表示来解决这些问题。每个单词或符号都被表示为一个实数向量,这些向量在训练过程中被优化,以捕捉单词之间的语义和语法关系。

3 Embedding 的实现

在深度学习模型(如 Transformer)中,embedding 通常通过一个可训练的查找表实现。查找表的每一行对应一个词汇表中的单词,行中的值是该单词的嵌入向量。这些嵌入向量在模型训练过程中不断调整,以优化模型的性能。

具体步骤如下:

  1. 初始化:将每个单词初始化为一个随机的或预训练的向量。
  2. 训练:在训练过程中,模型根据任务目标不断调整这些向量,使得它们能够更好地表示单词的语义和语法信息。
  3. 使用:训练完成后,这些向量就可以用于各种 NLP 任务,如文本分类、情感分析、机器翻译等。

4 例子

假设我们有一个简单的词汇表:[“猫”, “狗”, “鱼”]。通过 embedding 层,这些单词会被转换为低维的向量,如:

  • “猫” -> [0.2, -1.3, 0.5]
  • “狗” -> [0.3, -1.2, 0.4]
  • “鱼” -> [-0.5, 0.8, -0.1]

这些向量的维度通常比原始 one-hot 向量的维度小得多(如 300 维,而不是数万维),并且这些向量可以捕捉到单词之间的语义相似性。例如,“猫”与“狗”的向量可能比较接近,而“鱼”的向量则相对远一些。

5 实例:机器翻译

神经机器翻译(Neural Machine Translation, NMT)是一种基于深度学习技术的机器翻译方法。与传统的统计机器翻译(Statistical Machine Translation, SMT)不同,NMT 使用神经网络模型来直接建模源语言到目标语言之间的翻译过程。下图是Encoder编码的过程:

截屏2024-07-09 10.30.50

Note:

  1. 在翻译的时候,我们需要对词进行Embedding,将其变成一个连续的向量表达.
  2. v i v_i vi表示每个输入的词,通过embedding变成向量 s i s_i si,方便后续的处理, W W W是embedding过程中可学习的参数矩阵.
  3. 得到 s i s_i si后,我们就可以按照前面介绍的方法进行Encoding.

Decoder的过程如下图所示:

截屏2024-07-09 10.33.31

Note:

  1. z i − 1 \mathbf{z}_{i-1} zi1为上一个节点的隐藏值, u i u_i ui为上一个节点的输出;
  2. 用Softmax来得到预测的每个词的概率,概率最大的作为当前预测词.

6 总结

Embedding 是一种将离散的输入数据转换为连续的、低维向量表示的方法,广泛应用于自然语言处理任务中。它能够有效地捕捉单词之间的语义和语法关系,提高模型的处理能力和表现。在 Transformer 等深度学习模型中,embedding 层是关键组成部分,负责将输入序列转换为模型可以处理的向量形式。

参考资料

  1. 深度学习500问
  2. 邱锡鹏,神经网络与深度学习,机械工业出版社,https://nndl.github.io/, 2020.

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

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

相关文章

电脑文件误删除如何恢复?Top12电脑数据恢复软件汇总合集!(图文详解)

电脑文件误删除如何恢复?在日常使用电脑过程中,我们经常会遇到意外删除文件的情况。可能是因为按错了按键、误操作了鼠标,或者意外格式化了存储设备。这些情况都可能导致重要的文件不小心被删除。但是不用担心,有许多专业的数据恢…

昇思25天学习打卡营第10天|NLP-RNN实现情感分类

打卡 目录 打卡 任务说明 流程 数据准备与加载 加载预训练词向量(分词) 数据集预处理 模型构建 Embedding RNN(循环神经网络) LSTM 全连接层 损失函数与优化器 训练逻辑 评估指标和逻辑 模型训练与保存 模型加载与测试 自定义输入测试 …

高频面试题基本总结回顾4(含笔试高频算法整理)

目录 一、基本面试流程回顾 二、基本高频算法题展示 三、基本面试题总结回顾 (一)Java高频面试题整理 (二)JVM相关面试问题整理 (三)MySQL相关面试问题整理 (四)Redis相关面试…

Python从0到100(三十九):数据提取之正则(文末免费送书)

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

Qt|QTreewidget类下函数qt助手详解说明示例(二)

上篇:Qt|QTreewidget类下函数qt助手详解说明示例(一) 该系列持续更新,喜欢请一键三连,一起学习进步,升职加薪,感谢各位大佬。 QT5.14.2 参考官方QT助手 Kimi辅助说明 文章目录 insertTopLevelI…

服务器数据恢复—2块硬盘离线且热备盘未完全激活的raid5数据恢复案例

服务器存储数据恢复环境: 北京某企业一台EMC FCAX-4存储上搭建一组由12块成员盘的raid5磁盘阵列,其中包括2块热备盘。 服务器存储故障: raid5阵列中两块硬盘离线,热备盘只有一块成功激活,raid瘫痪,上层LUN…

记录些Spring+题集(1)

接口防刷机制 接口被刷指的是同一接口被频繁调用,可能是由于以下原因导致: 恶意攻击:攻击者利用自动化脚本或工具对接口进行大量请求,以消耗系统资源、拖慢系统响应速度或达到其他恶意目的。误操作或程序错误:某些情…

防火墙小试——部分(书接上回)NAT

toop接上回 1.实验拓扑及要求 前情回顾 DMZ区内的服务器,办公区仅能在办公时间内(9:00 - 18:00)可以访问,生产区的设备全天可以访问. 生产区不允许访问互联网,办公区和游客区允许访问互联网 …

全球DeepFake攻防挑战赛DataWhale AI 夏令营——图像赛道

全球DeepFake攻防挑战赛&DataWhale AI 夏令营——图像赛道 赛题背景 随着人工智能技术的迅猛发展,深度伪造技术(Deepfake)正成为数字世界中的一把双刃剑。这项技术不仅为创意内容的生成提供了新的可能性,同时也对数字安全构…

两个视频怎么剪辑成一个视频?3个方法分享

两个视频怎么剪辑成一个视频?将两个视频剪辑成一个视频,是现代数字内容创作中的高频需求,它不仅简化了素材管理,还能通过创意剪辑提升作品连贯性与表现力。通过精心编排,两个视频片段可以无缝融合,讲述更完…

PLC电工实操题库—匠心整理—高分资源—即刻下载!

1.编制用PLC控制的车辆出入库管理控制程序 答: 传感器布置: 显示电路: 说明: 1.光传感器的接收光被遮断时定义为“有信号”;2.传感器1#有信号时启动增计数逻辑:3.传感器2#有信号时启动减计数逻辑:4.传感器1#完成脉冲同时2#有信…

【深度学习】PyTorch框架(2):激活函数

1.引言 在文中,我们将深入探讨流行的激活函数,并分析它们在神经网络优化特性中的作用。激活函数在深度学习模型中扮演着至关重要的角色,因为它们为网络引入了非线性特性。尽管文献中描述了众多的激活函数,但它们并非一视同仁&…

220v降压5v用几k电阻?

# 220V降压至5V的电阻选择与AH8652和AH8696芯片的应用 在电子电路设计中,将高电压转换为低电压是常见的需求。例如,将220V交流电(AC)降压至5V直流电(DC)用于低功耗设备。这通常通过使用降压转换器&#xf…

C判断一个点在三角形上

背景 鼠标操作时,经常要判断是否命中显示控件,特开发此算法快速判断。 原理 三角形三等分点定理是指在任意三角形ABC中,可以找到三个点D、E和F,使得线段AD、BE和CF均等分三角形ABC。 这意味着三个等分点分别位于三个边界上&…

Golang中init()函数初始化顺序

Q24.init()函数初始化顺序 init() 函数是用于程序执行前做包的初始化的函数,比如初始化包里的变量等一个包可以出线多个 init() 函数,一个源文件也可以包含多个 init() 函数同一个包中多个 init() 函数的执行顺序没有明确定义,但是不同包的init函数是根…

线程的复习

目录 大纲Java中的线程概念创建线程的方法线程的生命周期线程的同步和通信线程的优先级和调度线程的中断 案例 大纲 Java中的线程概念 在Java中,线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中实际运作的部分。一个…

网络配置命令

文章目录 一、查看网络接口信息 ifconfig1.1 网络接口名称1.2 使用 ifconfig 查看网络接口信息1.2.1 输出示例1.2.2 输出解释 1.3 查看特定网络接口信息1.3.1 输出示例 1.4 查看所有网络接口信息1.5 特殊网络接口 二、修改网络配置文件2.1 配置文件示例2.2 使配置生效2.3 关闭 …

图——图的遍历(DFS与BFS)

前面的文章中我们学习了图的基本概念和存储结构,大家可以通过下面的链接学习: 图的定义和基本术语 图的类型定义和存储结构 这篇文章就来学习一下图的重要章节——图的遍历。 目录 一,图的遍历定义: 二,深度优先…

应用实践之基于MindNLP+MusicGen生成自己的个性化音乐

前言 MusicGen是基于单个语言模型(LM)的音乐生成模型,使用文本描述或音频提示生成高质量的音乐样本。它基于Transformer结构,包括文本编码器模型和音频压缩模型,以及一个解码器来预测离散的隐形状态音频token。与传统…

uni-data-select 插件配置接收字段,更改默认的text,value

当后台返回的数据源格式不是如下value,text字段时,需要自定义字段配置 range: [{ value: 0, text: "篮球" },{ value: 1, text: "足球" },{ value: 2, text: "游泳" },], 思路有两个, 思路一:前端遍历更改为…