当前位置: 首页 > news >正文

2024/3/17周报

文章目录

  • 摘要
  • Abstract
  • 文献阅读
    • 题目
    • 引言
    • 模型架构
      • 编码器和解码器堆栈
      • Attention
      • Position-wise Feed-Forward Networks
      • Embeddings and Softmax
      • Positional Encoding
    • 实验数据
    • 实验结果
  • 深度学习
    • Transformer
      • Encoder
      • Decoder
  • 总结

摘要

本周阅读了Transformer的开山之作《Attention Is All You Need》。Transformer完全基于注意力机制,完全免除了递归和卷积。在两个机器翻译任务上的实验表明,Transformer模型在质量上是上级的,同时具有更好的并行性,并且训练时间也更少。此外,还对Transformer模型的原理进行了深入学习和研究。

Abstract

Transformer’s pioneering work , Attention Is All You Need is readed this week. Transformer is completely based on attention mechanism, which completely eliminates recursion and convolution. Experiments on two machine translation tasks show that the Transformer model is superior in quality, with better parallelism and less training time. In addition, the principle of Transformer model is deeply studied.

文献阅读

题目

Attention Is All You Need

引言

递归神经网络LSTM和GRU一直是序列建模和转导问题(如语言建模和机器翻译)的最新方法。这些递归模型生成隐藏状态ht的序列,作为前一个隐藏状态ht-1和位置t的输入的函数,从而导致缺少并行化。虽然最新的相关技术提高了一定程度的并行化,但顺序计算的基本约束仍然存在。

注意力机制已经成为各种任务中引人注目的序列建模和转导模型的组成部分,作者提出的Transformer模型架构能避免复发,完全依赖于注意力机制,以绘制输入和输出之间的全局依赖关系。Transformer支持更高的并行化,在8个P100 GPU上训练12小时后,翻译质量就能达到LSTM和GRU的最新水平。

模型架构

Transformer也是由编码器和解码器的结构组成。编码器将符号表示的输入序列(x1,.,xn)转换为连续表示序列z =(z1,…,Zn)。给定z,解码器然后生成输出序列(y1,…,ym)中的每一个。在每一步,该模型是自回归的,在生成下一个符号时,消耗先前生成的符号作为附加输入。

Transformer遵循这种整体架构,编码器和解码器均使用堆叠的自注意和逐点全连接层,分别如下图的左半部分和右半部分所示:
在这里插入图片描述

编码器和解码器堆栈

编码器:编码器由N = 6个相同层的堆栈组成。每层有两个子层。第一个是多头自注意机制,第二个是一个简单的全连接前馈网络。两个子层中都使用残差连接,然后进行层归一化。即,每个子层的输出是LayerNorm(x + Sublayer(x)),其中Sublayer(x)是子层本身实现的函数。为了促进这些残差连接,模型中的所有子层以及嵌入层都产生维度dmodel = 512的输出。
解码器:解码器也是由一个堆栈的N = 6相同的层。除了每个编码器层中的两个子层之外,解码器还插入第三子层,该第三子层对编码器堆栈的输出执行多头注意。与编码器类似,作者在每个子层周围使用残差连接,然后进行层归一化。作者还修改了解码器堆栈中的自注意子层,以防止模型关注后续位置进行作弊。

Attention

注意力函数可以被描述为将查询和一组键值对映射到输出,其中查询、键、值和输出都是向量,输出计算为值的加权和。其中分配给每个值的权重由查询与对应键的compatibility函数计算。
下图为Scaled Dot-Product Attention(标度点积注意力):
在这里插入图片描述

在实际中,同时计算一组查询的注意力函数,这些查询被打包到一个矩阵Q中。键和值被打包到矩阵K和V中。计算的输出矩阵为:
在这里插入图片描述

Multi-Head Attention(多头注意):
使用不同的学习线性投影将查询、键和值分别线性投影h次到dk、dk和dv维。并行执行注意力函数,产生dv维度的输出结果,这些数据被连接起来并再次投影,从而得到最终值,如下图所示:
在这里插入图片描述

