深度学习架构Seq2Seq-添加并理解注意力机制(一)

第一章:人工智能之不同数据类型及其特点梳理
第二章:自然语言处理(NLP):文本向量化从文字到数字的原理
第三章:循环神经网络RNN:理解 RNN的工作机制与应用场景(附代码)
第四章:循环神经网络RNN、LSTM以及GRU 对比(附代码)
第五章:理解Seq2Seq的工作机制与应用场景中英互译(附代码)
第六章:深度学习架构Seq2Seq-添加并理解注意力机制(一)
第七章:深度学习架构Seq2Seq-添加并理解注意力机制(二)

本文主要是分析Seq2Seq 架构本身具有的缺点,并分析针对长序列输入时,导致信息丢失这一问题,造成这个问题的原因,以及针对这一问题,通过引入注意力机制,如何来解决这一问题。

一、Seq2Seq简介

Seq2Seq(Sequence to Sequence)模型是一种深度学习架构,主要用于处理输入和输出均为可变长度序列的任务,如机器翻译、文本摘要和语音识别等‌。其核心结构包含两部分,编码器(Encoder)‌和 解码器(Decoder)‌,如下图所示,输入是英文单词 ‘like’ 翻译成中文 ‘喜欢’
在这里插入图片描述

  • 编码器(Encoder)‌:通常由RNN、LSTM或GRU等循环神经网络构成,负责将输入序列逐步编码为一个固定长度的上下文向量(Context Vector),该向量综合了输入序列的整体语义信息‌。
  • 解码器(Decoder)‌:同样基于循环神经网络,接收编码器生成的上下文向量作为初始输入,逐步生成输出序列的每个元素。训练时常用“教师强制”(Teacher Forcing)方法,即将前一步的真实输出作为当前步的输入以提高稳定性‌。

在这里插入图片描述
Seq2Seq模型的特点在于处理变长序列时无需严格对齐输入与输出的长度,例如将中文句子翻译为英文时,输出长度可灵活变化‌。

二、普通 Seq2Seq 的局限性

普通 Seq2Seq 模型将输入序列压缩为 单一的上下文向量(Encoder 的最后一个隐藏状态,就是上图中的Context Vector),存在以下问题:

  1. 信息瓶颈:长序列输入时,单一向量难以保留所有细节,即整个输入序列被压缩成一个固定大小的向量上下文向量,可能导致信息丢失。
  2. 长距离依赖丢失:解码器无法灵活关注输入序列的不同部分。
  3. 速度慢:训练速度较慢且难以并行化。

在Seq2Seq模型中,编码器将整个输入序列压缩成一个固定大小的向量(即上下文向量或语义向量),然后解码器使用这个向量来生成输出序列。这种做法存在几个潜在的问题,尤其是当处理较长的输入序列时,可能会导致信息丢失。

输入序列太长,为什么会导致信息丢失?

  1. 固定维度限制:无论输入序列有多长,上下文向量的维度都是固定的。这意味着如果输入序列非常长,编码器需要将大量信息压缩到一个有限维度的空间里。这就像试图将一本书的内容压缩进一句话中一样,不可避免地会丢失一些细节和细微差别。

  2. 信息覆盖问题:对于某些复杂的任务,如长文本翻译或对话系统,源序列可能包含多个主题、观点或重要细节。由于上下文向量的容量有限,编码器可能无法有效地表示所有这些信息,从而导致关键信息被忽略或覆盖。

举例说明

假设我们有一个中文句子“我喜欢吃鱼,特别是新鲜的鲑鱼,它富含Omega-3脂肪酸,对心脏健康有益”,我们要将其翻译成英文。

  • 没有注意力机制的情况:编码器尝试将这句话的所有信息压缩成一个固定大小的向量。然而,这句话包含了多个部分的信息——个人偏好(喜欢)、食物类型(鱼)、具体种类(鲑鱼)、营养成分(Omega-3脂肪酸)以及健康益处(对心脏健康有益)。如果输入序列过长或者信息过于复杂,那么单一的上下文向量很可能无法承载这么多不同的信息点。结果,在解码阶段,解码器可能难以准确地再现原句的所有细节,可能会遗漏一些重要的内容,例如忘记提及“Omega-3脂肪酸”或是“对心脏健康有益”。

  • 有注意力机制的情况:在这种情况下,每当解码器准备生成下一个单词时,它不仅依赖于前一时刻的状态,还能够通过注意力机制直接访问输入序列的不同部分。这样,即使输入序列很长,解码器也能够根据当前生成的内容需求,选择性地关注最相关的信息。比如,在生成关于鲑鱼营养价值的部分时,它可以特别关注与“Omega-3脂肪酸”相关的输入部分;而在提到饮食喜好时,则可以更侧重于“我喜欢吃鱼”这部分的信息。因此,注意力机制大大提高了模型处理长距离依赖关系的能力,并且减少了信息丢失的可能性。

