2022最新版-李宏毅机器学习深度学习课程-P32 Transformer

news2024/9/20 6:28:16

一、 seq2seq

 1. 含义

输入一个序列,机器输出另一个序列,输出序列长度由机器决定。

文本翻译:文本至文本;  语音识别:语音至文本;  语音合成:文本至语音;  聊天机器人:语音至语音。

2. 应用

①  自然语言处理(NLP问题),不过seq2seq有时候不一定是最佳的解决方法。

②  应用于Seq2seq for Syntactic Parsing句法分析(文法剖析),例如,给机器一段文字,Deep learning is very powerful,机器要做的事情是产生一个文法的剖析树 。

输出结果(剖析树)告诉我们,deep 加 learning 合起来是一个名词短语,very 加 powerful 合起来是一个形容词短语,形容词短语加 is 以后会变成一个动词短语,动词短语加名词片语合起来是一个句子

文法剖析要做的事情就是产生这样子的一个 Syntactic tree,所以在用 deep learning 解决 文法剖析的任务里面,输入是一段文字(一个Sequence),输出是一个树状的结构,(可以把他看作是一个Sequence,一个代表句法分析树的序列)

③  应用于 multi-label classification(多标签分类问题:同一个对象可以属于多个class)

 

 区分:

  • multi-class classification:为样本从数个 class 中选择某一个 class(多对一)
  • multi-label classification:同一个样本可以属于多个 class (一对多)

难点:每篇文章对应几个 class 不好确定 ⇒ seq2seq 决定要输出几个

④  Object Detection 物体检测

3.  Seq2seq 实现方式

seq2seq's model = Encoder(编码器) + Decoder(解码器)

这两部分可以使用RNN或transformer实现,seq2seq主要是为了解决输入和输出长度不确定的情况。

Encoder:将输入(文字、语音、视频等)编码为单个向量,这个向量可以看成是全部输入的 抽象表示

Decoder:接受 encoder 输出的向量,逐步解码,一次输出一个结果,每次输出会影响下一次的输出,开头加入 <BOS> 表示开始解码, <EOS> 表示输出结束。

①   Encoder

用途:输入一排向量(序列),输出另外一排同样长度的向量(序列)

可以使用:Self-attention,RNN,CNN

 A、encoder 就是通过多层 block(模块),将输入转换成向量。每一个 block 都包含若干层( self-attention 和 fully connect 等网络结构 ),每个 block 输入一排向量,输出相同数量的一排向量。

B、 block 的内部细节构成如下(在 input 送入 block 之前,需先进行 positional encoding,这个知识点在 self - attention 中有提过)。

C 、 它考虑所有输入向量后的输出向量,其中 b 是原来的 input 向量,经过残差网络(residual connection:把 a vector 加上它的 b  input  vector 作为 output )和标准化后,送到全连接神经网络 FC ,由于在 FC network 中也有 residual 的架构,因此需要再经过一组 残差网络 + 标准化 后得到输出。(注意:这里的标准化是 layer normalization 而不是 batch normalization)。这个输出才是 residual network 里一个 block 的输出。

batch normalization:对 不同的 example 不同 feature 的 同一个 dimention 去计算平均值 mean 和标准差 standard deviation。
layer normalization:对 同一个 example  同一个 feature的 不同 dimention 去计算平均值 mean 和标准差 standard deviation。

 

 ②  Decoder

decoder主要有两种:AT(autoregressive)与 NAT(non-autoregressive),Decoder 要做的事情:产生最终的输出结果

A、autoregressive(AT)decoder :以语音辨识为例

1. 向 Decoder 输入 Encoder 产生的向量

2. 在 Decoder 可能产生的文字库里多加一个标识字符 BEGIN ,它代表 “ Decoder 开始识别” 来提醒机器(BOS: begin of sentence)

NLP 的问题中,每一个 Token 用一个 One-Hot 的 Vector 来表示,其中正确的类别标识是 1,其他都是 0,其中 BEGIN 也是用 One-Hot Vector 来表示

3. 经过 softmax 之后,Decoder 会输出一个和 输入的 Vocabulary Size 一样的向量长度的 向量结果。对比已知文字库,找到相似度最高的字符就是最终输出的字符。(这里“机”字 就是这个 Decoder 的第一个输出)

Vocabulary Size:取决于你输出的单位。比如输出中文,则size是中文方块字的数目。

4. 再把上一步的输出当做下一个的输入。(在本例中,第二次 Decoder 把 “机” 当做是 Decoder 的 Input,在上一步 “机” 是 Decoder 的输出结果)经过一系列相同的操作后我们会得到第二次 Decoder 的输出,再作为第三次的输入,继续输出后续的文字,以此类推……

 5.  机器自己决定输出的长度:一个特别的标识符 ”END” 代表工作结束

 总结: 除了中间的部分,Encoder 跟 Decoder 并没有太大的差别。最后我们可以再做一个 Softmax,可以通过计算输出的概率分布与 Ground Truth 之间的 交叉熵(Cross Entropy)并求梯度实现优化,交叉熵的值越小越好。

 缺点:如果Decoder 看到错误的输入,让 Decoder 产生错误的输出并被代入到下一步 Decoder 工作的输入中,会会造成 Error Propagation(一步错,步步错)⇒  解决:Teacher Forcing技术 (但是测试的时候 显然没有正确答案可以给 Decoder 看)

