李宏毅机器学习笔记-transformer

transformer是什么呢?是一个seq2seq的model。具体应用如上图所示,输入和输出的序列长度不固定,由model自己决定。
语音翻译指的是,直接输入一段语音信号,例如英文,输出的直接是翻译之后的中文。

seq2seq如今已经是一个应用非常广泛的模型,可以应用于NLP的各种任务,如语义分析,语义分类,聊天机器人等。另外还有个值得说明的功能是做multi label classification。
multi label classification。和multi class classificatio是完全不一样的,一个是多分类,另一个是一个样本可以有多个标签。但是多标签的问题,可以用seq2seq模型来解决。
我们可以想下,如果让你来做多标签分类问题,会有什么思路。
一般人可能会想到,集成学习中,对每个类别都输出一个概率,然后例如说取一个threshold,取得分最高的前3名就好了,这样每个样本就都可以得到多个标签了。
这样做的一个问题在于,有些样本可能是一个标签,有些可能是3个,这种threshold的方法不能从根本上解决问题。
使用的方法就是用seq2seq硬做,可以输入一篇文章,然后输出就是不同的类别,输出类别的个数由model自己决定。

ok,我们现在开始正式学习什么是seq2seq。一个完整的seq2seq通常由一个encoder和一个decoder组成。上图右侧即为一个transformer架构。左半部分为encoder,右半部分为decoder。

encoder要做的事情就在于,输入一排向量,输出另一排向量。这个过程由RNN或CNN,self-attention都可以做到。但在transformer中,使用的则是self attention。
encoder

之前的图较为复杂,我们使用更简洁一些的图来解释encoder。
如上图所示,一个encoder中由很多的block组成。注意,这里每个block并不是由一层的layer组成,而是好几层的layer。其中的一个block可能就如右侧所示,由一个self attention处理之后,再经过一个FC层得到进一步的输出。

在原始的那篇transfomer文章中,每个Block做的事情可能更为复杂。在self-attention的基础上还加入了residual connection的结构进去。什么意思呢,就是原本由self-attention,每个输入可以得到一个输出,这个输出是考虑了整个seq上下文信息的输出。但这个时候,我们在这个输出的基础上,再把原始的input加进去,这种思想就是residual connection.
做完residual connection之后,再做layer norm。这个layer norm很简单,就是输入一串序列[x1,x2,…,xk],输出另一串序列。对输入做的处理是计算均值和标准差,和zscore非常接近。
经过layer norm之后,讲输出经过一个FC,再和当前的值进行相加,最后再经过一个norm层,才是我们整个encoder最后的输出。最左侧的图和最右侧的图可以结合起来看。

现在,上述过程可以和前面那张较为复杂的图对应起来。复杂图里面多了一个positional encoding,因为在self attention必须考虑位置咨询,可以回归下self attention相关内容。然后上图中的Add & Norm就是residual connection 和layer norm的过程,feed forward则是一个Fully conneted network。另外,这里特地强调了是multihead attention。
注意,上述只是按照transformer原始论文所讲述的encoder的架构,其中一些模块的顺序也可以直接调换。
decoder
ok,我们接下来讲解decoder。

对于decoder主要有2种,我们主要先讲autoregression,AT。

在经过encoder之后,会得到一排中间向量,将这些向量输入到decoder中,用于产生输出。这里注意,在产生输出前,我们会加上一个begin的标志,在输出结束后,还有一个end的标志。这两个标志属于模型自己要学习的东西,因此,这样就可以做到模型自己决定输出的长度是多少了。
这里,decoder会将上一个时刻的输出作为下一个时刻的输入。
这种情况可能会导致一个error propagation的问题,即一步错导致步步错。
当然,这个error propagation是有处理的办法的,我们先无视这个问题。

我们先将encoder部分忽视,decoder则为上述的样子。

我们将encoder和decoder进行对比,可以发现,其实2者的区别还是很小的,只有2部分不太一样,一个是用马赛克盖住的部分,另一个是masked multi-head attention。

