李宏毅机器学习(五)Transformer

学习内容

前情提要

Sequence-to-sequence(Seq2Seq)

输入是一个句子,输出长度不定; 下面的第一个是语音辨识,第二个是机器翻译,第三个是语音翻译。这三个都是独立的任务。
第三个是语音翻译,就是语音输入一个国家的语音,最后输出另一个国家的文字; 为什么需要第三个,因为第三个貌似可以根据前两个表示出来,这是因为有些国家的语音是没有文字的,那么这时候就需要语音翻译。

硬train

我们以Hokkien(台语、闽南语)为例训练网络:
注意语音翻译和语音辨识是不一样的!

所以我们就做了一个实验,“硬train一发”,不管任何背景音乐、噪音等等因素
后面两个倒装句其实并没有考虑到,所以第三种完全是有可能做到的!

Text-to-Speech 语音合成

我们通过单词解析出kk音节,并将音节送到decoder中解析生成语音。
现在还不是end-to-end的网络。

Seq2seq for Chatbot

聊天语音机器人。
通过训练数据来教机器人学习回答!

大多数NLP都可以是QA问题

比如阅读理解; 比如摘要; 比如情感分析!而QA问题又可以转为seq2seq问题。

深度学习与人类语言处理

但是不是所有的模型都转化为seq2seq,就好像所有都用瑞士军刀一样,切菜、砍柴,它需要一个最合适的模型。

Seq2seq for Syntactic Parsing

文法剖析; 就是将一句话中某些词链接起来就是动词片语、名词片语等等。 名词片语加动词片语就是一个句子等。 模型的输出本来就是一个model tree,但是我们可以把它转化为一个seq2seq。

这篇文章就是这样做的,当时都是用seq2seq做的翻译,所以这篇文章题目才叫将语法作为外文语言这一说法!

Seq2Seq for Multi-label Classification

注意multi-label不是multi-class,前者是一个物体可以属于多个class,但是后者呢则是一个物体只能属于一个class;
我们设置一个阈值,如果预测的结果大于某个值,那么它就属于该类别,但是这样肯定效果不会好。
所以我们将该问题定义为一个seq2seq问题,让机器自己决定输出几个class

Seq2Seq for Object Detection

目标检测同样可以硬解!!

Seq2seq

Seq2seq用途最广泛的就是Transformer!

Encoder

利用encoder输入一个向量,decoder输出一个向量,而Transformer中使用的是self-attention,右侧是原论文中的结构,不太好理解,我们换一个图;

这里不称一个Block是一个layer,是因为一个Block里面是有好几个layer在做的事情!

但是在Transformer中使用的是含有残差结构的输出! 不明白残差结构的,建议看看用在图像处理中的Resnet结构,通过加入这个结构之后拯救了深度学习,使得层数再次堆叠!
除此之外,这里的norm并不是batch normalization(BN层),而是layer Normalization(LN层)! 不需要考虑batch的资讯! BN中是不同feature、不同Example、相同dimension来计算mean、standard deviation LN中是同一feature、同一Example、不同dimension来计算mean、standard deviation
所以再次经过右侧后的输出才是整个block的输出!

我们再次看这个网络!
位置信息需要添加; 里面有三个箭头指的是多个单词! Multi-head Attention指的是self-attention的多头版; Add&Norm值的是残差和Layer Norm;最后再次经过我们上面的说的FC层+norm+残差结构!
结合上图的解释,这里就比较好理解了!

To learn more

还是可以创造更多的encoder的! 只需要调整中间的布局

Decoder

Autoregressive 自回归的(以语音辨识作为例子)!

我们通过Encoder之后,将我们的语音转化为vector,并将该vector投入到decoder中产生一段话。
但是怎么产生这一段话呢?
BOS(begin of sentence)
就是在你的lexicon(词典)里面多加一个Token,本来Decoder可能产生的文字里面呢,多加一个特殊的符号,多加一个特殊的文字,这个字就代表了开始,代表了Begin。
对于NLP中的每一个token,都可以把它用一个One-Hot的Vector来表示,所以BOS也是用One-hot来表示。
第一次:
我们的Decoder吐出一个变量,这个变量的大小和vocabulary的大小是一样的,vocabulary是根据你输出的单位而不同的,你要先定义好自己要输出什么。比如我们要输出中文,我们以为它要输出某些常用的3000字的方块字,那么就是3000维度; 比如英文中我们可以是字母,但是字母太少了,我们可以用词汇,词汇太多了,我们使用subword,将英语的词根词尾切出来表示。
所以这里的就是我们要输出的经过softmax后的分布,根据哪个分数最高定义我们的输出得到哪个;