固定大小的上下文向量在处理长或复杂序列时面临信息丢失的风险,因为它们不能完全捕捉并保留原始输入序列中的全部信息。引入注意力机制是解决这一问题的有效方法之一。

三、注意力机制的核心思想

注意力机制 允许解码器在每个时间步动态关注输入序列的 相关部分,而非依赖单一向量。其核心流程如下:

  1. 编码器输出 所有时间步的隐藏状态(而非仅最后一步)。
  2. 解码时,计算解码器当前状态与所有编码器状态的 相似度,生成注意力权重。
  3. 根据权重 加权求和编码器状态,生成动态上下文向量。
  4. 将动态上下文向量与解码器输入结合,预测当前输出。
    在这里插入图片描述

四、实现步骤

4.1 编码器处理输入序列

  • 输入序列 X = ( x 1 , x 2 , … , x T ) \mathbf{X} = (x_1, x_2, \dots, x_T) X=(x1,x2,,xT)
  • 编码器输出:所有时间步的隐藏状态 { h 1 , h 2 , … , h T } \{h_1, h_2, \dots, h_T\} {h1,h2,,hT}

4.2 计算注意力权重

在解码器的第 t t t 步:

  • 解码器当前隐藏状态 s t − 1 s_{t-1} st1(上一步的隐藏状态)

  • 编码器所有隐藏状态 { h 1 , h 2 , … , h T } \{h_1, h_2, \dots, h_T\} {h1,h2,,hT}

  • 计算相似度(注意力分数):
    e t i = score ( s t − 1 , h i ) e_{ti} = \text{score}(s_{t-1}, h_i) eti=score(st1,hi)
    常用相似度计算方式:

    • 点积(Dot Product) e t i = s t − 1 ⊤ h i e_{ti} = s_{t-1}^\top h_i eti=st1hi
    • 加性(Additive) e t i = v ⊤ tanh ⁡ ( W s s t − 1 + W h h i ) e_{ti} = \mathbf{v}^\top \tanh(\mathbf{W}_s s_{t-1} + \mathbf{W}_h h_i) eti=vtanh(Wsst1+Whhi)
  • 归一化为权重
    α t i = exp ⁡ ( e t i ) ∑ j = 1 T exp ⁡ ( e t j ) \alpha_{ti} = \frac{\exp(e_{ti})}{\sum_{j=1}^T \exp(e_{tj})} αti=j=1Texp(etj)exp(eti)

4.3 生成动态上下文向量

c t = ∑ i = 1 T α t i h i \mathbf{c}_t = \sum_{i=1}^T \alpha_{ti} h_i ct=i=1Tαtihi

4.4 结合上下文向量生成输出

  • 拼接解码器状态与上下文向量
    s ~ t = tanh ⁡ ( W c [ s t − 1 ; c t ] + b c ) \tilde{s}_t = \tanh(\mathbf{W}_c [s_{t-1}; \mathbf{c}_t] + \mathbf{b}_c) s~t=tanh(Wc[st1;ct]+bc)
  • 预测输出概率分布
    p ( y t ∣ y < t , X ) = Softmax ( W o s ~ t + b o ) p(y_t | y_{<t}, \mathbf{X}) = \text{Softmax}(\mathbf{W}_o \tilde{s}_t + \mathbf{b}_o) p(yty<t,X)=Softmax(Wos~t+bo)

4.5 数学公式总结

对于解码器的第 t t t 步:
Attention Weights: α t i = Softmax ( score ( s t − 1 , h i ) ) Context Vector: c t = ∑ i = 1 T α t i h i Decoder Output: p ( y t ∣ y < t , X ) = Softmax ( W o ⋅ tanh ⁡ ( W c [ s t − 1 ; c t ] + b c ) ) \begin{aligned} \text{Attention Weights:} \quad & \alpha_{ti} = \text{Softmax}(\text{score}(s_{t-1}, h_i)) \\ \text{Context Vector:} \quad & \mathbf{c}_t = \sum_{i=1}^T \alpha_{ti} h_i \\ \text{Decoder Output:} \quad & p(y_t | y_{<t}, \mathbf{X}) = \text{Softmax}(W_o \cdot \tanh(W_c [s_{t-1}; \mathbf{c}_t] + b_c)) \end{aligned} Attention Weights:Context Vector:Decoder Output:αti=Softmax(score(st1,hi))ct=i=1Tαtihip(yty<t,X)=Softmax(Wotanh(Wc[st1;ct]+bc))