self attention和masked self attention的区别在于说,在普通的self attention中,我们由a1,a2,a3,a4生成b1,b2,b3,b4时,例如说生成b2,我们是考虑了a1,a2,a3,a4的所有信息的。
但是,在masked self attention中,我们要生成b2,只能考虑a1,a2的信息,不能考虑a3,a4的信息。
为什么要这样设计呢,我们乡下decoder的运作方式,输出是一个一个产生的,所以,只能考虑之前输出的信息。

我们下面来开始讲另一种decoder,Non-autoregressive, NAT。

前面有讲到说,AT是decoder一个一个生成输出的,而NAT是一次性生成所有的输出的,包括start和end。
这里就会有人有疑问,不是说输出长度可能是不固定的吗?但是NAT输出长度是固定的怎么办?
有2种思路,一种是另外再训练一个回归预测器,预测输出的长度。第二种是在输出的中间加入end,在end之后的输出就不管他了,当作没有输出一样。
encoder和decoder如何传递咨询的

ok,我们现在来讲下encoder和decoder之间的信息传递,也就是之前用马赛克盖住的那部分。这个过程也叫做cross attention。上图中左边2个箭头来自于encoder,右边1个来自于decoder。

具体来说呢,左边经过encoder之后会得到一系列的a1,a2,a3等输出向量,类似于self attention过程,产生k,v。右侧decoder经过masked self attention之后,得到一个输出向量q,由q,k之间计算得到attention acore α 1 ′ \alpha_{1}' α1′,与对应的v1相乘之后得到总的输出v,最后再进入FC层进行处理。这个过程就叫做cross attention。
train

ok,讲完encoder和decoder之后,我们需要讲下训练的部分。

这里跟普通的分类比较像,使用cross entropy作为损失函数。

