Transformer 笔记 (CS224N-7)

news/2025/3/10 9:16:29/文章来源:https://www.cnblogs.com/mianmaner/p/18760052

模型回顾

问题:RNN需要经过k步才能对远距离的单词进行交互,例如

image-20230913143154300

这里的was是chef的谓语,二者的关系十分紧密,但是使用线性顺序分析句子会导致如果was和chef的距离较远,它们会难以交互(因为梯度问题)

Self Attention

键值对注意力

(1)我们可以将注意力视为在键值存储中执行模糊查找,在一个key-value查找表中,查询会对所有keys进行软匹配,然后相应的value将乘以权重并求和

image-20230914123856025

(左边是强匹配,右边是软匹配)

(2)理解

①键值对Attention最核心的公式如下$$Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}}V)$$

如果这个公式很难理解,那么我们先从self-attention的原始形态入手,原始形态为 \(softmax(XX^T)X\)

②下面解读这个原始形态的公式:
\(XX^T\) 是输入矩阵\(X\)中每一个词向量与自己的内积,我们已经知道向量的内积表示向量的相关性,所以\(XX^T\)相当于一个类共现矩阵,再用softmax归一化成权重,那么便得到了一个输入矩阵\(X\)的相关度矩阵,可以将其理解为一个键值对表。将这个键值对表再\(X\)乘积,就实现了软匹配键值对表注意力

③接下来解释一下 \(softmax(\frac{QK^T}{\sqrt{d_k}}V)\)

\(Q,K,V\) 是什么? \(XW^Q=Q,XW^K=K,XW^V=V\) ,可以看到它们其实就是调整后的\(X\),为什么我们不直接使用\(X\),因为调整矩阵\(W\)是可以训练的,起到一个缓冲的效果

\(\sqrt{d_k}\) 的意义在于,假设 \(Q,K\) 里的元素的均值为0,方差为1,那么 \(A^T=Q^TK\) 中元素的均值为0,方差为d。当d变得很大时,\(A\)中的元素的方差也会变得很大,如果\(A\)中的元素方差很大,那么 \(softmax(A)\) 的分布会趋于陡峭(分布的方差大,分布集中在绝对值大的区域)。因此\(A\)中每一个元素除以 \(\sqrt{d_k}\) 后,方差又变为1。这使得 \(softmax(A)\) 的分布“陡峭”程度与d解耦,从而使得训练过程中梯度值保持稳定(详见后续 缩放点积)

(3)问题与解决

①如何加入考虑序列顺序:由于自我注意不是建立在有序信息中的,我们需要在键、查询和值中对句子的顺序进行编码

我们将每个序列索引表示为向量\(p_i\),然后将位置向量添加到我们的输入中 \(\widetilde x_i=x_i+p_i\)

  • 正弦曲线的位置向量:连接不同周期的正弦函数成为向量
    (随着周期开始可以推断出更长的序列,但是不能学习,不能外推)
  • 从头学习的位置向量:学习一个矩阵\(p\),让每一个位置向量\(p_i\)为该矩阵的一列
    (具有灵活性,每个位置都需要学习以适应数据,绝对不能外推到输入序列以外,大多数系统都使用此方法)

②如何加入非线性(self-attention深度学习的输出结果是线性的,只是加权平均数)

在自注意力机制中加入非线性:添加一个前馈网络来对每个输出向量进行后处理(可以提供更多的非线性和学习能力)

\[m_i=MLP(output_i)=W_2*ReLU(W_1output_i+b_1)+b_2 \]

③如何防止窥探未来(Attention Mask):(因为Transformer在训练时是不应该提前看到后面的信息的,这属于作弊,作弊会导致用“你好世界上的人”训练出来的模型在输入“你好”时可能不会生成“世界上的人 ”)通过将注意力得分设置为 \(-\infty\) 来掩盖对未来单词的注意力

image-20230916191845675

(5)总结:self-attention需要位置表示、非线性和掩蔽未来

image-20230916193038886

右边的流程图即为self-attention的全过程

Transformer模型

Multi-head Self Attention

(1)为什么要使用multi-head self-attention

模型在对当前位置的信息进行编码时,会过度的将注意力集中于自身的位置(虽然这符合常识)而可能忽略了其它位置,因为当文本很长时,自身的权重过高会导致分配给其他位置的权重较小,可能会存在某些位置权重矩接近于0的情况(即被忽略),这是我们不想看到的

(2)主要思路

让我们回忆一下这个公式

