深度学习(八):bert理解之transformer

1.主要结构

transformer 是一种深度学习模型,主要用于处理序列数据,如自然语言处理任务。它在 2017 年由 Vaswani 等人在论文 “Attention is All You Need” 中提出。

Transformer 的主要特点是它完全放弃了传统的循环神经网络(RNN)和卷积神经网络(CNN),而是完全依赖于注意力机制(Attention Mechanism)来捕捉输入序列中的模式。

Transformer 的主要组成部分包括:
在这里插入图片描述

1.自注意力机制(Self-Attention):自注意力机制能够处理序列数据,并且能够关注到序列中的任何位置,从而捕捉到长距离的依赖关系。

2.位置编码(Positional Encoding):由于 Transformer 没有循环和卷积操作,所以需要额外的位置编码来捕捉序列中的顺序信息。

3.编码器和解码器(Encoder and Decoder):Transformer 模型由编码器和解码器组成。编码器用于处理输入序列,解码器用于生成输出序列。编码器和解码器都是由多层自注意力层和全连接层堆叠而成。

2.自注意力机制

个人理解就是把字符编码后通过公式相乘变为另一个向量。

通过关注X中的词嵌入,我们在Y中生成了复合嵌入(加权平均值)。例如,Y中的dog嵌入是X中的the、dog和ran嵌入的组合,权重分别为0.2、0.7 和0.1。

构建词嵌入如何帮助模型实现理解语言的最终目标?要完全理解语言,仅仅理解组成句子的各个单词是不够的;还需要理解组成句子的各个单词。模型必须理解单词在句子上下文中如何相互关联。注意力机制通过形成模型可以推理的复合表示,使模型能够做到这一点。例如,当语言模型尝试预测句子“the runningdog was ___”中的下一个单词时,除了单独的“running ”或“dog”概念之外,模型还应该理解“runningdog”的复合概念;例如,走狗经常喘气,所以喘气是句子中合理的下一个词。在这里插入图片描述

2.1注意力可视化

通过bertviz可视化,bert模型记得替换

from bertviz import head_view, model_view
from transformers import BertTokenizer, BertModel
import imageio
model_version = 'D:\PycharmProjects\Multimodal emotion\model\\bert-base-chinese'
model = BertModel.from_pretrained(model_version, output_attentions=True)
tokenizer = BertTokenizer.from_pretrained(model_version)
sentence_a = "好不好?燕子,你要开心,你要幸福,好不好?"
sentence_b = "开心啊,幸福。你的世界以后没有我了,没关系,你要自己幸福。"
inputs = tokenizer.encode_plus(sentence_a, sentence_b, return_tensors='pt')
print(inputs)
input_ids = inputs['input_ids']
print(input_ids)
token_type_ids = inputs['token_type_ids']
print(token_type_ids)
attention = model(input_ids, token_type_ids=token_type_ids)[-1]
print(attention)
sentence_b_start = token_type_ids[0].tolist().index(1)
print(sentence_b_start)
input_id_list = input_ids[0].tolist() # Batch index 0
print(input_id_list)
tokens = tokenizer.convert_ids_to_tokens(input_id_list) 
print(tokens)head_view(attention, tokens, sentence_b_start)

下面的可视化(在此处以交互形式提供)显示了示例输入文本引起的注意力。该视图将注意力可视化为连接正在更新的单词(左)和正在关注的单词(右)的线,遵循上图的设计。颜色强度反映注意力权重;接近 1 的权重显示为非常暗的线条,而接近 0 的权重显示为微弱的线条或根本不可见。用户可以突出显示特定单词以仅看到来自该单词的注意力。
在这里插入图片描述

升级一下,来讲多头注意力

它扩展了模型关注不同位置的能力。原来的编码 包含一些其他编码,但它可能由实际单词本身主导。如果我们翻译一个句子,比如“The Animal did not cross the street because it was tooert”,那么知道“it”指的是哪个单词会很有用。

它为注意力层提供了多个“表示子空间”。正如我们接下来将看到的,通过多头注意力,我们不仅拥有一组查询/键/值权重矩阵,而且拥有多组查询/键/值权重矩阵(Transformer 使用八个注意力头,因此我们最终为每个编码器/解码器提供八组,但是bert用12或24) 。这些集合中的每一个都是随机初始化的。然后,在训练之后,每个集合用于将输入嵌入(或来自较低编码器/解码器的向量)投影到不同的表示子空间中。

BERT 还堆叠了多个注意力层,每个注意力层都对前一层的输出进行操作。通过这种词嵌入的重复组合,BERT 能够在到达模型最深层时形成非常丰富的表示。我们接着写代码展示

model_view(attention, tokens, sentence_b_start)

由于注意力头不共享参数,因此每个头都会学习独特的注意力模式。我们在这里考虑的 BERT 版本——BERT Base——有 12 层和 12 个头,总共有 12 x 12 = 144 个不同的注意力机制。我们可以使用模型视图(此处以交互形式提供)同时可视化所有头部的注意力:

