Transformer——encoder

本文参考了b站的Eve的科学频道中的深入浅出解释Transformer原理和DASOU讲AI中的Transformer从零详解。
入浅出解释Transformer原理
Transformer从零详解

前言:

在自然语言识别中,之前讲过lstm,但是lstm有明显的缺陷,就是当文本过于长的时候,考前的文本信息和后的文本信息,关联性就会越来越弱,并且因为链式求导的原因,会导致梯度消失,所以这里就学习了一种新型神经网络Transformer,他和前面的网络很不一样,他是一种基于注意力的编码-解码架构。

单个网络结构:

在这里插入图片描述
如上图所示,左边为编码部分,右边为解码部分,接下里,我们将会从编码部分开始讲解。

1.输入部分

在这里插入图片描述
如上图所示,红框部分就是输入部分,inputs就是我们的文本信息,比如how are you ,而input Embedding,就是把我们输入的这一段话,做嵌入,使他形成词向量(比如word2vec),比如我们把how are you,可以做成如下所示的词向量
在这里插入图片描述

词向量嵌入完成后,还要加上位置信息,因为在lstm中,每个隐含层的节点,都是要接收上一个隐含层的输出,所以他是有天然的时序顺序在里面的。但是transformer中,我们没有使用rnn,所以就需要我们给他的词向量中加入位置信息。

位置编码公式如下:
在这里插入图片描述
我们可以看出有两个参数2i和2i+1,他的意思就是在词向量的偶数位置做sin运算,在奇数位置做cos运算,如下图
在这里插入图片描述

然后接下来,把原来的Embedding和posCode进行相加,如下图所示
在这里插入图片描述

2.多头注意力模块:

在这里插入图片描述
自注意力机制,简单来说就是模型先要把输入的文本中,每个单词和其他单词关联起来,然后在矩阵中表示出,哪些单词是重要的单词,下图就是自注意力机制的内部构造。
在这里插入图片描述
QKV: 上图红框中的意思是,我们把前面输入部分的输出,分别送入三个不同的全链接层,得出三个向量。那这句话换个说法就是,我们把之前的每个词向量,乘上三个不同的矩阵,如下图所示,就可以得到每个词向量自己的QKV矩阵。例如Q矩阵,他实际上是由how are you 三个词的Q矩阵,所构成的一个三行三列的Q矩阵。所谓的多头,其实就是可以有多个编码部分,其中每个编码部分的结构其实都是一样的,不同的是下图中的WQ WK WV矩阵的内容,因为这三个矩阵的不同,所以相当于在不同的空间中注意到不同的信息。
在这里插入图片描述
matmul: 接下来就把Q矩阵和V矩阵进行相乘,所得到的这个矩阵,确定了一个单词应该如何关注其他单词,如下图所示,可以明显的看出,矩阵中的数字,代表了这个单词和其他单词的关注度,分数越高代表关注度越高。
在这里插入图片描述
然后把相乘后的矩阵进行缩放,如下图所示,目的是让梯度稳定,因为乘法后的数据会很爆炸,换句人话说就是,因为后面要拿这个矩阵做softmax,如果这个矩阵过大的话,就会导致softMax很小,从而导致梯度的消失
在这里插入图片描述
softMax: 接下来对缩放后的矩阵进行softMax变化,入下图所示,把矩阵变成注意力的权重矩阵,其实还有个好处是可以让注意力强的单词更强,弱的更弱。

在这里插入图片描述
第二次MatMul: 把softMax变换后的注意力权重矩阵,乘上V矩阵,所得到输出向量,就可以把原本不重要的词给变小,给重要的词变大。
在这里插入图片描述
concat和Linear:
上面所说的,只是一头,就相当于下图中的“一片”,但是实际中,是多头。是由很多片构成的,所以concat的目的就是把每片输出的注意力权重矩阵给拼接起来。
在这里插入图片描述
假如我们由8个头,那么将会输出8个注意力权重矩阵,conact拼接效果如下:
在这里插入图片描述