在这里插入图片描述

4.6 理解点积(Dot Product)

点积(Dot Product),也被称为内积(Inner Product),是向量之间的一种二元运算,在数学、物理学以及工程学中有着广泛的应用。
对于两个维数相同的向量 a = [ a 1 , a 2 , . . . , a n ] \mathbf{a} = [a_1, a_2, ..., a_n] a=[a1,a2,...,an] b = [ b 1 , b 2 , . . . , b n ] \mathbf{b} = [b_1, b_2, ..., b_n] b=[b1,b2,...,bn]
它们的点积定义为:
a ⋅ b = ∑ i = 1 n a i b i = a 1 b 1 + a 2 b 2 + . . . + a n b n \mathbf{a} \cdot \mathbf{b} = \sum_{i=1}^{n} a_i b_i = a_1b_1 + a_2b_2 + ... + a_nb_n ab=i=1naibi=a1b1+a2b2+...+anbn

即,两个向量的点积等于对应元素相乘后的和

几何解释

点积还有一个重要的几何意义,即两个向量的点积等于它们的模长乘积与它们之间夹角余弦值的乘积:

a ⋅ b = ∣ a ∣ ∣ b ∣ cos ⁡ θ \mathbf{a} \cdot \mathbf{b} = |\mathbf{a}| |\mathbf{b}| \cos{\theta} ab=a∣∣bcosθ

这里, ∣ a ∣ |\mathbf{a}| a ∣ b ∣ |\mathbf{b}| b 分别表示向量 a \mathbf{a} a b \mathbf{b} b 的长度(或称为模),而 θ \theta θ 是两向量之间的夹角。通过这个公式,我们可以看出点积可以用来计算两个向量之间的角度,或者判断它们是否正交(如果点积为零,则两向量垂直)。

在机器学习和深度学习领域,点积常用于衡量向量间的相似度。例如,在注意力机制中,它被用来计算查询向量与键向量之间的匹配程度。

4.7 理解加性(Additive)

在深度学习和自然语言处理的上下文中,“加性”(Additive)通常指的是“加性注意力机制”,这是一种用于序列到序列(Seq2Seq)模型中的注意力计算方法。与点积注意力(Dot-Product Attention)不同,加性注意力使用了一个小型的前馈神经网络来计算输入序列中每个位置的注意力分数。

加性注意力机制的工作原理

其主要思想是通过一个小型的两层前馈神经网络来计算注意力权重,这个过程可以分解为以下几个步骤:

  1. 输入准备:对于解码器中的每一个时间步 t t t,我们考虑编码器的所有隐藏状态 { h 1 , h 2 , . . . , h n } \{h_1, h_2, ..., h_n\} {h1,h2,...,hn} 和当前解码器的隐藏状态 s t − 1 s_{t-1} st1

  2. 能量计算:将编码器的每个隐藏状态 h i h_i hi 和解码器隐藏状态 s t − 1 s_{t-1} st1 作为输入,传递给一个小的前馈神经网络。这个网络通常包含一层或多层,并使用tanh作为激活函数。具体来说,计算能量值 e t i e_{ti} eti 的公式如下:

    e t i = v T tanh ⁡ ( W [ h i ; s t − 1 ] ) e_{ti} = v^T \tanh(W[h_i; s_{t-1}]) eti=vTtanh(W[hi;st1])

    其中, W W W 是权重矩阵, v v v 是输出向量, [ h i ; s t − 1 ] [h_i; s_{t-1}] [hi;st1] 表示向量拼接操作。

  3. 注意力权重计算:对上述得到的能量值进行Softmax变换,以确保所有注意力权重之和为1。即,
    α t i = exp ⁡ ( e t i ) ∑ j exp ⁡ ( e t j ) \alpha_{ti} = \frac{\exp(e_{ti})}{\sum_j \exp(e_{tj})} αti=jexp(etj)exp(eti)

  4. 上下文向量生成:根据计算出的注意力权重对编码器的所有隐藏状态进行加权求和,得到上下文向量 c t c_t ct

    c t = ∑ i α t i h i c_t = \sum_i \alpha_{ti} h_i ct=iαtihi

  5. 结合上下文向量与解码器状态:最后,上下文向量 c t c_t ct 被用来辅助解码器预测下一个词,通常会与当前解码器的状态结合起来。