在这里插入图片描述
接着我们引入一些概念:

  • 查询 q:查询 向量q编码左侧正在关注的单词,即“查询”其他单词的单词。在上面的示例中,“on”(所选单词)的查询向量被突出显示。

  • 密钥k:密钥向量k对右侧所关注的单词进行编码。关键字向量和查询向量一起确定两个单词之间的兼容性分数。

  • q×k (elementwise):所选单词的查询向量与每个键向量之间的元素乘积。这是点积(元素乘积之和)的前身,包含在内是为了可视化目的,因为它显示了查询和键向量中的各个元素如何对点积做出贡献。

  • q·k:所选查询向量和每个关键 向量的缩放点积(见上文)。这是非标准化注意力分数。 Softmax:缩放点积的

  • Softmax。这会将注意力分数标准化为正值且总和为 1。
    代码

from bertviz.transformers_neuron_view import BertModel, BertTokenizer
from bertviz.neuron_view import showmodel_type = 'bert'
model_version = 'D:\PycharmProjects\Multimodal emotion\model\\bert-base-chinese'
model = BertModel.from_pretrained(model_version, output_attentions=True)
tokenizer = BertTokenizer.from_pretrained(model_version, do_lower_case=True)
show(model, model_type, tokenizer, sentence_a, sentence_b, layer=4, head=3)

该视图跟踪从左侧所选单词到右侧完整单词序列的注意力计算。正值显示为蓝色,负值显示为橙色,颜色强度代表大小。与前面介绍的注意力头视图一样,连接线表示相连单词之间的注意力强度。
在这里插入图片描述

2.2原理

回顾上面我所说的概念,运用如下公式
在这里插入图片描述
计算得分,多头是这样子的,就是增加了维度,把多头注意力拼接在一起
在这里插入图片描述
transformer的结构:
在这里插入图片描述
经历多头注意力再经过归一化层和前馈神经网络,每个head64维,因为有8个head,应该得到512维,但是bert有12个head,应该得到768维。
举个简单的例子来理解一下
这是利用transformer进行翻译
在这里插入图片描述
在这里插入图片描述
encoders是编码器,decoders是解码器。

3.Positional Encoding

一句话概括,Positional Encoding就是句子中词语相对位置的编码,让Transformer保留词语的位置信息。
t t t表示当前词语在句子中的位置,
p t → \overrightarrow{p_t} pt 表示的是该词语对应的位置编码,
d d d表示的是编码的维度。
公式如下
p t → = [ sin ⁡ ( ω 1 . t ) cos ⁡ ( ω 1 . t ) sin ⁡ ( ω 2 . t ) cos ⁡ ( ω 2 . t ) ⋮ sin ⁡ ( ω d / 2 . t ) cos ⁡ ( ω d / 2 . t ) ] d × 1 \left.\overrightarrow{p_t}=\left[\begin{array}{c}\sin(\omega_1.t)\\\cos(\omega_1.t)\\\\\sin(\omega_2.t)\\\cos(\omega_2.t)\\\\\vdots\\\\\sin(\omega_{d/2}.t)\\\cos(\omega_{d/2}.t)\end{array}\right.\right]_{d\times1} pt = sin(ω1.t)cos(ω1.t)sin(ω2.t)cos(ω2.t)sin(ωd/2.t)cos(ωd/2.t) d×1
从公式可以看出,其实一个词语的位置编码是由不同频率的余弦函数函数组成的,从低位到高位。
不同频率的sines和cosines组合其实也是同样的道理,通过调整三角函数的频率,我们可以实现这种低位到高位的变化,这样的话,位置信息就表示出来了。

在这里插入图片描述

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

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

相关文章

【面向对象】对比JavaScript、Go、Ada、Python、C++、Java、PHP的访问限制。

在不同编程语言中,控制成员(变量、方法、类等)可见性的机制不尽相同。以下是对比JavaScript、Go、Ada、Python、C、Java、PHP所使用的访问限制关键字和约定: 一、JavaScript ### JavaScript访问限制 早期的JavaScript并没有类似…

Hago 的 Spark on ACK 实践

作者:华相 Hago 于 2018 年 4 月上线,是欢聚集团旗下的一款多人互动社交明星产品。Hago 融合优质的匹配能力和多样化的垂类场景,提供互动游戏、多人语音、视频直播、 3D 虚拟形象互动等多种社交玩法,致力于为用户打造高效、多样、…

Centos安装vsftpd:centos配置vsftpd,ftp报200和227错误

一、centos下载安装vsftpd(root权限) 1、下载安装 yum -y install vsftpd 2、vsftpd的配置文件 /etc/vsftpd.conf 3、备份原来的配置文件 sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup 4、修改配置文件如下:vi /etc/vsftpd.conf …

收银管理系统怎样帮助商家很好地经营服装门店

收银管理系统对于服装门店的经营可以提供多方面的帮助,以下是一些具体的优势和功能: 1. 快速准确的收银:收银管理系统可以实现快速、准确的收银操作,通过条码扫描或手动输入商品信息,自动计算价格并生成收据。这样可以…

