从零开始设计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矩阵

相关推荐
阿坡RPA14 小时前
手搓MCP客户端&服务端:从零到实战极速了解MCP是什么?
人工智能·aigc
用户277844910499314 小时前
借助DeepSeek智能生成测试用例:从提示词到Excel表格的全流程实践
人工智能·python
机器之心14 小时前
刚刚,DeepSeek公布推理时Scaling新论文,R2要来了?
人工智能
算AI16 小时前
人工智能+牙科:临床应用中的几个问题
人工智能·算法
凯子坚持 c17 小时前
基于飞桨框架3.0本地DeepSeek-R1蒸馏版部署实战
人工智能·paddlepaddle
你觉得20517 小时前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义下载方法
大数据·人工智能·python·gpt·学习·机器学习·aigc
8K超高清17 小时前
中国8K摄像机:科技赋能文化传承新图景
大数据·人工智能·科技·物联网·智能硬件
hyshhhh18 小时前
【算法岗面试题】深度学习中如何防止过拟合?
网络·人工智能·深度学习·神经网络·算法·计算机视觉
薛定谔的猫-菜鸟程序员18 小时前
零基础玩转深度神经网络大模型:从Hello World到AI炼金术-详解版(含:Conda 全面使用指南)
人工智能·神经网络·dnn
币之互联万物18 小时前
2025 AI智能数字农业研讨会在苏州启幕,科技助农与数据兴业成焦点
人工智能·科技