加性注意力 vs 点积注意力

  • 复杂度:加性注意力通常比点积注意力更复杂,因为它需要额外的参数和非线性变换(如tanh激活函数)。然而,它也提供了更大的灵活性来捕捉输入之间的复杂关系。
  • 适用场景:点积注意力在高维度空间中更加高效,因为它的计算可以直接利用矩阵乘法加速;而加性注意力可能更适合于那些需要更多非线性处理的任务或数据集。

下一篇《深度学习架构Seq2Seq-添加并理解注意力机制(二)》使用中文翻译成英文的案例,“我喜欢吃鱼” 翻译为 “I like eating fish” 的简单例子,通过具体的数字,模拟模型推理过程,来辅助解释上面这一套公式。

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

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

相关文章

基于springboot的丢失儿童的基因比对系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 本丢失儿童的基因比对系统采用B/S架构&#xff0c;数据库是MySQL&#xff0c;网站的搭建与开发采用了先进的Java进行编写&#xff0c;使用了Spring Boot框架。该系统从两个对象&#xff1a;由管理员和用户来对系统进行设计构建。用户主要功能包括&#xff1a;用户注册、登…

Mysql面试篇笔记:

优化&#xff1a; 1.如何定位慢查询&#xff1a; 首先压测接口&#xff0c;查看那个接口比较慢&#xff0c;可以通过多种工具&#xff0c;比如Skywaking 可以查看各个接口响应时间&#xff0c;查看接口最慢&#xff0c;然后去跟踪接口&#xff0c;查看详细信息&#…

嵌入式产品级-超小尺寸游戏机(从0到1 硬件-软件-外壳)

Ultra-small size gaming console。 超小尺寸游戏机-Pico This embedded product is mainly based on miniaturization, followed by his game functions are also very complete, for all kinds of games can be played, and there will be relevant illustrations in the fo…

计算机网络-实验四子网划分

三、实验内容及步骤 1.要求 【题目】某单位申请了⼀个 C 类⽹络&#xff0c;单位内部有3个部门&#xff0c;各部门约50台主机&#xff0c;需要划分为3个⼦⽹&#xff0c;各部门接⼊到汇聚交换机&#xff0c;在汇聚层进⾏路由连通。假定申请到的C类网络为200.200.200.0。 2.实…

deepseek+mermaid【自动生成流程图】

成果&#xff1a; 第一步打开deepseek官网(或百度版&#xff08;更快一点&#xff09;)&#xff1a; 百度AI搜索 - 办公学习一站解决 第二步&#xff0c;生成对应的Mermaid流程图&#xff1a; 丢给deepseek代码&#xff0c;或题目要求 生成mermaid代码 第三步将代码复制到me…

SQL Server2022版+SSMS安装教程(保姆级)

SQL Server2022版SSMS安装教程&#xff08;保姆级&#xff09; 一&#xff0c;安装SQL Server数据库 1.下载安装包 &#xff08;1&#xff09;百度网盘下载安装包 链接&#xff1a;https://pan.baidu.com/s/1A-WRVES4EGv8EVArGNF2QQpwd6uvs 提取码&#xff1a;6uvs &#…

Pany-v2:LFI漏洞探测与敏感文件(私钥窃取/其他)自动探测工具

地址:https://github.com/MartinxMax/pany 关于Pany-v2 Pany-v2 是一款 LFI&#xff08;本地文件包含&#xff09;漏洞探测工具&#xff0c;具备自动识别敏感文件的能力。它能够利用 LFI 漏洞检测并提取 id_rsa 私钥、系统密码文件以及其他可能导致安全风险的敏感信息。该工具…

【音视频】视频基本概念

一、视频的基本概念 1.1 视频码率&#xff08;kb/s&#xff09; 视频码率是指视频文件在单位时间内使用的数据流量&#xff0c;也叫码流率。码率越大&#xff0c;说明单位时间内取样率越大&#xff0c;数据流进度也就越高 1.2 视频帧率&#xff08;fps&#xff09; 视频帧率…

三维数据可视化与表面重建:Marching Cubes算法的原理与应用

1. 引言 随着现代医学影像技术的飞速发展&#xff0c;三维数据的可视化与重建已成为医学研究、临床诊断和手术规划的重要工具。在众多三维重建算法中&#xff0c;Marching Cubes算法因其高效、稳定的特性成为从离散数据场中提取等值面的经典方法。本报告将深入探讨Marching Cu…