由于 Teacher Forcing的存在,训练跟测试的情景不一致。Decoder 在训练的时候永远只看过正确的东西,但是在测试的时候,仍然会导致一步错、步步错。

解决:给 Decoder 的输入加一些错误的东西  ⇒ Scheduled Sampling(但是也会一定程度损害平行化的能力)

B、Non-autoregressive (NAT) decoder

 ① 特点:NAT 不是依次有序进行 decoder 工作并挨个输出,而是一次性在输入时赋予 整个句子 一整排的 “ BEGIN ” 标识,把整个句子的 decoder 结果一次性都输出

 ② 思路:如何确定BEGIN的个数:

  1. 另外训练一个 Classifier,输入 Encoder 的 Input vector,输出是一个数字(代表 Decoder 应该要输出的长度)
  2. 给它若干个 BEGIN 的 Token,比如输出句子的最大长度不超过 300,就给 input  300 个 BEGIN token,然后就会相应地一次性输出 300 个字(遇到有输出 END 时表示这个句子输出结束),但是可能会比较耗费内存空间

③ 好处:

  1. 并行化。NAT 的 Decoder 不管 input 句子的长度大小,都是一次性输出完整的句子结果,所以在执行速度上 NAT 的 Decoder 比 AT 的 Decoder 要快
  2. 容易控制输出长度。

④ 应用

 常用在语音合成,例如:利用其中一个 决定 NAT 的 Decoder 应该输出的长度的 Classifier,我们可以通过设置这个输出长度的大小以调整语音的速度。(如果要让输出的语音讲快一点,就把 Classifier 输出的长度数值 除以 N,它讲话速度就变成 N 倍速;同理,如果想要合成的语音变为慢速,就把 Classifier 输出的长度数值乘 N 倍)

⑤ 缺点:虽然 NAT 看起来有很多优点(尤其是并行化),但是 NAT 的 Decoder 实际上 Performance 往往都不如 AT 的 Decoder。为什么NAT 没有 AT 实际效果好  ⇒ Multi-Modality   参考链接

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

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

相关文章

window11最新版终于可以取消任务栏合并了

windows11一个软件开了多个窗口之后&#xff0c;会自动合并任务栏&#xff0c;很不方便选择其中一个窗口&#xff0c;且没有选项能关闭这一配置 今日发现&#xff0c;最新版完善了这一功能&#xff0c;现在可以关闭自动合并任务栏了 右击任务栏&#xff0c;选择任务栏设置选择…

518抽奖软件,奖项相互穿插抽奖的方法

518抽奖软件简介 518抽奖软件&#xff0c;518我要发&#xff0c;超好用的年会抽奖软件&#xff0c;简约设计风格。 包含文字号码抽奖、照片抽奖两种模式&#xff0c;支持姓名抽奖、号码抽奖、数字抽奖、照片抽奖。(www.518cj.net) 奖项穿插的方法 比如公司年会&#xff0c;共…

程序员如何提高自己的代码能力呢?

前言 程序员如何提高代码能力&#xff1f;个人认为代码能力比较强的程序员应该具备良好的编码习惯并可以输出高质量的代码实现的特征。那么程序员如何提高代码能力的问题&#xff0c;就变成了怎么才能成为一个具备良好编码习惯并可以输出高质量代码实现的程序员。其实很简单&am…

打造智慧矿山-触觉智能软通动力强强联合,助力矿鸿生态

2023年10月25-28日&#xff0c;两年一度的中国国际煤炭采矿技术交流及设备展览会在首都北京隆重召开&#xff0c;本届大会以“智能引领未来&#xff0c;绿色共享发展”为主题&#xff0c;作为国内煤炭行业的顶级盛会&#xff0c;由中国煤炭工业协会牵头举办的这次展出吸引了全世…

美术培训服务预约小程序的作用是什么

线下培训教育机构很多&#xff0c;涉及到的行业及种类很多&#xff0c;美术培训就是其中较为重要的一类&#xff0c;尤其是青少年群体&#xff0c;其拓展度很深&#xff0c;而对商家来说&#xff0c;其主要生源在本地同城&#xff0c;因此品牌宣传和渠道发展、学员赋能很重要。…

同花顺滑块

要是不去尝试就先放弃&#xff0c;我会对自己很失望。 网址&#xff1a;https://upass.10jqka.com.cn/login太无聊了&#xff0c;学了一下&#xff0c;验证码全是明文&#xff0c;没啥加密的。 这个都没啥可以说的&#xff0c;然后的话就没然后了 。 好心人留下源码&#xff1…

使用 docker-compose 部署 SpringBoot 项目 nginx 部署前端