第二次:
这里我们将有两个输入,“begin + 机

第三次:
这里我们将有三个输入: “begin+机+器

第四次:
这里我们将有三个输入: “begin+机+器+学

所以Decoder的输入是上一次的输出;
所以Decoder还是有错误的可能的,一步错步步错 ,也就是Error Propogation! 但是我们现在先无视这个问题!

看一下Decoder内部的结构

我们可以看到Encoder和Decoder之间的差异基本在于中间红色框中;
其二呢是Self-attention --》 Masked self-attention

masked self-attention

Self-attention 和 Masked self-attention的差距
只能考虑左边的资讯,不能考虑右边的资讯。

这里的自注意力是先有b1b^1b1再有b2b^2b2,是一个一个产生的,self-attention是多产生的;
所以我们并不知道输出的长度是多少,应该是seq2seq。 (语音识别,你是不知道啥时候停止)

所以这就像推文接龙了,需要有人冒险来给出“断”来终止继续往下接!!

所以我们只需要在“习”后面添加一个符号, 在我们学习到这个字后自己会输出一个“END”符号。

Non-autoregressive(NAT)

AT中我们假如要输出一个长度100的,那么AT Decoder需要运行100次; 但是NAT中只需要运行一次即可。但是也有问题,你怎么知道输出的长度呢? 需要自定义一个预测器来预测他的长度。
相比于AT而言优点就是速度要快,可以控制输出长度。
比如在语音合成中,你如果想让视频加速,那么你可以将NAT Decoder中的预测器的输出结果乘以2,那么就会使得Decoder输出更多!使得语音更快。
NAT是一个热门主题,因为NAT的表现还不如AT的好,因为中间有Multi-Modality问题

Encoder和Decoder是如何传递资讯的

Cross-attention

可以看到Encoder输入到Decoder中有两个!分别是下面的k和v。

我们以第二个字符作为例子来进行说明。
Decoder总是拿Encoder的最后一层的结果吗? 原始论文是这样的,但是我们可以不这样,因为Encoder是有很多层的,Decoder也是很多不同的层,那么你可以任意的链接,采用不同层的Encoder的输出。

Training

以语义识别为准,首先准备数据集,让工具人来打标签; 其次我们将做GT标记。 把该任务当作分类任务,最小化交叉熵。

①要使得交叉熵的总和最小
②这里我们每次的输入都是Groundtruth(也就是说不用上一次的输出,而是GT); 所以存在着MisMatch! 怎么解决后面说!

训练的Tips

Copy Mechanism

复制! 没有必要都是产生新的词!
Chat-bot

Summarization
产生摘要。 但是需要上百万的文章,需要文章 + 摘要!更需要Copy功能

Guided Attention
当我们输出比较短的词汇的时候,结果就不会好的

上面中的前几句话都是抑扬顿挫的读! 最后一个甚至直接读了一个字,而没有读“发”!
所以我们怎么让网络读所有的模型呢? 需要用到引导attention!

对于语音识别而言,我们的attention的顺序应该是确定的,不应该是跳跃的获取的,所以我们要提前定义attention的顺序! 这是强制性的! 而不是根据Attention scores的分数来定义输入!
Monotonic Attention 和 Location-aware attention是两个相关的论文

Beam Search

红色的线: 贪婪算法,我们一直选择最好的
绿色的线: 短期内是不好的,但是长时间下去是好的!
相当于读博士,短时间内是难的,但是在长期来说的是好的!
但是我们怎么会预知后面的结果呢? 这就需要我们先去预测,使用Beam Search!
Beam Search有时候有用 ,有时候没用!

但是Decoder是需要有随机性的! 如果是语音识别这种一对一的结果,那么使用Beam Search是最好的! 但是面对那种需要机器发挥点创造力的情况,我们是需要噪音的!
比如语音合成!

优化的参数