显然这么长的矩阵,不是我们的目标矩阵,因为我们要的是让输出矩阵和输入矩阵,所以要进行Linear变换,如下图所示,最后所得到的结果,就是多头自注意力机制的输出
在这里插入图片描述
add&norm: add和norm是两个操作,其中把多头注意力向量加上pos-embedding上,这是add,也就是残差链接,连接后经过归一化,如下图所示 。
在这里插入图片描述
残差链接有什么用?
如下图所示,通过链式求导法则可以看出,当使用残差时,括号内存在一个1,梯度消失一般情况下是因为连乘从而导致梯度变小,而下面因为这个1的存在,导致梯度不会那么容易消失
在这里插入图片描述
LayerNorm有什么用?
是一种用于神经网络的归一化技术,它可以对网络中的每个神经元的输出进行归一化,使得网络中每一层的输出都具有相似的分布

3.全链接模块:

在这里插入图片描述
这层很简单,两层全连接,用ReLu作为激活函数,因为是Feed Forward神经网络,所以他信息只沿着一个方向流动,即从输入层到输出层。因此,不存在误差反向传播,如下图所示。其中的LN和上面的方法一样。
在这里插入图片描述

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

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

相关文章

从传统到智能 | 拓世法宝AI智能直播一体机为商家注入活力

2023年即将结束,直播仍然是商业舞台上的主旋律,本地生活也不例外。据数据显示,到2022年,中国本地生活服务市场规模已经达到29.8万亿元,而预计到2025年,这一数字将继续攀升至35.3万亿元。伴随着当地生活直播…

Arguments对象

Arguments 对象 arguments 基本定义 首先arguments是以内置对象出现的。换句话说:你不能够直接的去访问arguments对象,所以你会返现在浏览器中直接访问arguments对象是不存在的。 特别重要: 那么arguments对象本质上是什么东西呢&#xff…

Java零基础——Spring篇

1.Spring框架的介绍 1.1 传统的项目的架构 在传统的项目中,一般遵循MVC开发模型。 (1) view层与用户进行交互,显示数据或者将数据传输给view层。 (2) 在controller层创建service层对象,调用service层中业务方法。 (3) 在service层创建dao…

Linux docker安装RStudio Server结合内网穿透实现公网访问内网服务

📷 江池俊: 个人主页 🔥个人专栏: ✅数据结构探索 ✅cpolar 🌅 有航道的人,再渺小也不会迷途。 文章目录 前言1. 安装RStudio Server2. 本地访问3. Linux 安装cpolar4. 配置RStudio server公网访问地址5…

kibana 7安装

手动安装 下载 wget https://artifacts.elastic.co/downloads/kibana/kibana-7.17.15-linux-x86_64.tar.gz 解压 mv kibana-7.17.15-linux-x86_64.tar.gz /usr/local tar -zxvf kibana-7.17.15-linux-x86_64.tar.gz chown -R es:es kibana-7.17.15-linux-x86_64修改配置 s…

解决VSCode运行时自动保存问题【图文解析】

用VSCode写前端时老是自动保存,代码还没写完就开始 刷新页面 调用接口 出现报错之类的,很烦人,所以就写一篇修改VSCode自动保存文件的文章,以免自己忘记在哪设置。 同事总是用不自动保存,每次写完都要ctrls一下&#x…

电脑文件夹加密怎么操作?保护数据4个方法分享!

“大家平常是怎么给电脑文件夹加密的呀?我有一些比较重要的数据,为了不让别人看到,我想把它们加密,应该怎么操作呢?” 平常使用电脑时,可能很多朋友会将很多重要的数据保存在电脑上。但是有些文件对用户来说…

私有化敏感词检测API服务wordscheck

之前有网友在找敏感词检测的应用,这个应该能满足他的需求; 什么是 wordscheck ? wordscheck 是敏感词检测 API,提供文本识别、智能鉴黄、涉政检测、谩骂等等敏感词检测过滤服务。 简介 敏感词库从大量样本库整理出来,…

