【深度学习】Transformer梳理

news2024/11/17 21:25:34

零、前言

对于transformer,网上的教程使用记号、术语不一 。
最关键的一点,网上各种图的简化程度不一 (画个图怎么能这么偷懒) ,所以我打算自己手画一次图。
看到的最和善(但是不是那么靠谱,我怀疑图有误)的transformer教程:一文了解Transformer全貌(图解Transformer)

注意: 全连接层在概念上输入必须是一维向量,但是实际实现的时候我们会采用批处理将多个样本的向量组拼成矩阵,用矩阵乘法加速运算。如果用单一样本的向量来标注全文可能更清晰,但是为了更贴近实用,约定全文的输入长这个样子而不是向量:

输入为X矩阵其实,输入也不是矩阵。。。输入是3维张量,三个维度分别是batch_size, number(当前用到的词数), dimension(特征维度)
其中,number没有画出来,你可以按number=1来想,当成矩阵方便一些

一、前置基础中的前置基础

  • RNN
  • 残差连接(无论什么书,通常会在CNN的ResNet这一节中讲)
  • 归一化
  • 注意力机制

二、前置基础

  • Encoder-Decoder模型
  • 自注意力
  • 多头注意力

简单介绍一下,

  1. Encoder-Decoder模型是为了解决RNN容易忘记前文的问题(即使是LSTM也可能存在这个问题)

  2. 自注意力
    自注意力图示
    (其中Q、K、V是什么属于“注意力机制”的内容,假设你已经了解了这一块内容并能看懂上面的图)
    可以发现,自注意力的作用是把X转换为固定形状的M,便于处理

  3. 多头注意力
    多头注意力本身并不限制使用的是什么注意力来连接起来,Transformer中用的是自注意力。
    多头注意力图示多头注意力将多个自注意力Concat,是因为这样“并列”的结构能优化最长最短路,而且这样能表达的注意力机制更丰富

三、Transformer

Transformer相比起Seq2Seq模型,区别在于,Seq2Seq中RNN承担了Encoder、Decoder的角色,事实上,Encoder、Decoder可以由多种途径实现,Transformer中RNN不复存在,用的是多头注意力。因此Transformer是一种纯注意力机制的模型。
接下来在一个具体场景中学习Transformer。

目标:做文本翻译
数据集:包含翻译前后的文本,分别为Source和Target

1. 输入原文本Source

Source是单词,所以不能直接扔进神经网络去,需要先编码成向量,既不要损失词本身的信息,也不要损失词所在语句的位置的信息,那就干脆都编码,然后加起来。
输入处理

2. Encoder

Part 1
首先先经过多头注意力机制,然后Add&norm

  • Add指的是残差连接,使梯度流动更平稳,防止梯度消失/爆炸
  • norm本身归一化的目的是为了防止协变量偏移,提高泛化能力,归一化分为两种(层归一化对batch_size归一化,批归一化对dimension进行归一化),这里用的是层归一化
  • 关键:多头注意力机制对于注意力的表达更丰富,且本身“注意力”的含义就是对哪个词(所编码的向量)更有偏向(注意力分数,即权重矩阵),也就是说中英文语序这种问题不存在,是靠注意力机制来不定顺序翻译的

Part 2矩阵M是原本是三维张量,漏掉的n并不是随意漏的,而是因为翻译不应当和n相关(后面还会具体解释的),所以这一部分是为了丢掉n这个维度。

Encoder

3. 输入目标文本Target

Target
和Source是一样的,但是Target需要有**“Mask”**,为了避免模型过早“偷窥”到Target后面的内容

4.Decoder

上图也展示了Decoder的第一个多头注意力,还有第二个,第二个与之前的Encoder相连
Connection回忆注意力机制,现在把Encoder想成环境条件Key和Value,Decoder中已经出现的Target(没有被Mask的部分)词,你可能会对其中感兴趣也就是Query,那么你就懂上图为什么这么连了。
接着是熟悉的Dense,和Encoder一样。

Classification用一个Softmax决定生成哪个词,这里再次体现了Dense类似于1×1卷积层的功能。

Decoder

5. 反向传播进行训练

Back propagation图中打勾的部分是有参数能学的部分,由于输出是Softmax所以用交叉熵损失函数,链式法则反向传播更新参数。
注意一点,反向传播是等到所有词都依次通过一遍transformer后,再反向传播,以确保模型学习到了整个序列的上下文信息。

由于是翻译任务(有别于gpt那种生成式),还可以发现一个特点:翻译只能提前终止,不能延后终止(如果一次只能生成一个词,那么生成序列长度小于等于原序列)。

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

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

相关文章

Qt 项目(CMake)支持多国语言(2024/05)

目录 1.在工程手动创建languages文件夹2.修改CMakeLists.txt3.在qml上随便添加一下文字内容4.执行CMake5.把.ts和.qm添加到项目中6.翻译成英文的示例7.在main里面加载语言文件8.启动软件自动获取电脑的语言遗留问题 参考:Qt 项目(CMake)设置国际化支持 1.在工程手动创建langua…

AIGC中国开发者大会:AI Agent中国落地发展现状及多模态结合具身智能的发展展望

引言 2024年5月25日,第三届AIGC中国开发者大会在昆仑巢成功举办。本次大会围绕“AI Agent的国内应用现状及多模态结合具身智能的发展展望”这一主题,邀请了多位知名企业家、投资人以及技术专家,共同探讨大模型在中国各行各业的应用现状及未来…