差生文具多之(二): perf

栈回溯和符号解析是使用 perf 的两大阻力,本文以应用程序 fio 的观测为例子,提供一些处理它们的经验法则,希望帮助大家无痛使用 perf。 前言 系统级性能优化通常包括两个阶段:性能剖析和代码优化: 性能剖析的目标是寻…

如何开发专属花店展示平台小程序?

如今,微信小程序已经成为了花店行业拓展客户资源的重要工具。通过开发一个专属花店小程序,你可以为自己的花店带来更多的曝光和客户资源。那么,如何开发一个专属花店小程序呢?接下来,我们将一步步为你详细讲解。 首先&…

STB0016导线防碰撞警示装置

适用场所: 适用于高压线,塔吊,路政,船舶,种植,塔机,航海航道等场所起警示作用。 产品特点: 光控无开关,白天不闪,昏暗环境自动闪烁,无需手动操作,省时省事; 采用红色LED作光源,亮度高&#…

0.618算法和基于Armijo准则的线搜索回退法

0.618代码如下: import math # 定义函数h(t) t^3 - 2t 1 def h(t): return t**3 - 2*t 1 # 0.618算法 def golden_section_search(a, b, epsilon): ratio 0.618 while (b - a) > epsilon: x1 b - ratio * (b - a) x2 a ratio * (b - a) h_…

【期末考试】计算机网络、网络及其计算 考试重点

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 计算机网络及其计算 期末考点 🚀数…

智能优化算法应用:基于白鲸算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于白鲸算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于白鲸算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.白鲸算法4.实验参数设定5.算法结果6.参考文献7.MA…

JavaScript原型,原型链 ? 有什么特点?

一、原型 JavaScript 常被描述为一种基于原型的语言——每个对象拥有一个原型对象 当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个…

Vue如何请求接口——axios请求

1、安装axios 在cmd或powershell打开文件后,输入下面的命令 npm install axios 可在项目框架中的package.json中查看是否: 二、引用axios import axios from axios 在需要使用的页面中引用 三、get方式使用 get请求使用params传参,本文只列举常用参数…

华为云Stack 8.X 流量模型分析(二)

二、流量模型分析相关知识 1.vNIC ​ 虚拟网络接口卡(vNIC)是基于主机物理 NIC 的虚拟网络接口。每个主机可以有多个 NIC,每个 NIC 可以是多个 vNIC 的基础。 ​ 将 vNIC 附加到虚拟机时,Red Hat Virtualization Manager 会在虚拟机之间创建多个关联的…

IPC之九:使用UNIX Domain Socket进行进程间通信的实例

socket 编程是一种用于网络通信的编程方式,在 socket 的协议族中除了常用的 AF_INET、AF_RAW、AF_NETLINK等以外,还有一个专门用于 IPC 的协议族 AF_UNIX,IPC 是 Linux 编程中一个重要的概念,常用的 IPC 方式有管道、消息队列、共…

摄影企业网站搭建的作用是什么

几乎每个成年人都有一部手机,在互联网信息时代,手机的作用不言而喻,拍照/摄像成为了不少人经常会做的事,拍一张美美的照片发到社交圈赢得赞声,或是为以后留下回忆或发给自己在意的人,但这只限于生活记叙类图…

即将来临的2024年,汽车战场再起波澜?

我们来简要概况一下11月主流车企的销量表现: 根据数据显示,11月吉利集团总销量29.32万辆,同比增长28%。这在当月国内主流车企中综合实力凌厉,可谓表现得体。而与吉利直接竞争的比亚迪,尽管数据未公布,但我们…

AI Native工程化:百度App AI互动技术实践

作者 | GodStart 导读 随着AI浪潮的兴起,越来越多的应用都在利用大模型重构业务形态,在设计和优化Prompt的过程中,我们发现整个Prompt测评和优化周期非常长,因此,我们提出了一种Prompt生成、评估与迭代的一体化解决方案…

向量投影:如何将一个向量投影到矩阵的行向量生成子空间?

向量投影:如何将一个向量投影到矩阵的行向量生成子空间? 前言 本问题是在学习Rosen梯度投影优化方法的时候遇到的问题,主要是对于正交投影矩阵(NT(NNT)-1N)的不理解,因此经过查阅资料,学习了关于向量投影的知识&…

高级人工智能之群体智能:蚁群算法

群体智能 鸟群: 鱼群: 1.基本介绍 蚁群算法(Ant Colony Optimization, ACO)是一种模拟自然界蚂蚁觅食行为的优化算法。它通常用于解决路径优化问题,如旅行商问题(TSP)。 蚁群算法的基本步骤…

【YOLOV8预测篇】使用Ultralytics YOLO进行检测、分割、姿态估计和分类实践

目录 一 安装Ultralytics 二 使用预训练的YOLOv8n检测模型 三 使用预训练的YOLOv8n-seg分割模型 四 使用预训练的YOLOv8n-pose姿态模型 五 使用预训练的YOLOv8n-cls分类模型 <