多头注意允许模型在不同的位置联合注意来自不同表示子空间的信息。对于一个单一的注意力头,平均化抑制了这一点。
在这里插入图片描述

其中投影是参数矩阵WQi ∈ Rdmodel×dk,WKi ∈ Rdmodel×dk,WVi ∈ Rdmodel×dv和WO ∈ Rdv ×dmodel。

在这项工作中,作者采用h = 8平行注意层(或称为头)。对于其中每一个,作者使用dk = dv = dmodel/h = 64。由于每个头的维数降低,总的计算成本类似于具有全维度的单头注意。

Position-wise Feed-Forward Networks

该层包括两个线性变换,中间有一个ReLU激活:
在这里插入图片描述

Embeddings and Softmax

与其他序列转换模型类似,该处使用学习的嵌入将输入令牌和输出令牌转换为维度dmodel的向量。作者还使用常用的学习线性变换和softmax函数将解码器输出转换为预测的下一个令牌概率。在该模型中,作者在两个嵌入层和pre-softmax线性变换之间共享相同的权重矩阵,并将这些权重乘以嵌入模型。

Positional Encoding

在编码器和解码器堆栈的底部向输入嵌入添加“位置编码”。位置编码与嵌入具有相同的维度dmodel,因此两者可以相加。
在这里插入图片描述

其中pos是位置,i是尺寸。即,位置编码的每个维度对应于正弦曲线。波长形成从2π到10000 · 2π的几何级数。选择正弦版本,因为它可以允许模型外推到比训练期间遇到的更长的序列长度。

实验数据

在标准的WMT 2014英语-德语数据集上进行了训练,该数据集由大约450万个句子对组成。句子使用字节对编码[3]进行编码,它具有大约37000个标记的共享源目标词汇表。对于英语-法语,作者使用了更大的WMT 2014英语-法语数据集,其中包含3600万个句子,并将标记拆分为32000个单词。句子对按近似序列长度分批在一起。每个训练批次包含一组句子对,其中包含大约25000个源标记和25000个目标标记。

使用Adam优化器[20],其中β1 = 0.9,β2 = 0.98,β 2 = 10^−9。根据以下公式在训练过程中改变学习率:
在这里插入图片描述

实验结果

机器翻译:
在WMT 2014英语到德语的翻译任务中,大Transformer模型(表2中的Transformer(大))比之前报道的最佳模型(包括集成)的BLEU高出2.0以上,建立了28.4的新的最先进的BLEU分数。
在WMT 2014英语到法语的翻译任务中,我们的大模型达到了41.0的BLEU分数,超过了之前发布的所有单个模型,而训练成本不到之前最先进模型的1/4。
英语选区分析:
在这里插入图片描述

表中的结果表明,尽管缺乏特定于任务的调整,Transformer模型表现得令人惊讶地好,产生的结果比所有先前模型都要好,即使只在WSJ训练集的40K句子上训练,Transformer也优于BerkeleyParser。

深度学习

Transformer

Transformer模型是在《Attention is All You Need》中提出的,最初是为了提高机器翻译的效率,它的 Self-Attention 机制和 Position Encoding 可以替代 RNN。因为 RNN 是顺序执行的,t 时刻没有处理完成就不能处理 t+1 时刻,因此很难并行。

Encoder

Encoder组件是由N = 6个同样的Encoder堆叠而成,每一个encoder由一个Multihead attention层和feed forward层(2层前馈网络)组成,同时这两个层都包含残差连接(Residual (short-circuit)connection)和LayerNorm,如下图:
在这里插入图片描述

每一个encoder层如下:
在这里插入图片描述

作为第一个encoder的输出,还是记为X,作为第二个encoder的输入。
文中设置了6个encoder堆叠,重复上述过程6次,记最后即最上层的encoder为X,作为encoder的输入。

Decoder

Decoder组件也是由6个一样的decoder组成,decoder也有Mutihead attention层和feed forward层,但是在两个子层之间增加了attention层,该层有助于解码器能够关注到输入句子的相关部分,与seq2seq model的Attention作用相似。
在这里插入图片描述

