【神经网络与深度学习】Transformer原理

transformer

在这里插入图片描述

ENCODER

在这里插入图片描述

输入部分

对拆分后的语句x = [batch_size, seq_len]进行以下操作

  1. Embedding
    将离散的输入(如单词索引或其他类别特征)转换为稠密的实数向量,以便可以在神经网络中使用。
  2. 位置编码
    与RNN相比,RNN是一个字一个字的输入,自然每个字的顺序关系信息就会保留下来。但在Encoder中,一个句子的每一个字(词)是并行计算的(下一节解释),所以我们在输入的时候需要提前引入位置信息。
    位置信息由: pos(一句话中的第几个字) 和 i (这个字编码成向量后的第i维) 来确定
    下面是Positional Encoding的公式:
    i为 偶 数 时 , P E p o s , i = s i n ( p o s / 1000 0 2 i / d m o d e l ) PE_{pos, i}= sin( pos/ 10000^{2i/ d_{model}}) PEpos,i=sin(pos/100002i/dmodel)
    i为 奇 数 时 , P E p o s , i = c o s ( p o s / 1000 0 2 i / d m o d e l ) PE_{pos, i}= cos( pos/ 10000^{2i/ d_{model}}) PEpos,i=cos(pos/100002i/dmodel)
    d m o d e l d_{model} dmodel指想用多长的 vector 来表达一个词(embedding_dim)

通过输入部分
x: [batch_size, seq_len, embedding_dim]

在这里插入图片描述

多头注意力机制

  1. 单头注意力机制
    对一句话中第i个字的字向量 a i a_i ai,产生三个矩阵Q, K ,V
    Q,K,V的维度都为[batch_size, seq_len, embedding_dim]

a i a_i ai分别与上面三个矩阵相乘,得到三个向量 q i , k i , v i q_i, k_i, v_i qi,ki,vi
如果要计算第1个字向量与句子中所有字向量的注意力:
将查询向量 q 1 q_1 q1与 所有的字向量的键向量 k i k_i ki相乘得到 a l p h a 10 , a l p h a 11 , . . . , a l p h a 1 , s e q l e n alpha_{10}, alpha_{11},...,alpha_{1,seqlen} alpha10,alpha11,...,alpha1,seqlen
将这写数值进行softmax处理后, 分别与 v i v_i vi相乘再合加得到最终结果 b 1 b_1 b1

在这里插入图片描述

  1. 多头注意力机制
    Q , K , V Q,K,V Q,K,V三个大矩阵变成n个小矩阵(seq_len, embedding_dim/n) n=8
    用上节相同的方式计算8个矩阵,然后把每一个head-Attention计算出来的b矩阵拼在一起,作为输出

Add&LN

Add是用了残差神经网络的思想,也就是把Multi-Head Attention的输入的a矩阵直接加上Multi-Head Attention的输出b矩阵(好处是可以让网络训练的更深)得到的和 b ˉ \bar{b} bˉ矩阵

再在经过Layer normalization(归一化,作用加快训练速度,加速收敛)把
每一行(也就是每个句子)做归一为标准正态分布,最后得到 b ^ \hat{b} b^
BN 和 LN:

  1. LN: 在一个样本内做归一化 适于RNN,transformer
  2. BN: 对batch_size里面的样本按对应的特征做归一化 适于CNN
    在这里插入图片描述

Feed_forward前馈神经网络

把Add & Layer normalization输出 b ^ \hat{b} b^,经过两个全连接层,再经过Add & Layer normalization得到最后输出 o 矩阵

DECODER

masked_多头注意力机制

比如我们在中英文翻译时候,会先把"我是学生"整个句子输入到Encoder中,得到最后一层的输出后,才会在Decoder输入"S I am a student"(s表示开始),但是"S I am a student"这个句子我们不会一起输入,而是在T0时刻先输入"S"预测,预测第一个词"I";在下一个T1时刻,同时输入"S"和"I"到Decoder预测下一个单词"am";然后在T2时刻把"S,I,am"同时输入到Decoder预测下一个单词"a",依次把整个句子输入到Decoder,预测出"I am a student E"

多头注意力机制