左边:训练的时候使用Cross Entropy
右边: 测试的时候使用的BLEU score,计算两个句子之间的距离
但是我们最后在Validation的时候,并不是选择的loss最小的model,而是使得BLEU分数最大的model;
所以问题是,我们可以不可以直接使用BLEU分数,给它加一个负号,使得它最小就可以了啊。
但是现实是, BLEU分数是不能微分的,你根本没办法算两个句子之间的! 而使用Cross Entropy可以计算单个词之间的距离!
口诀: 遇到你无法用Optimization解决的问题时,用RL硬Train一发就对了;
你无法optimization无法解决的Loss Function时候,把它当作是RL的Reward,把你的Decoder当作Agent,当作RL问题!

Exposure bias

如果我们只是喂正确的词,那么模型是没有处理错误输入的能力的!所以我们需要在训练的时候,给它添加噪音! 这种技术叫做“Scheduled Sampling”。但是它会影响模型的平行化的能力

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

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

相关文章

Asp.net中的时区

首先&#xff0c;日期时间转换在 Asp.net 中的几种应用&#xff1a; 1. <ASP:BOUNDCOLUMN DATAFIELD "JoinTime " DATAFORMATSTRING "{0:yyyy-MM-dd} " > <ITEMSTYLE WIDTH "18% " > </ITEMSTYLE > </ASP:BOUNDCO…

中文python笔记_Python学习笔记-基础篇

安装LinuxLinux已经自带Python了&#xff0c;我的Centos7自带Python2.7.4&#xff0c;我通过源码安装来更新版本。#!/bin/bash#源码安装wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgztar -zxvf Python-2.7.9.tgzcd Python-2.7.9#编译安装./configuremakemake…

python模块time_Python模块:time模块详解(转)

在平常的代码中&#xff0c;我们常常需要与时间打交道。在Python中&#xff0c;与时间处理有关的模块就包括&#xff1a;time&#xff0c;datetime以及calendar。这篇文章&#xff0c;主要讲解time模块。在开始之前&#xff0c;首先要说明这几点&#xff1a;在Python中&#xf…

李宏毅机器学习(六)自监督学习(一)

学习内容 前情提要 BERT与芝麻街 这些都是BERT的组件 BERT与进击的巨人 BERT&#xff08;340 M 参数&#xff09; ELMO&#xff08;94M&#xff09; GPT-2&#xff08;1542M&#xff09; Megatron&#xff08;8B&#xff09; T5&#xff08;11B&#xff09; Turing NLG&…

LeetCode 717. 1比特与2比特字符

1. 题目 有两种特殊字符。第一种字符可以用一比特0来表示。第二种字符可以用两比特(10 或 11)来表示。 现给一个由若干比特组成的字符串。 问最后一个字符是否必定为一个一比特字符。 给定的字符串总是由0结束。 示例 1: 输入: bits [1, 0, 0] 输出: True 解释: 唯一的编…

制作多系统启动盘教程_制作U盘启动盘教程

制作 U 盘启动盘图文教程 在笔记本电脑早已普及到会议室的这个年代&#xff0c;商务人士拿笔记本来演示 PPT 以及做电子版 的会议记录&#xff1b;在笔记本电脑已经普及到教室的这个年代&#xff0c;学生们甚至在用笔记本翻阅资料 进行开卷考试。随着笔记本电脑正在成为人们生活…

移动设备应用程序开发入门一:创建用于设备的 Windows 窗体应用程序并打包进行部署...

目标&#xff1a;了解如何使用 Visual C# 创建一个简单的 Hello World 应用程序&#xff0c;该应用程序可在 Pocket PC 上运行。 了解如何为应用程序创建随后可部署到智能设备上的 .cab 文件。 创建使用 Windows 窗体的设备项目 (Visual C#) 在 Visual Studio 中的“文件”菜单…

论文阅读笔记(五)【ACL 2021】Answering Ambiguous Questions through Generative Evidence Fusion and Round-Trip P

通过生成性证据融合和往返预测回答模糊问题 关键词&#xff1a; 生成性证据融合&#xff1b; 往返预测&#xff1b; 模糊问题 摘要 一般的开放域QA问题&#xff1a; 在开放域问答中&#xff0c;问题很可能是模棱两可的&#xff0c;因为用户在制定问题时可能不知道相关主题的…

c语言不会可以学好java吗_不会C语言能学Java吗

