解码和 Attention 机制笔记 (CS224N-6)

news/2025/3/10 9:20:54/文章来源:https://www.cnblogs.com/mianmaner/p/18760050

语言模型的解码

△:在讲义中这部分内容是神经机器翻译NMT中,我认为这个适用于所有语言模型所以就单列出来了

(1)贪心解码:每一步都取最可能的单词,用前一步的输出作为下一步的输入(存在问题:有一个预测偏差,会导致后面的生成不可挽回,最终结果不尽人意)

(2)穷举解码:顾名思义,尝试计算每一个可能的序列y,取概率最大的一个(显而易见,复杂性太高)

(3)波束搜索解码:在解码器的每一步上,跟踪k个最可能的假设,假设的得分是其对数概率,我们搜索得分较高的假设,跟踪每一步的前k个假设

Attention机制

seq2seq with attention

(1)序列-序列模型(又叫seq2seq模型或Encoder-Decoder模型):一个神经网络接受输入并产生神经表示(编码),另一个网络基于该神经表示产生输出(解码)

(CNN、RNN、LSTM、AE等其实都可以归为seq2seq模型)

注意力机制最早用在seq2seq模型上,这里我们也以seq2seq模型中的注意力机制来分析

(2)核心思想:在解码器的每一步上,使用与编码器的直接连接来关注源序列的特定部分

(3)理解

在文本处理领域,一类常见的任务就是由一个句子(Source)生成另一个句子(Target)

\[Source=(x_1,x_2,\cdots,x_m) \]

\[Target=(y_1,y_2,\cdots,y_m) \]

\[C=F(x_1,x_2,\cdots,x_m) \]

Source经过Encoder生成中间的语义编码C,C经过Decoder时,先根据\(C\)生成 \(y_1\) ,再根据 \(C,y_1\) 生成 \(y_2\) ,以此类推

传统的循环神经网络中,\(y_1,y_2,y_3\)的计算都是基于同一个C。深入思考一下,发现这可能并不是最好的方案,因为 Source 中不同单词对 \(y_1,y_2,y_3\) 的影响是不同的,所以,很自然地就有了如下思路:对 \(y_1\) 使用\(C_1\),对 \(y_2\) 使用 \(C_2\cdots\)

\[C_1=a_{11}f(x_1)+a_{12}f(x_2)+a_{13}f(x_3)$$ $$C_2=a_{21}f(x_1)+a_{22}f(x_2)+a_{23}f(x_3) \]

\[C_3=a_{31}f(x_1)+a_{32}f(x_2)+a_{33}f(x_3) \]

权重向量\(a_t\)即为下图中的Attention Output,接下来会讲具体是怎么计算的

image-20230913094540714

(4)对步骤的具体计算

在第t个时间步长(生成第t个单词时)下,会进行如下运算:

编码器的隐藏层: \(h_1,\cdots,h_N\)
解码器的隐藏层: \(s_t\)
那么我们的注意力得分 \(e^t=[s_t^Th_1,\cdots,s_t^Th_N]\)
那么我们的注意力分布 \(a^t=softmax(e^t)\)
那么我们的注意力输出 \(a_t=\displaystyle\sum_{i=1}^Na_i^th_i\) (此即为权重向量)

最后将注意力输出与解码器的隐藏层连接起来,按照无注意力的seq2seq模型处理

(5)意义

①注意力机制显著提高了NMT的性能
②提供了一个更加“拟人化”的MT模型
③解决了瓶颈问题
④有助于消除梯度问题
⑤提供了可解释性

attention variants

(1)种类:

①Basic dot-product attention: \(e_i=s^Th_i\)
②Multiplicative attention: \(e_i=s^TWh_i\)
③Reduced-rank multiplicative attention: \(e_i=s^T(U^V)h_i=(Us)^T(Vh_i)\)
④Additive attention: \(e^T=v^Ttanh(W_1h_i+W_2s)\)

(2)注意力机制是一种通用的学习技巧,更通用定义为:给定一组向量值和一个向量查询,注意力是一种根据查询计算值的加权和的技术。

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

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