安装 Docker 自动下载 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun检查是否安装成功 docker -v配置镜像仓库 更换镜像加速器&#xff08;推荐阿里云&#xff09; 容器镜像服务 (aliyun.com) 扫码登录后找到镜像仓库 每个人都不同&#xff0c;复…

基于深度学习的人脸识别系统 计算机竞赛

前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的人脸识别系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/…

1.PPT高效初始化设置

1.PPT高效初始化设置 软件安装&#xff1a;Office 2019 主题和颜色 颜色可以在白天与黑夜切换&#xff0c;护眼 切换成了黑色 撤回次数 撤回次数太少&#xff0c;只有20次怎么办 自动保存 有时忘记保存就突然关闭&#xff0c;很需要一个自动保存功能 图片压缩 图片…

保姆级,Fiddler抓包辅助-抓取APP端数据包,看这篇就足够了...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 做接口测试的时候…

数据结构和算法——用C语言实现所有图状结构及相关算法

文章目录 前言图的基本概念图的存储方式邻接矩阵邻接表十字链表临界多重表 图的遍历最小生成树普里姆算法&#xff08;Prim&#xff09;克鲁斯卡尔算法&#xff08;Kruskal&#xff09; 最短路径BFS求最短路径迪杰斯特拉算法&#xff08;Dijkstra&#xff09;弗洛伊德算法&…

python:使用gdal和numpy进行遥感时间序列最大值合成

作者:CSDN @ _养乐多_ 本文将介绍使用python编程语言,进行遥感数据时间序列最大值合成的代码。代码中使用了numpy和gdal,通过numpy广播机制实现时间序列最大值合成,并以NDVI时间序列数据为例。代码方便易运行,逻辑简单,速度快。只需要输入单波段遥感数据,就可输出最大值…

宝兰德BES应用服务器部署应用报错:java.lang.OutOfMemory:Metspace

问题现象&#xff1a;使用宝兰德BES应用服务器部署应用时报错&#xff0c;报错日志大致如下&#xff1a; 提示&#xff1a;ERROR SpringApplication run failed java.lang.OutOfMemoryError:Metaspace 此前在TongWeb部署环境时也有遇到类似问题&#xff1a;TongWeb的OutOfMem…

三维地图数据共享与统一存储

这家总部位于北京的高新企业是一家致力于三维数字地理技术的领军企业&#xff0c;提供中国领先的三维数据获取服务&#xff0c;并依据三维数据自动建模云计算服务、提供全国性的地图与位置服务。这项技术其实我们每天都有可能用到&#xff0c;例如百度地图、高德地图就属于三维…

vue实现一个账号在同一时间只有一个能登录的效果

目录 1.实现方法 2.实现示例 1.实现方法 要实现一个账号在同一时间只有一个能登录的效果&#xff0c;你可以使用以下步骤来实现&#xff1a; 在后端服务器端设置一个标志位&#xff0c;用于标记用户是否已登录。这个标志位可以存储在数据库中或者缓存在服务器内存中。当用户…

一年时间如何能掌握 C++ ?

一年时间如何能掌握 C &#xff1f; 建议不要把掌握c作为一个一年的目标。 C的外延太广&#xff0c;就是应用领域、面向对象、设计模式等等。C语法和标准库本身是有限的。 最近很多小伙伴找我&#xff0c;说想要一些C资料&#xff0c;然后我根据自己从业十年经验&#xff0c;…

缓存和数据库一致性解决方案

引入缓存提高性能 如果你的业务处于起步阶段&#xff0c;流量非常小&#xff0c;那无论是读请求还是写请求&#xff0c;直接操作数据库即可&#xff0c;这时你的架构模型是这样的&#xff1a; 但随着业务量的增长&#xff0c;你的项目请求量越来越大&#xff0c;这时如果每次都…

期中考成绩一键私发

作为一名教师&#xff0c;期中考试后最繁忙的事情之一就是发布成绩。每个学生都希望尽快知道自己的成绩&#xff0c;而作为老师&#xff0c;我们需要一种更高效、更方便的方式来完成这项任务。今天&#xff0c;我就来给大家介绍一种成绩查询系统&#xff0c;让我们一起告别繁琐…

【接口自动化测试框架】YAML管理接口框架配置的最佳实践

管理接口框架配置是构建强大的接口测试框架的关键一环。良好的配置管理可以提高测试效率、可维护性和可扩展性。在本文中&#xff0c;我们将重点介绍使用YAML&#xff08;YAML Ain’t Markup Language&#xff09;来管理接口框架配置的最佳实践&#xff0c;并通过实例演示其用法…

肺癌不再是老年病:33岁作家的离世引发关注,有这些情况的请注意

近期&#xff0c;90后网络小说家七月新番和26岁男艺人蒋某某因肺癌去世&#xff0c;引发关注。他们都没有吸烟习惯&#xff0c;那么他们为什么会得肺癌呢&#xff1f;浙大二院呼吸内科副主任医师兰芬说&#xff0c;现在年轻人熬夜、加班导致身体过劳&#xff0c;在劳累情况下身…