这里,在训练decoder时,我们会讲正确的答案作为decoder的输入,这个过程叫做teacher forcing。
这里就需要讲下之前所提到的那个问题,decoder在训练时,输入是正确的答案,但是在测试时,没有正确的答案给到进行输入。那么decoder就很容易产生一步错,步步错的问题。这个问题也叫做exposure bias。一个可能解决该问题的方向是scheduled sampling,就是在训练decoder时偶尔喂给一些不正确的数据,提升decoder的处理问题的能力,就这么简单。
相关文章:
李宏毅机器学习笔记-transformer
transformer是什么呢?是一个seq2seq的model。具体应用如上图所示,输入和输出的序列长度不固定,由model自己决定。 语音翻译指的是,直接输入一段语音信号,例如英文,输出的直接是翻译之后的中文。 seq2seq如…...
基于Java的酒店管理系统
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…...
Go语言的单元测试与基准测试详解
文章目录 单元测试基准测试 单元测试 以一个加法函数为例,对其进行单元测试。 首先编写add.go文件: //add.go package mainfunc add(a, b int) int {return a b }其次编写add_test.go文件,在go语言中,测试文件均已_test结尾&a…...
【多态】为什么析构函数的名称统一处理为destructor?
析构函数的名称统一处理为destructor的目的是为了解决析构函数的重写。 而这又引出了一个问题:为什么要进行析构函数的重写? 是为了下面这种情况: class Person { public:~Person() { cout << "~Person" << endl; } }…...
6.4 Case Studies - A Simple Logging Archive Class
下面这段内容介绍了一个示例,目的是帮助澄清"归档概念(Archive Concept)"的用法,以便用户可以实现自己的归档类。simple_log_archive.hpp 实现了一个简单但实用的归档类,用于将任何可序列化类型以可读的格式…...
【深度学习实验】前馈神经网络(九):整合训练、评估、预测过程(Runner)
目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. __init__(初始化) 2. train(训练) 3. evaluate(评估) 4. predict(预测) 5. save_model 6. load_model 7. 代码整合 一、实验介绍 二、实验环境 本系列实验使用…...
002-第一代硬件系统架构确立及产品选型
第一代硬件系统架构确立及产品选型 文章目录 第一代硬件系统架构确立及产品选型项目介绍摘要硬件架构硬件结构选型及设计单片机选型上位机选型扯点别的 关键字: Qt、 Qml、 信号采集机、 数据处理、 上位机 项目介绍 欢迎来到我们的 QML & C 项目ÿ…...
Go基础语法:指针和make和new
8 指针、make、new 8.1 指针(pointer) Go 语言中没有指针操作,只需要记住两个符号即可: & 取内存地址* 根据地址取值 package mainimport "fmt"func main() {a : 18// 获取 a 的地址值并复制给 pp : &a// …...
039_小驰私房菜_Camera perfermance debug
全网最具价值的Android Camera开发学习系列资料~ 作者:8年Android Camera开发,从Camera app一直做到Hal和驱动~ 欢迎订阅,相信能扩展你的知识面,提升个人能力~ 一、抓取trace 1. adb shell "echo vendor.debug.trace.perf=1 >> /system/build.prop" 2. …...
Caché for Windows安装及配置
本文介绍在Windows上安装Cach的操作步骤。本文假设用户熟悉Windows目录结构、实用程序和命令。本文包含如下主要部分: 1)Cach安装...
代码随想录算法训练营20期|第四十六天|动态规划part08|● 139.单词拆分 ● 关于多重背包,你该了解这些! ● 背包问题总结篇!
139.单词拆分 感觉这个板块要重新刷,完全没有印象 class Solution {public boolean wordBreak(String s, List<String> wordDict) {Set<String> set new HashSet<>(wordDict);boolean[] dp new boolean[s.length() 1];dp[0] true;for (int i…...
系统安装(一)CentOS 7 本地安装
CentOS与Ubuntu并称为Linux最著名的两个发行版,但由于笔者主要从事深度学习图像算法工作,Ubuntu作为谷歌和多数依赖库的亲儿子占据着最高生态位。但最近接手的一个项目里,甲方指定需要在CentOS7上运行项目代码,笔者被迫小小cos了一…...
obsidian使用指南
插入代码块快捷键设置 插入代码块 用英文搜索快捷键名字 英文搜索的【Insert code block】对应的是 (6个点) 中文搜索的【代码块】对应的是 (2个点) 查看word、excel等非md文件设置 电脑端obsidian->设置->文件与链接->检测所有类型文件->…...
【ardunio】青少年机器人四级实操代码(2023年9月)
目录 一、题目 二、示意图 三、流程图 四、硬件连接 1、舵机 2、超声波 3、LED灯 五、程序 一、题目 实操考题(共1题,共100分) 1. 主题: 迎宾机器人 器件:Atmega328P主控板1块,舵机1个,超声波传感器1个&…...
MYSQL的存储过程
存储过程 存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。存储过程思想上很简单,就是…...
[kubernetes/docker] failed to resolve reference ...:latest: not found
问题描述: pod一直pending, kubectl describe pod ... 显示: Warning Failed 9s (x3 over 63s) kubelet Failed to pull image "mathemagics/my-kube-scheduler": rpc error: code NotFound desc failed to pull and unpack image "docker…...
彻底解决win11系统0x80070032
经过各种尝试,终于找到原因。第一个是电脑加密软件,第二个是需要的部分功能没有开启,第三个BIOS设置。个人觉得第三个不重要。 解决方法 笔记本型号 笔记本型号是Thinkpad T14 gen2。进入BIOS的按键是按住Enter键。 1、关闭山丽防水墙服务…...
解决因为修改SELINUX配置文件出错导致Faild to load SELinux poilcy无法进入CentOS7系统的问题
一、问题 最近学习Kubernetes,需要设置永久关闭SELINUX,结果修改错了一个SELINUX配置参数,关机重新启动后导致无法进入CentOS7系统,卡在启动进度条界面。 二、解决 多次重启后,在启动日志中发现 Faild to load SELinux poilcy…...
flask中的跨域处理-方法二不使用第三方库
方法1(第三方库) pip install flask-cors from flask import Flask from flask_cors import CORSapp = Flask(__name__) CORS(app, resources={r"/api/*": {"origins": ["http://localhost:63342", "http://localhost:63345"]}})方…...
矿山定位系统-矿井人员定位系统在矿山自动化安全监控过程中的应用
一,矿井人员定位系统现阶段使用的必要性 1,煤矿开采是一项非常特殊的工作,现场属于非常复杂多变的环境,井下信号极差,数据传输非常不稳定,人员安全难以保证,煤矿企业一直在研究如何使用更合适的…...
避坑指南:Unity热重载插件内存占用高?可能是Windows Defender在搞鬼
Unity热重载性能优化:解决Windows Defender导致的资源占用问题 当你在Unity开发过程中频繁修改C#代码时,热重载(Hot Reload)功能无疑是提升效率的利器。它能让你在游戏运行状态下即时看到代码修改效果,避免反复重启带来的时间浪费。然而&…...
3步实现专业级AI换脸:roop-unleashed创新方案指南
3步实现专业级AI换脸:roop-unleashed创新方案指南 【免费下载链接】roop-unleashed Evolved Fork of roop with Web Server and lots of additions 项目地址: https://gitcode.com/gh_mirrors/ro/roop-unleashed 在数字创意飞速发展的今天,AI换脸…...
nnU-Net v2实战:从零开始配置环境与训练自定义医学影像数据集
1. 环境配置:搭建nnU-Net v2的基础舞台 第一次接触nnU-Net时,我踩过的最大坑就是环境配置。当时为了赶项目进度,直接用了现有的Python 3.8环境,结果在安装时各种报错,浪费了大半天时间。后来才发现,nnU-Net…...
从0到1:手把手教你搭建VSCode(附避坑指南,拒绝报错),全程复制粘贴即可
🔥个人主页:北极的代码(欢迎来访) 🎬作者简介:java后端学习者 ❄️个人专栏:苍穹外卖日记,SSM框架深入,JavaWeb ✨命运的结局尽可永在,不屈的挑战却不可须臾或…...
怎么找到一个行业的源头工厂、绕开中间商?一套五步识别流程
你下了单,货到了,质量也还行。但心里一直有个疙瘩:这家供应商到底是自己在生产,还是从别处转手赚了你一道差价? 这个问题对采购方和跨境卖家不是洁癖,是真金白银。同一款产品,源头工厂和中间商的…...
终极指南:如何为你的Mac鼠标安装强大定制功能
终极指南:如何为你的Mac鼠标安装强大定制功能 【免费下载链接】mac-mouse-fix Mac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad! 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix Mac Mouse Fix是一款革命性的开源工具…...
别再让用户等上传!用@ffmpeg/ffmpeg在浏览器里直接压缩视频(附ThinkPHP项目实战)
浏览器端视频压缩实战:基于FFmpeg.wasm与ThinkPHP的高效集成方案 引言 在当今内容为王的互联网时代,视频已成为用户生成内容(UGC)的核心载体。然而,高清视频带来的大文件体积往往成为用户体验的瓶颈——上传等待时间长…...
智能体开发实战:从框架选型到部署优化的完整指南
1. 项目概述:一个为智能体开发者准备的“军火库”如果你正在或打算踏入智能体(Agent)开发这个领域,那么你很可能已经体会过那种“万事开头难”的迷茫。从选择哪个框架开始,到如何设计一个有效的智能体工作流࿰…...
数据质量保证:确保数据准确性和可靠性
数据质量保证:确保数据准确性和可靠性 一、数据质量保证概述 1.1 数据质量保证的定义 数据质量保证是指通过一系列技术和流程,确保数据的准确性、完整性、一致性和及时性的过程。它涉及数据采集、存储、处理和使用的各个环节,确保数据符合业务…...
大语言模型可靠性监测与压缩的谱方法研究
1. 大语言模型可靠性监测与压缩的谱方法研究概述在深度学习领域,大语言模型(LLM)和视觉语言模型(VLM)的可靠性问题与计算效率挑战日益凸显。模型幻觉(生成与输入无关或错误的内容)和分布偏移(面对训练数据分布外的输入时性能下降)会严重损害用户信任,而庞…...