探秘基带算法:从原理到5G时代的通信变革【七】FFT/DFT

文章目录 2.6 FFT/DFT2.6.1 离散傅里叶变换&#xff08;DFT&#xff09;2.6.2 快速傅里叶变换&#xff08;FFT&#xff09;2.6.3 方法论与分类体系2.6.4 优缺点与应用2.6.5 实现细节 本博客为系列博客&#xff0c;主要讲解各基带算法的原理与应用&#xff0c;包括&#xff1a;v…

水仙花数(华为OD)

题目描述 所谓水仙花数&#xff0c;是指一个n位的正整数&#xff0c;其各位数字的n次方和等于该数本身。 例如153是水仙花数&#xff0c;153是一个3位数&#xff0c;并且153 13 53 33。 输入描述 第一行输入一个整数n&#xff0c;表示一个n位的正整数。n在3到7之间&#x…

《Python实战进阶》No 7: 一个AI大模型聊天室的构建-基于WebSocket 实时通信开发实战

第7集&#xff1a; 一个AI大模型聊天室的构建-基于WebSocket 实时通信开发实战 在现代 Web 开发中&#xff0c;实时通信已经成为许多应用的核心需求。无论是聊天应用、股票行情推送&#xff0c;还是多人协作工具&#xff0c;WebSocket 都是实现高效实时通信的最佳选择之一。本…

极简Redis速成学习

redis是什么&#xff1f; 是一种以键值对形式存储的数据库&#xff0c;特点是基于内存存储&#xff0c;读写快&#xff0c;性能高&#xff0c;常用于缓存、消息队列等应用情境 redis的五种数据类型是什么&#xff1f; 分别是String、Hash、List、Set和Zset&#xff08;操作命…

ADC采集模块与MCU内置ADC性能对比

2.5V基准电压源&#xff1a; 1. 精度更高&#xff0c;误差更小 ADR03B 具有 0.1% 或更小的初始精度&#xff0c;而 电阻分压方式的误差主要来自电阻的容差&#xff08;通常 1% 或 0.5%&#xff09;。长期稳定性更好&#xff0c;分压电阻容易受到温度、老化的影响&#xff0c;长…

python数据容器切片

从一个序列中取出一个子序列 序列[起始位置:结束位置:步长] 起始位置和结束位置 省略,表示从头取到尾 步长省略表示1 步长负数,表示从后往前取 步长-1 等同于将序列反转了

【网络安全 | 渗透测试】GraphQL精讲一:基础知识

未经许可,不得转载, 文章目录 GraphQL 定义GraphQL 工作原理GraphQL 模式GraphQL 查询GraphQL 变更(Mutations)查询(Queries)和变更(Mutations)的组成部分字段(Fields)参数(Arguments)变量别名(Aliases)片段(Fragments)订阅(Subscriptions)自省(Introspecti…

005-Docker 安装 Redis

Docker 安装 Redis 1.从镜像官网拉取Redis镜像2.创建实例并启动3.测试连接4.设置开机启动 1.从镜像官网拉取Redis镜像 镜像官网地址&#xff1a;https://hub.docker.com执行命令 -- 拉取最新的版本 docker pull redis查看镜像 docker images2.创建实例并启动 先创建好需要的…

【星云 Orbit • STM32F4】04.一触即发:GPIO 外部中断

【星云 Orbit- • STM32F4】04. 一触即发&#xff1a;外部中断控制 摘要 本文详细介绍了如何使用STM32F407微控制器的HAL库实现外部中断功能。通过配置GPIO引脚作为外部中断源&#xff0c;并在中断回调函数中处理按键事件&#xff0c;实现了按键控制LED状态翻转的功能。本文旨…

探索Elasticsearch:索引的CRUD

在企业环境中&#xff0c;Elasticsearch的索引CRUD&#xff08;创建Create、读取Read、更新Update、删除Delete&#xff09;操作是非常基础且频繁使用的功能。这些操作对于管理和维护数据至关重要&#xff0c;尤其是在处理大规模数据集和需要实时搜索与分析的应用场景中。 目录…

React antd的datePicker自定义,封装成组件

一、antd的datePicker自定义 需求&#xff1a;用户需要为日期选择器的每个日期单元格添加一个Tooltip&#xff0c;当鼠标悬停时显示日期、可兑换流量余额和本公会可兑流量。这些数据需要从接口获取。我需要结合之前的代码&#xff0c;确保Tooltip正确显示&#xff0c;并且数据…