基于粒子群算法的网络最优节点部署优化matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于粒子群算法的网络最优节点部署优化,实现WSN网络的节点覆盖最大化。 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 3.核心程序 .................…

Paddle Inplace 使用指南

Paddle Inplace 使用指南 1. 引言 在深度学习领域,框架的选择对模型的训练效率和资源消耗有着直接的影响。PaddlePaddle(飞桨)是一个由百度开发的全面、灵活和高效的深度学习平台。本文旨在介绍和分享 Paddle Inplace 机制的使用指南&#…

Java | Leetcode Java题解之第117题填充每个节点的下一个右侧节点指针II

题目: 题解: class Solution {Node last null, nextStart null;public Node connect(Node root) {if (root null) {return null;}Node start root;while (start ! null) {last null;nextStart null;for (Node p start; p ! null; p p.next) {if…

树莓派指令

1.常用指令 2.在终端窗口编辑文本文件 2.1nano编辑器 在文本里ctrlG就可以查看更多的快捷按键 2.2vi编辑器 进入默认为命令模式

【机器学习】MS_MARCO_Web_Search解析说明

MS MARCO Web Search:引领大型模型与信息检索的新纪元 一、引言:大型模型与信息检索的挑战二、MS MARCO Web Search数据集的特点三、MS MARCO Web Search数据集的应用五、结语 在信息爆炸的时代,如何高效、准确地从海量数据中检索出有价值的信…

opencascade V3d_PositionLight V3d_SpotLight 源码学习 (位置性)光源

Positional、Spot 和 Directional Light 类的基类。 类V3d_SpotLight 创造和修改光源的衰减因子 F 决定了表面的照明: F 1 / (ConstAttenuation() LinearAttenuation() * Distance) 其中 Distance 是从光源到表面的距离。默认值 (1.0, 0.0) 对应最小的衰减。浓…

数组长度属性的安排与深度学习中的数据类型探索

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、数组长度属性的理解与应用 1. 数组形状信息的获取 2. 数组形状的变换 3. 数组类型的指…

串口触摸屏键盘工作机理

一:键盘的实现原理 PW 是否显示为密码(内容仍为实际内容,仅仅显示出来为*):0-否;1-是。 可读,可通过上位机修改,可通过指令修改。 covx-变量类型转换? 串口屏上仅有两种数据类型,即数值和字符串类型,当需要将字符串…

UE5 UE4 快速定位节点位置

在材质面板中,找到之前写的一个节点,想要修改,但是当时写的比较多,想要快速定位到节点位置. 在面板下方的 Find Results面板中,输入所需节点,找结果后双击,就定位到该节点处。 同理,…

APM2.8如何做加速度校准

加速度的校准建议准备一个六面平整,边角整齐的方形硬纸盒或者塑料盒,如下图所示,我们将以它作为APM校准时的水平垂直姿态参考,另外当然还需要一块水平的桌面或者地面 首先用双面泡沫胶或者螺丝将APM主板正面向上固定于方形盒子上&…

每天五分钟深度学习:如何使用计算图来反向计算参数的导数?

本文重点 在上一个课程中,我们使用一个例子来计算函数J,也就相当于前向传播的过程,本节课程我们将学习如何使用计算图计算函数J的导数。相当于反向传播的过程。 计算J对v的导数,dJ/dv3 计算J对a的导数,dJ/da&#xf…

计算机组成原理----移码

在网上搜索移码是什么,大概率会搜到一个结论:移码是补码符号位取反,可是真的是这样吗? 传统的有符号整数是将二进制数的首位作为符号位,0表示正数,1表示负数。 但在移码中,我们不再使用单独的符号位来表示正负。而是通过一个固定的偏置量来将所有可能的指数值映射到一个无符…

[书生·浦语大模型实战营]——在茴香豆 Web 版中创建自己领域的知识问答助手

茴香豆是一个基于LLM的领域知识助手,可以用于解答群聊中的问题。接下来是创建过程。 1.打开茴香豆Web版,创建自己的领域库。 地址:茴香豆Web版 这里类似于注册账号,你输入知识库的名称以及密码,然后它就会创建一个知识…

计算机体系结构-2024期末考试

前言 最后一个字落笔,虽然知道并没有发挥到最好,内心还是感慨良多。 真正意义上本科阶段的课程考试,到此就结束了。 正如青春总有不完美的地方,此刻思绪竟飘到了三年前的盛夏,那个骄傲的少年。 扯远了,…

MFC里的工具栏按钮图标如何使用外部图片?

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

Spring和Servlet的整合

Servlet对象是谁创建的? 由服务器端创建的 程序启动调用加载spring配置文件代码 Web应用程序启动也需要加载Spring配置文件 Web开发中有三大组件: 1、servlet 2、filter 3、listener(request,session,application&…

语音控制系统的安全挑战与防御策略(上)

语音控制系统(VCS)提供了便捷的用户界面,涉及智能家居、自动驾驶汽车、智能客服等众多应用场景,已成为现代智能设备不可或缺的一部分。其市场规模预计到2023年达到70亿美元,这种扩张带来了重大的安全挑战,如…

【校园网网络维修】当前用户使用的IP与设备重定向地址中IP不一致,请重新认证

出现的网络问题:当前用户使用的IP与设备重定向地址中IP不一致,请重新认证 可能的原因: 把之前登录的网页收藏到浏览器,然后直接通过这个链接进行登录认证。可能是收藏网址导致的ip地址请求参数不一致。 解决方法: 方法…