在inference阶段,在每个时刻,decoder有两个输入:
在这里插入图片描述

3.位置编码

接下来介绍decoder的详细流程。在模型训练过程中,输出结果即要翻译的结果,仍然记为 在这里插入图片描述,虽然记号和encoder一样,但参数并不共享,不是同一个X。
在这里插入图片描述

在这里插入图片描述在decoder中用Mask矩阵抹去未来信息。矩阵在这里插入图片描述的每个元素aij代表了第i个词与第j个词的内积相似度。用下图所示的下三角矩阵作Mask,黄色部分的值是1,紫色部分的值为0,第0时刻(第0行)只有此时词自己跟自己的相似度,1时刻有和0时刻和1时刻的相似度。
在这里插入图片描述
在这里插入图片描述

不断重复上述过程,直到输出特殊字符停止。
在这里插入图片描述

Transformer的损失函数为交叉熵损失,采用梯度下降法求解参数。

总结

Transformer的优势在于它能够并行计算,从而大大提高了训练和推理的效率。由于自注意力机制的引入,模型能够同时计算每个位置的表示,而不需要像RNN那样逐步处理序列。这使得Transformer能够处理更长的序列,从而在机器翻译等任务中取得了更好的效果。
但Transformer有着较高计算成本和优化难度,模型的复杂性导致在训练和推理过程中需要大量的计算资源,尤其是在处理大规模数据集时,需要大规模并行计算能力。此外,还需要仔细调整学习率、批量大小等超参数,以获得较好的性能。

相关文章:

2024/3/17周报

文章目录 摘要Abstract文献阅读题目引言模型架构编码器和解码器堆栈AttentionPosition-wise Feed-Forward NetworksEmbeddings and SoftmaxPositional Encoding 实验数据实验结果 深度学习TransformerEncoderDecoder 总结 摘要 本周阅读了Transformer的开山之作《Attention Is…...

函数连续性和Lipschitz连续性

摘要: 直观上,Lipschitz连续性的含义是函数图像的变化速度有一个全局的上限,即函数的增长速率不会无限增加。这种性质确保了函数在任何地方都不会过于陡峭,有助于分析函数的行为,并且在优化、动力系统理论、机器学习等…...

Qt 鼠标滚轮示例

1.声明 void wheelEvent(QWheelEvent *event) override;2.实现&#xff08;方便复制、测试起见用静态变量&#xff09; #include <mutex> void MainWindow::wheelEvent(QWheelEvent *event) {static QLabel *label new QLabel("Zoom Level: 100%", this);st…...

【Unity】进度条和血条的三种做法

前言 在使用Unity开发的时候&#xff0c;进度条和血条是必不可少的&#xff0c;本篇文章将简单介绍一下几种血条的制作方法。 1.使用Slider Slider组件由两部分组成&#xff1a;滑动区域和滑块。滑动区域用于显示滑动条的背景&#xff0c;而滑块则表示当前的数值位置。用户可…...

多人聊天室 (epoll - Linux网络编程)

文章目录 零、效果展示一、服务器代码二、客户端代码三、知识点1.connect()2.socket()3.bind()4.send()5.recv() 四、改进方向五、跟练视频 零、效果展示 一个服务器作为中转站&#xff0c;多个客户端之间可以相互通信。至少需要启动两个客户端。 三个客户端互相通信 一、服务…...

vite配置

"vite": "^5.1.4" resolve.alias&#xff1a;配置别名 1、执行npm install -D types/node 或者 yarn add types/node -D 2、以下配置代表访问src时可以用“”代替 resolve: {alias: {"": path.resolve(__dirname, "./src"),},}, 使…...

服务器生产环境问题解决思路

游戏服务器开发节奏比较快,版本迭代很频繁,有一些项目甚至出现了周更新(每周准时停服更新维护)。由于功能开发时间短,研发人员本身技术能力等原因,线上出现bug很常见。笔者经历过的游戏项目,一年到头没几次更新不出现bug的(当然,配置问题也算bug)。那当出现bug,我们…...

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Column)