bootstarp+springboot基于Java的教学仪器设备商城销售网站_o9b00

1、商品分类功能 商品分类是教学仪器设备销售网站中十分重要的一部分,它能够提高用户在网站上的浏览速度,并方便用户快速找到自己需要的商品。因此,需要对该功能进行分析和设计,确保其体验性、可用性和易用性。可以将商品分为多个…

Apache服务Rwrite功能使用

Rewrite也称为规则重写,主要功能是实现浏览器访问时,URL的跳转。其正则表达式是基于Perl语言。要使用rewrite功能,Apache服务器需要添加rewrite模块。如果使用源码编译安装,–enable-rewrite。有了rewrite模块后,需要在…

驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接

参考:https://www.cnblogs.com/sam-snow-v/p/15917898.html eclipse链接SQL Server出现问题 笔者使用Open JDK 17,SQL Server 2016,项目中使用JPA操作数据库。测试环境没问题,生产环境出现如题所示“驱动程序无法通过使用安全套接…

无痛迁移:图解 Kubernetes 集群升级步骤

本文探究了 Kubeadm 集群升级工作流程,并以可视化方式展现。着重介绍了控制平面节点和工作节点的升级步骤,涵盖了 kubeadm 升级、节点清空、kubelet 和 kubectl 升级,以及解除节点封锁的关键步骤。 这个简明扼要的指南可帮助用户理解和执行 K…

苹果Siri怎么打开?教你两招轻松唤醒!

苹果Siri助手是苹果公司开发的智能语音助手。作为智能语音助手,Siri可以理解用户的指令,并给出相应的回答或执行相应的操作,帮助大家完成各种任务,比如发送短信、查询天气、播放音乐、设置提醒等等。 然而,还有一些小…

几个西门子PLC常见通讯问题的解决方法

1台200SMART 如何控制2台步进电机? S7-200SMART CPU最多可输出3路高速脉冲(除ST20外),这意味着可同时控制最多3个步进电机,通过运动向导可配置相应的运动控制子程序,然后通过调用子程序编程可实现对步进电…

数据分析思维与模型:相关分析法

相关分析法是一种用于研究两个或多个变量之间关系强度和方向的统计方法。这种方法在多个领域,如经济学、心理学、社会科学和自然科学中都有广泛应用。其核心是通过计算相关系数来量化变量之间的相关性。以下是相关分析法的一些基本概念和步骤: 选择变量…

【Mysql系列】LAG与LEAD开窗函数

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

用合成数据训练语义分割模型【裂缝检测】

最近,我们推出了合成裂缝分割数据集,在本文中,我们将深入探讨应用于合成数据生成过程的改进和启发式方法。 阅读完这篇文章后,你将了解我们如何设法创建一个数据集,该数据集可以像使用真实数据一样高效地训练模型。 在…

【Python】【Torch】神经网络中各层输出的特征图可视化详解和示例

本文对神经网络各层特征图可视化的过程进行运行示例,方便大家使用,有助于更好的理解深度学习的过程,尤其是每层的结果。 神经网络各层特征图可视化的好处和特点如下: 可视化过程可以了解网络对图像像素的权重分布,可…

PyCharm玩转ESP32

想必玩ESP32的童鞋都知道Thonny,当然学Python的童鞋用的更多的可能是PyCharm和VsCode Thonny和PyCharm的对比 对于PyCharm和VsCode今天不做比较,今天重点说一下用PyCharm玩转ESP32,在这之前我们先对比下Thonny和PyCharm的优缺点 1、使用Tho…

【HarmonyOS】低代码平台组件拖拽使用技巧之常用基础组件(下)

【关键字】 HarmonyOS、低代码平台、组件拖拽、代码编辑器 1、写在前面 本篇接着上一篇的内容来介绍,继续来看我们的登录页面的下半部分的使用,本篇会介绍按钮组件、单选框组件的拖拽使用,还会介绍代码编辑器的使用,最后会完成登…