不会C语言能学Java吗&#xff1f;当然可以&#xff0c;学码思不少小伙伴没有任何代码基础&#xff0c;来这里Java培训学的也非常不错&#xff0c;都获得了理想的就业。现在时代不一样了&#xff0c;编程语言更新换代的速度也很快&#xff0c;很多老程序员都是从C语言入门&#…

ie下滚动条样式设置

项目中需要配置滚动条的样式&#xff0c;故做了如下小程序协助配置&#xff1a;这个是示例这个是示例这个是示例这个是示例这个是示例这个是示例这个是示例这个是示例这个是示例立体滚动条亮边的颜色&#xff1a;滚动条空白部分的颜色&#xff1a;立体滚动条凸出部分的颜色&…

李宏毅机器学习(七)自监督学习(二)BERT奇闻轶事

WHY does BERT work&#xff1f; BERT会考虑上下文&#xff01; 进行Word Embedding&#xff01;将一个单词表示成向量&#xff0c;比如苹果单词中的“果”和苹果公司中的“果”&#xff0c;在经过Embedding后虽然同样是同一个词&#xff0c;但是由于上下文不同&#xff0c;所…

vue 组件第一次不渲染问题_vue使用组件不渲染 只有代码变了才渲染

这个组件是一个chartimport { Line } from vue-chartjs;export default {extends: Line,mounted () {this.renderChart({labels: [January, February, March, April, May, June, July],datasets: [{label: success,backgroundColor: #FC2525,fill: transparent,data: [40, 39, …

LeetCode 747. 至少是其他数字两倍的最大数

1. 题目 在一个给定的数组nums中&#xff0c;总是存在一个最大元素 。 查找数组中的最大元素是否至少是数组中每个其他数字的两倍。 如果是&#xff0c;则返回最大元素的索引&#xff0c;否则返回-1。 示例 1: 输入: nums [3, 6, 1, 0] 输出: 1 解释: 6是最大的整数, 对于…

主从表主键外键

A表的主键在B表中充当外键&#xff0c;谁是主表&#xff0c;谁是子表&#xff1f; A为主表B为从表 个人认为&#xff1a; 外键是约束的一种。不存在主从关系&#xff0c;只存在引用关系&#xff0c;如部门表与员工表。每个员工都属于某个部门&#xff0c;必须与某个部门资料对应…

简单循迹小车实验心得_红外自动循迹小车实验报告

红外自动循迹小车实验报告 1摘要 本实验完成采用红外反射式传感器的自寻迹小车的设计与实现。采用与白色地面色差很大的黑色 路线引导小车按照既定路线前进&#xff0c;在意外偏离引导线的情况下自动回位&#xff0c;并能显示小车停止的时间。 本设计采用单片机STC89C51作为小车…

李宏毅机器学习(七)GPT的野望

前情提要 前面我们有说&#xff0c;BERT做的是什么&#xff1f; Bert做的是填空题&#xff01; GPT做的是什么&#xff1f; 做的是预测接下来要出现的Token是什么&#xff1f; 它里面的结构有点像Transformer中的Decoder GPT最有名的就是生成了一个关于独角兽的假新闻&#xf…

LeetCode 885. 螺旋矩阵 III

1. 题目 在 R 行 C 列的矩阵上&#xff0c;我们从 (r0, c0) 面朝东面开始 这里&#xff0c;网格的西北角位于第一行第一列&#xff0c;网格的东南角位于最后一行最后一列。 现在&#xff0c;我们以顺时针按螺旋状行走&#xff0c;访问此网格中的每个位置。 每当我们移动到网…

忆阻器的matlab建模_忆阻器Simulink建模和图形用户界面设计.PDF

忆阻器Simulink建模和图形用户界面设计( )第 卷第 期 西 南 大 学 学报 自然科学版 年 月33 9 2011 9( )Vol.33 No.9 JournalofSouthwestUniversit NaturalScienceEdition Se. 2011y p文章编号: ( )1673 9868201109 0050 07忆阻器Simulink建模和图形用户界面设计①胡柏林, 王丽…

李宏毅机器学习(八)自编码器(Auto-encoder)

前情提要 什么自监督学习&#xff1f; 做不需要标注资料的任务&#xff0c;比如做填空题&#xff0c;比如预测下一个任务&#xff01; 这个时候我们只需要对在自监督中训练的模型进行fine-tune就可以用在下游任务中了&#xff01; 但是在不需要标注的数据之前呢&#xff0c;在…