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

李宏毅机器学习笔记-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则为上述的样子。
在这里插入图片描述
我们将encoderdecoder进行对比,可以发现,其实2者的区别还是很小的,只有2部分不太一样,一个是用马赛克盖住的部分,另一个是masked multi-head attention
在这里插入图片描述
self attentionmasked 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的运作方式,输出是一个一个产生的,所以,只能考虑之前输出的信息。
在这里插入图片描述
我们下面来开始讲另一种decoderNon-autoregressive, NAT
在这里插入图片描述
前面有讲到说,ATdecoder一个一个生成输出的,而NAT是一次性生成所有的输出的,包括startend
这里就会有人有疑问,不是说输出长度可能是不固定的吗?但是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,讲完encoderdecoder之后,我们需要讲下训练的部分。
在这里插入图片描述
这里跟普通的分类比较像,使用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的目的是为了解决析构函数的重写。 而这又引出了一个问题&#xff1a;为什么要进行析构函数的重写&#xff1f; 是为了下面这种情况&#xff1a; class Person { public:~Person() { cout << "~Person" << endl; } }…...

6.4 Case Studies - A Simple Logging Archive Class

下面这段内容介绍了一个示例&#xff0c;目的是帮助澄清"归档概念&#xff08;Archive Concept&#xff09;"的用法&#xff0c;以便用户可以实现自己的归档类。simple_log_archive.hpp 实现了一个简单但实用的归档类&#xff0c;用于将任何可序列化类型以可读的格式…...

【深度学习实验】前馈神经网络(九):整合训练、评估、预测过程(Runner)

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. __init__(初始化) 2. train(训练) 3. evaluate(评估) 4. predict(预测) 5. save_model 6. load_model 7. 代码整合 一、实验介绍 二、实验环境 本系列实验使用…...

002-第一代硬件系统架构确立及产品选型

第一代硬件系统架构确立及产品选型 文章目录 第一代硬件系统架构确立及产品选型项目介绍摘要硬件架构硬件结构选型及设计单片机选型上位机选型扯点别的 关键字&#xff1a; Qt、 Qml、 信号采集机、 数据处理、 上位机 项目介绍 欢迎来到我们的 QML & C 项目&#xff…...

Go基础语法:指针和make和new

8 指针、make、new 8.1 指针&#xff08;pointer&#xff09; Go 语言中没有指针操作&#xff0c;只需要记住两个符号即可&#xff1a; & 取内存地址* 根据地址取值 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.单词拆分 感觉这个板块要重新刷&#xff0c;完全没有印象 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最著名的两个发行版&#xff0c;但由于笔者主要从事深度学习图像算法工作&#xff0c;Ubuntu作为谷歌和多数依赖库的亲儿子占据着最高生态位。但最近接手的一个项目里&#xff0c;甲方指定需要在CentOS7上运行项目代码&#xff0c;笔者被迫小小cos了一…...

obsidian使用指南

插入代码块快捷键设置 插入代码块 用英文搜索快捷键名字 英文搜索的【Insert code block】对应的是 (6个点) 中文搜索的【代码块】对应的是 &#xff08;2个点&#xff09; 查看word、excel等非md文件设置 电脑端obsidian->设置->文件与链接->检测所有类型文件->…...

【ardunio】青少年机器人四级实操代码(2023年9月)

目录 一、题目 二、示意图 三、流程图 四、硬件连接 1、舵机 2、超声波 3、LED灯 五、程序 一、题目 实操考题(共1题&#xff0c;共100分) 1. 主题&#xff1a; 迎宾机器人 器件&#xff1a;Atmega328P主控板1块&#xff0c;舵机1个&#xff0c;超声波传感器1个&…...

MYSQL的存储过程

存储过程 存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合&#xff0c;调用存储过程可以简化应用开发人员的很多工作&#xff0c;减少数据在数据库和应用服务器之间的传输&#xff0c;对于提高数据处理的效率是有好处的。存储过程思想上很简单&#xff0c;就是…...

[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

经过各种尝试&#xff0c;终于找到原因。第一个是电脑加密软件&#xff0c;第二个是需要的部分功能没有开启&#xff0c;第三个BIOS设置。个人觉得第三个不重要。 解决方法 笔记本型号 笔记本型号是Thinkpad T14 gen2。进入BIOS的按键是按住Enter键。 1、关闭山丽防水墙服务…...

解决因为修改SELINUX配置文件出错导致Faild to load SELinux poilcy无法进入CentOS7系统的问题

一、问题 最近学习Kubernetes&#xff0c;需要设置永久关闭SELINUX,结果修改错了一个SELINUX配置参数&#xff0c;关机重新启动后导致无法进入CentOS7系统&#xff0c;卡在启动进度条界面。 二、解决 多次重启后&#xff0c;在启动日志中发现 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"]}})方…...

矿山定位系统-矿井人员定位系统在矿山自动化安全监控过程中的应用

一&#xff0c;矿井人员定位系统现阶段使用的必要性 1&#xff0c;煤矿开采是一项非常特殊的工作&#xff0c;现场属于非常复杂多变的环境&#xff0c;井下信号极差&#xff0c;数据传输非常不稳定&#xff0c;人员安全难以保证&#xff0c;煤矿企业一直在研究如何使用更合适的…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...