Decoder 的 Multi-Head Attention 的输入来自两部分,
K,V 矩阵来自Encoder的输出,
Q 矩阵来自 Masked Multi-Head Attention 的输出
在这里插入图片描述

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

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

相关文章

机器学习(3)

目录 3-1线性回归 3-2最小二乘解 3-3多元线性回归 3-4广义线性模型 3-5对率回归 3-6对率回归求解 3-7线性判别分析 3-8LDA的多类推广 3-9多分类学习基本思路 3-10类别不平衡 3-1线性回归 线性模型为什么重要? 人类在考虑问题时,通常…

Cocos Creator 3.8.x 透明带滚动功能的容器

ScrollView 是一种带滚动功能的容器 1、删除ScrollView下Sprite组件的SpriteFrame 2、ScrollView下scrollBar的Sprite组件的Color设为:FFFFFF00 3、ScrollView下view的Graphics组件的FillColor设为:FFFFFF00

文档可视化+表单引擎,让数据交互更流畅!

hello,大家好,我是徐小夕。之前和大家分享了很多可视化,零代码和前端工程化的最佳实践,今天继续分享一下最近开发的文档引擎 Nocode/WEP 的最新更新。 往期精彩 零代码AI的阶段性复盘文档引擎AI可视化打造下一代文档编辑器爆肝100…

用docker命令行操作远程的Dockerd daemon服务

本地安装 Dockerd 服务太耗本机磁盘空间了,共用已有的Dockerd服务能够节省一部分空间 修改 Dockerd 服务启动文件,增加TCP监听方式 Dockerd 服务默认监听方式为 Unix Domain Socket ,只允许本机连接,想要能够远程连接&#xff0…

selenium发展史

Selenium Core 2004 年,Thoughtworks 的工程师 Jason Huggins 正在负责一个 Web 应用的测试工作,由于这个项目需要频繁回归,这导致他不得不每天做着重复且低效的工作。为了解决这个困境,Jason 开发了一个运行在 JavaScript 沙箱中…

43k Star!推荐一款功能强大的开源笔记软件!

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一份大厂面试资料《史上最全大厂面试题》,Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

2024软件测试必问的常见面试题1000问!

01、您所熟悉的测试用例设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。 答:有黑盒和白盒两种测试种类,黑盒有等价类划分法,边界分析法,因果图法和错误猜测法。白盒有逻辑覆盖法&…

每天Get一个小技巧:用DolphinScheduler实现隔几天调度

转载自tuoluzhe8521 这篇小短文将教会你如何使用Apache DolphinScheduler实现隔几天调度,有此需求的小伙伴学起来! 1 场景分析 DolphinScheduler定时器模块-定时调度时每3秒|每3分钟|每3天这种定时,不能够跨分钟,跨小时&#x…

Unity | Spine动画动态加载

一、准备工作 Spine插件及基本知识可查看这篇文章:Unity | Spine动画记录-CSDN博客 二、Spine资源动态加载 1.官方说明 官方文档指出不建议这种操作。但spine-unity API允许在运行时从SkeletonDataAsset或甚至直接从三个导出的资产实例化SkeletonAnimation和Skel…

第189题|幂级数的展开的常规方法(二)|武忠祥老师每日一题

解题思路:将函数展开成幂级数有两种方法:一种是直接法(这种一般比较麻烦),一种是拆解成现有展开式展开(这种的特征一般是能因式分解)。 第一步: 这里看到 ln(1-x-2x^2) 将里面的式…

使用Selenium破解滑动验证码的原理及解决思路

1、获取页面元素信息: 使用Selenium打开目标网页,并通过相关方法获取滑块、背景图等元素的位置和属性信息。可以使用Selenium提供的定位方法(如xpath、CSS选择器等)来找到这些元素。 可以使用find_element_by_xpath或find_elemen…

ctfshow SSRF 351-358

做题前,需要先学习关于ssrf漏洞的相关知识 小注意: 当使用 file_get_contents() 函数访问远程 URL 时,它会尝试获取该 URL 指向的资源的内容,并将内容以字符串的形式返回。 如果 b.php 文件是一个 PHP 文件,它包含的内容取决于该 PHP 文件…