沿垂直方向布局的容器。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 可以包含子组件。 接口 Column(value?: {space?: string | number}) 从API version 9开始&#xff0c;该接口…...

LLM之RAG实战(三十)| 探索RAG语义分块策略

在LLM之RAG实战&#xff08;二十九&#xff09;| 探索RAG PDF解析解析文档后&#xff0c;我们可以获得结构化或半结构化的数据。现在的主要任务是将它们分解成更小的块来提取详细的特征&#xff0c;然后嵌入这些特征来表示它们的语义&#xff0c;其在RAG中的位置如图1所示&…...

软件测试-------Web(性能测试 / 界面测试 / 兼容性测试 / 安全性测试)

Web&#xff08;性能测试 / 界面测试 / 兼容性测试 / 安全性测试&#xff09; 一、Web性能测试&#xff1a;&#xff08;压力测试、负载测试、连接速度测试&#xff09;1、压力测试&#xff1a;      并发测试 &#xff08;如500人同时登录邮箱&#xff09; 2、负载测试…...

工欲善其事,必先利其器,Markdown和Mermaid的梦幻联动(2)

该文章Github地址&#xff1a;https://github.com/AntonyCheng/typora-notes/tree/master/chapter03-mermaid 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文…...

STM32基础--使用寄存器点亮流水灯

GPIO 简介 GPIO 是通用输入输出端口的简称&#xff0c;简单来说就是 STM32 可控制的引脚&#xff0c;STM32 芯片的 GPIO 引脚与外部设备连接起来&#xff0c;从而实现与外部通讯、控制以及数据采集的功能。STM32 芯片的 GPIO被分成很多组&#xff0c;每组有 16 个引脚&#xf…...

代码随想录训练营Day25:● 216.组合总和III ● 17.电话号码的字母组合

216.组合总和III 题目链接 https://leetcode.cn/problems/combination-sum-iii/description/ 题目描述 思路 自己写的效率会慢一些&#xff0c;而且没有用到剪枝 class Solution {List<List<Integer>> list new ArrayList<>();List<Integer> lis…...

SwiftUI的 特性 - ViewModify

SwiftUI的 特性 - ViewModify 记录一下SwiftUI的 特性 - ViewModify的使用方式 可以通过viewModify来管理视图的样式&#xff0c;结合extension来完成封装达到解偶效果 import SwiftUI/// 我们可以通过viewModify来管理视图的样式&#xff0c;来达到解偶效果 struct DefaultB…...

中间件 | RPC - [Dubbo]

INDEX 1 Dubbo 与 web 容器的关系2 注册发现流程3 服务配置3.1 注册方式 & 订阅方式3.2 服务导出3.3 配置参数 4 底层技术4.1 Dubbo 的 spi 机制4.2 Dubbo 的线程池4.3 Dubbo 的负载均衡策略4.3 Dubbo 的协议 1 Dubbo 与 web 容器的关系 dubbo 本质上是一个 RPC 框架&…...

【中等】保研/考研408机试-二叉树相关

目录 一、基本二叉树 1.1结构 1.2前序遍历&#xff08;注意三种遍历中Visit所在的位置&#xff09; 1.2中序遍历 1.3后序遍历 二、真题实战 2.1KY11 二叉树遍历&#xff08;清华大学复试上机题&#xff09;【较难】 2.2KY212 二叉树遍历二叉树遍历&#xff08;华中科技大…...

自动驾驶---Motion Planning之构建SLT Driving Corridor

1 背景 在上篇博客《自动驾驶---Motion Planning之Speed Boundary》中,主要介绍了Apollo中Speed Boundary的一些内容,可以构造ST图得到边界信息,最后结合粗糙的速度曲线和路径曲线,即可使用优化的方法求解得到最终的轨迹信息(s,s,s,l,l,l)。 本篇博客笔者主要介绍近…...

本地文件包含漏洞利用

目录 前期信息收集获取网站权限获取服务器权限纵向提权 前期信息收集 拿到目标的资产&#xff0c;先试一下IP能不能访问 探测一下目标的端口运行的是什么服务 nmap -sC -sV xx.xx9.95.185 -Pn获取网站权限 我们可以知道目标的80端口上运行着http服务&#xff0c;服务器是u…...