\[output_l=softmax(XQ_lK_l^TX^T)XV_l \]

我们将通过多个Q、K、V矩阵定义多个注意力头 ,每个注意力头都独立的进行注意力感应,这里我们定义 \(Q_l,K_l,V_l \in R^{d \times\frac{d}{h}}\)\(R^{m\times n}\) 表示一个\(m \times n\)的矩阵,h是注意力头的数量,\(l\)的范围从1到h)

最后再将h个输出结果合并,即可得到一个\(d\times d\)的输出矩阵

Scaled Dot Product

(1)为什么要使用点积缩放

当维数d变得很大时,向量的点积往往会变得非常大,所以我们需要将attention scores除以注意力头的数量,即d/h

\[output_l=softmax(\frac{XQ_lK_l^TX^T}{\sqrt{d/h}})XV_l \]

Encoder-Decoder

(1)残差连接和层规一化,通常被一起作为"Add & Norm"

(2)残差连接(即残差网络思想):可以帮助模型训练的更好

image-20230917141946899

(3)层规一化:可以帮助模型训练的更快

通过归一化,减少隐藏向量值的无信息变化,我们得到

微信图片_20230917143010

(5)The Transformer Decoder

image-20230917143741073

  • Transformer解码器由一堆Transformer解码器块组成
  • 每个解码器块包括:
    ①self-attention
    ②add&norm
    ③feed-forward
    ④add&norm

(6)The Transformer Encoder

image-20230917144021835

与解码器不同的是,编码器将去除了self-attention中的mask机制

(7)总结

image-20230917145254816

回顾一下,在机器翻译中我们用双向模型处理源句子,并用单向模型生成目标。在Transformer中的解码器中,我们可以进行修改,对编码器的输出进行交叉关注,于是便得到了右侧的模型(是我们Transformer的完整模型)

模型中左边为编码器,右边为解码器,解码器中第一个Masked Multi-Head Attention是直接根据输入的X矩阵的到Q、K、V,而第二个Multi-Head Attention是根据编码器的输出得到K、V,但Q仍然是由编码器的输出得到

缺点与问题

(1)自我关注的二次运算会导致计算的增长 \(O(n^2d)\)

  • 相关研究:Linformer
    关键思想:将序列长度维度映射到值、键的低维空间

(2)简单的绝对指数使我们能做的做好的表示位置的指数吗

推荐一篇很通俗易懂的讲解https://blog.csdn.net/Tink1995/article/details/105080033

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

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

相关文章

Easyexcel(7-自定义样式)

EasyExcel 提供简便的自定义样式功能,用户可以轻松定制Excel表格样式。通过Style类,可以设置字体、边框、背景颜色等属性,同时支持单元格合并和格式化操作。通过配置WriteHandler,可以实现更多样式定制,满足不同业务需求,让数据展示更直观。注解 @ContentStyle 用于设置内…

预训练笔记 (CS224N-8)

子词模型 前置知识 (1)词法知识介绍语音学是音流无争议的物理学 语音体系假定了一组或多组独特的、分类的单元(音素)传统上,词素是最小的语义单位(例如\(ate,ly,able\)这种),但如今我们需要讨论比单词粒度更细的模型以处理大量的开放词汇(巨大的、无限的单词空间) 例如…

团队项目:新建文件夹(1)团队成员介绍

项目 内容这个作业属于哪个课程 2025年春季软件工程(罗杰、任健)这个作业的要求在哪里 [T.1] 团队项目:团队成员介绍我在这个课程的目标是 培养团队合作精神,开发功能完善的软件这个作业在哪个具体方面帮助我实现目标 团队协作,软件开发理论基础团队介绍 新建文件夹(1)队由…

LSTM 和机器翻译 (CS224N-5)

LSTM (1)LSTM(Long Short-Term Memory RNNs)是Hochreiter和Schmidhuber在1997年提出的一种RNN,用于解决消失梯度问题 (2)在步骤t中,这里有一个隐藏单元\(h^{(t)}\)和一个记忆单元\(c^{(t)}\)它们均为长度为n的向量记忆单元用来存储长期信息LSTM可以从记忆单元中读取、消除和…

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

语言模型的解码△:在讲义中这部分内容是神经机器翻译NMT中,我认为这个适用于所有语言模型所以就单列出来了(1)贪心解码:每一步都取最可能的单词,用前一步的输出作为下一步的输入(存在问题:有一个预测偏差,会导致后面的生成不可挽回,最终结果不尽人意) (2)穷举解码:顾…

语言模型和 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中…