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

相关推荐
Data-Miner3 分钟前
满分PPT | 基于数据运营的新型智慧城市实践与思考智慧城市数据中台解决方案智能建筑与智慧城市建设方案
人工智能·智慧城市
LitchiCheng12 分钟前
复刻低成本机械臂 SO-ARM100 标定篇
人工智能·机器人
巷95522 分钟前
常见的卷积神经网络列举
人工智能·神经网络·cnn
每天都要写算法(努力版)37 分钟前
【神经网络与深度学习】VAE 在解码前进行重参数化
人工智能·深度学习·神经网络
蜂耘1 小时前
国产大模型新突破:小米大语言模型开源,推理性能超越o1-mini
人工智能·语言模型
m0_620607811 小时前
机器学习——逻辑回归ROC练习
人工智能·机器学习·逻辑回归
szxinmai主板定制专家1 小时前
基于RK3568多功能车载定位导航智能信息终端
大数据·arm开发·人工智能·计算机视觉·fpga开发
江畔柳前堤1 小时前
信息论12:从信息增益到信息增益比——决策树中的惩罚机制与应用
运维·深度学习·算法·决策树·机器学习·计算机视觉·docker
Panesle2 小时前
ACE-Step:扩散自编码文生音乐基座模型快速了解
大模型·transformer·音频·扩散模型·文本生成音乐
一点.点2 小时前
李沐动手深度学习(pycharm中运行笔记)——09.softmax回归+图像分类数据集+从零实现+简洁实现
pytorch·笔记·python·深度学习·动手深度学习·softmax回归