欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 从零开始设计Transformer模型(1/2)——剥离RNN,保留Attention

从零开始设计Transformer模型(1/2)——剥离RNN,保留Attention

2025/4/4 10:40:54 来源:https://blog.csdn.net/yjc060228/article/details/146932658  浏览:    关键词:从零开始设计Transformer模型(1/2)——剥离RNN,保留Attention

声明:

       本文基于哔站博主【Shusenwang】的视频课程【RNN模型及NLP应用】,结合自身的理解所作,旨在帮助大家了解学习NLP自然语言处理基础知识。配合着视频课程学习效果更佳。

材料来源:【Shusenwang】的视频课程【RNN模型及NLP应用】

视频链接:Transformer模型(1/2): 剥离RNN,保留Attention_哔哩哔哩_bilibili


一、学习目标

1.本节课我们来学习剥离RNN的Attention和Self-Attention

2.掌握Attention和Self-Attention的基本原理

3.熟悉并掌握Attention和Self-Attention的底层逻辑


 Transformer模型基本框架:

 Transformer的效果非常惊人,可以完爆所有的RNN+Attention

二、剥离RNN,用Attention打一个深度神经网络

(1)搭建Attention层(for Seq2Seq Model)

【前言】

之前的课程里我们用Attention来改进Sequence to Sequence模型,Sequence to Sequence有一个Encoder层和一个Decoder层。

Encoder的输入是m个向量,Encoder将这些信息压缩到状态向量h中,最后一个hm是对所有信息的概括。

Decoder是一个文本生成器,依次生成状态S,然后根据状态S生成新的单词X',新的单词X‘将作为下一个输入用来生成新的状态向量h。

如果用Attention的话还需要计算contect vector(C),要计算Attention的话需要先计算每一个S对应的权重α。就是计算出每个状态S向量与所有的h向量的相关性。

我们具体来看一下权重α是怎么计算出来的:

α计算过程如下:

这里引入三个向量:

图中的q为Query,用来匹配key值

图中的k为key,用来被Query匹配

图中的Value,是用来被进行加权平均的

这一步我们知道α就是K与Q的匹配程度,匹配程度越高则权重越大。

Wq、Wk、Wv这三个参数矩阵都需要从训练数据中学习

 接下来我们整合一下刚刚讲述的计算过程:

①将Decoder第j个状态向量Sj与Wq相乘得到Query向量qj.

②将Encoder中全部的状态向量h与Wk相乘得到key,也就是将h映射到Key向量上

③将Encoder中全部的状态向量h与Wv相乘得到Value,每一个Value对应一个h

④用softmax函数对比K矩阵和Qj计算权重α

⑤计算加权平均Cj:将每一个α与v相乘求和得到Cj

【提示】这种α和C的计算方法就是Transformer里面用的

(1)搭一个Aentioin层用于Seq2Seq模型

【第一步】计算K、q、V

【第二步】计算权重α

将计算q1与每一个key值的相关性得到α:1(意思是第一个α矩阵,不是第一个α值

然后计算contect vector(C)


以此类推:

......

......

可以用同样的方法计算出contect vector(C)。每一个C对应一个X'。

输出矩阵C=[C:1,C:2,C:3......Ct]

以下是对Attention的总结: 

①我们将Attention层记作Attn()函数

②Encoder的输入记作矩阵X=[X1,X2,X3...Xm]

③Decoder的输入记作矩阵X'=[X1',X2',X3'...Xt']

【注意】参数Wq、Wk、Wv这是三个参数矩阵需要从训练数据中获得

④计算出来的每一个contect vector (C)对应一个X'。


(2)搭一个Self-Attention层

①也可以用Attn()函数来表示Self-Attention,这个函数与上以一个Attention中的函数一模一样。

【注意】只不过要注意的是这时Attn两个输入都是X即Attn(X,X)。

②RNN只有一个输入X=[X1,X2,X3...Xm]

③同样有三个参数矩阵Wq、Wk、Wv需要从训练数据中获得

【注意】输出C矩阵中每一个C不光依赖它所对应的X,也依赖于其他输入X

以下是Self-Attention的具体计算过程,计算方法与Attention一致: 

先计算Query、Key、Value

再计算权重矩阵α

依次计算出所有权重矩阵

最后计算contect  vector(C)

【特别注意】每一个contect vector(C)不只是依赖于它所对应的X,它同样依赖于其他X。如果你改变任何一个X,C都会随之改变。


三、总结

Attention层:

①Attn()函数的输入是X矩阵和X'矩阵

     q为Query,用来匹配key值

     k为key,用来被Query匹配

     v为Value,是用来被进行加权平均的

③Attn()函数的输出是contect vector矩阵

Self-Attention层:

Self-Attention层只有点与Attention层不同,就是他的输入是两个一样的X矩阵

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词