相关文章

语言模型和 RNN 笔记 (CS224N-4)

语言模型定义 (1)语言模型任务是根据给定的单词序列计算下一个单词的概率分布,完成这样的任务的系统就被称作语言模型 (2)也可以认为语言模型是一个为文本分配概率的系统,例如文本 \(x^{(1)},\cdots,x^{(T)}\) 的概率是n-gram语言模型 (1)一个n-gram是由n个连续单词组成的一块…

Java 线程池 ThreadPoolExecutor 的状态控制变量 ctrl

如下是源代码。线程池的主要控制状态 ctl 是一个原子整数,它打包了两个概念字段:workerCount:表示当前有效运行的线程数。 runState:表示线程池的状态(如是否正在运行、关闭等)。为了将这两个字段打包成一个 int,我们将 workerCount 限制为 (2^{29} - 1)(约5亿),而不…

go 方法和函数的区别

图片中的内容总结了Go语言中方法和函数的区别,主要分为三个方面:调用方式不同:函数的调用方式:函数名(实参列表) 方法的调用方式:变量.方法名(实参列表)普通函数的接收者类型限制:对于普通函数,如果接收者是值类型,则不能将指针类型的数据直接传递给它;反之亦然。方法…

德里克昆什肯《量子战争》目录

机翻未校对是机翻的,而且没有经过校对,只能作为SFW编辑部的懒狗开工前的替代品 第一章 第二章 第三章 Chap 4 Chap 5~6 Chap 7~8 Chap 9~10 Chap 11~14 Chap 15~18 Chap 19~22 Chap 23~26 Chap 27~30 Chap 31~34 Chap 35~38 Chap 39~42 Chap 43~46 Chap 47~50 Chap 51~61本文…

ios调试(safari)

一、打开ios safari开发者模式在手机设备的“设置”中找到“safari浏览器”,点击进入 在safari设置中,找到“高级”选项,点击进入 在高级设置页面中,找到“网页(web)检查器”选项,打开开关 二、使用mac的safari开发者模式进行调试将ios设备通过usb连接到电脑上 打开mac中…

粒子群算法改进--自动退出迭代循环

前言当粒子已经找到最佳位置后,再增加迭代次数只会浪费计算时间,那么我们能否设计一个策略,能够自动退出迭代呢?循环跳出策略(1)初始化最大迭代次数、计数器以及最大计数值(例如分别取100, 0, 20) (2)定义“函数变化量容忍度”,一般取非常小的正数; (3)在迭代的过…

粒子群算法改进--线性递减惯性权重

惯性权重回顾 惯性权重w体现的是粒子继承先前的速度的能力 Shi,Y最先将惯性权重w引入到粒子群算法中,并且分析指出一个较大的惯性权值有利于全局搜索一个较小的权值则更利于局部搜索线性递减惯性权重在搜索初期,增强全局搜索能力可以更大可能遍历解空间,避免陷入局部最优解 &…

粒子群算法改进--压缩因子法

前言概述 粒子速度更新公式如下: vid = wvid-1 + c1r1(pbestid-xid)+ c2r2(gbestd-xid) 在研究完粒子群算法中有关惯性权重的优化之后,我们把目光转向速度更新公式的后两项,根据之前所学可知:个体学习因子c1和社会学习因子c2决定了粒子本身经验信息和其他粒子的经验信息对粒…

Mybatis-Plus异常处理

返回结果为2 ,我从Controller层中写的返回是一个floor实体,到Mapper层中返回的也是floor实体,但是Mapper返回是2条数据。 把controller层的返回值改为List。

关于sqlserver空间占用问题(.bak文件占用)

sqlserver跑项目的时候很可能涉及到较大的数据量(一开始占我c盘70GB!!!然后删了,然后就出事儿了,二次安装恶心至极,需要二次安装的话建议看我的上一篇文章)先打开ssms(SQL Server Management Studio)并连接,然后右击服务器找到属性 点击数据库设置,建议!!!直接改…