【docker】docker的常用命令

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;中间件 ⛺️稳中求进&#xff0c;晒太阳 常规命令 docker version #查看docker 版本信息docker info #显示docker 的系统信息&#xff0c;包括镜像和容器数量docker --help #查看所有的命…...

jmeter实战

jmeter学习 1&#xff0c;接口在定义时&#xff0c;post请求参数尽量放在body里面&#xff0c;get请求参数尽量放在parameters里面&#xff0c;否则会导致jmeter请求接口报错的问题(jmeter底层有较为严格的请求格式) 2&#xff0c;定义全局变量使用&#xff1a;Config Elemen…...

面试官常问问题

1、请你简单的自我介绍一下&#xff1f; 【Tips】① 口述内容不可与简历内容冲突&#xff1b;②阐述方式避免过度官方 且语速较快&#xff1b;③言简意赅&#xff0c;直击要害&#xff0c;抓重点突出项&#xff1b;④面试前应自己模拟练习几次&#xff0c;避免过度紧张导致的口…...

外包就干了2个月,技术退步明显....

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…...

面向对象 汇总(详细内容见Day12—16)

面向对象 汇总&#xff08;详细内容见Day12—16&#xff09; 文章目录 面向对象 汇总&#xff08;详细内容见Day12—16&#xff09;一、概念二、类三、对象四、成员属性/成员变量五、成员方法六、构造方法七、private - 私有化八、封装九、this - 本对象十、分包十一、static -…...

结构体联合体枚举和位段

文章目录 结构体结构体类型的声明特殊的声明 结构的自引用结构体变量的定义和初始化结构体内存对齐为什么要内存对齐结构体传参结构体实现位段&#xff08;位段的填充&可移植性&#xff09;位段位段的内存分配空间如何开辟位段的跨平台问题位段的应用 枚举枚举类型的定义枚…...

人类程序员真要失业?首位“AI软件工程师”亮相引爆科技圈

初创公司Cognition成立不到两个月&#xff0c;但已经拥有十名天才工程师。他们推出了一款名为Devin的人工智能&#xff08;AI&#xff09;助手&#xff0c;可以协助人类软件工程师完成各种开发任务。Devin与现有的其他AI编码者不同&#xff0c;它能够从头开始构建网站、自动部署…...

redis的过期策略以及内存淘汰机制

redis采用的是定期删除惰性删除策略。 为什么不用定时删除策略? 定时删除,用一个定时器来负责监视key,过期则自动删除。虽然内存及时释放&#xff0c;但是十分消耗CPU资源。在大并发请求下&#xff0c;CPU要 将时间应用在处理请求&#xff0c;而不是删除key,因此没有采用这一策…...

华为数通方向HCIP-DataCom H12-821题库(多选题:161-180)

第161题 以下关于IPv6优势的描述,正确的是哪些项? A、底层自身携带安全特性 B、加入了对自动配置地址的支持,能够无状态自动配置地址 C、路由表相比IPv4会更大,寻址更加精确 D、头部格式灵活,具有多个扩展头 【参考答案】ABD 【答案解析】 第162题 在OSPF视图下使用Filt…...

网络通信与网络协议

网络编程是指利用计算机网络实现程序之间通信的一种编程方式。在网络编程中&#xff0c;程序需要通过网络协议(如 TCP/IP)来进行通信&#xff0c;以实现不同计算机之间的数据传输和共享。在网络编程中&#xff0c;通常有三个基本要素 IP 地址:定位网络中某台计算机端口号port:定…...

【矩阵】240. 搜索二维矩阵 II【中等】

搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a;每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22…...

详解uniapp的生命周期

这篇文章主要介绍了 uniapp 的生命周期, 应用生命周期是指应用程序从启动到关闭的整个过程&#xff0c;包括应用程序的启动、前后台切换、退出等, 需要的朋友可以参考下 Uniapp 作为一款跨平台应用开发框架&#xff0c;具有丰富的生命周期&#xff0c;以下是 Uniapp 的生命周期…...