【Transformer】Transformer理论知识

news2024/11/15 21:03:24

Transformer目录

    • Transformer介绍
    • Seq2seq结构
      • Encoder结构
      • Decoder结构
        • Autoregressive Decoder(AT):
          • Encoder和Decoder对比和联系
          • Cross attention:
        • Non-autoregressive Decoder(NAT):
    • 训练Seq2seq Model的Tips
      • Copy Mechanism
      • Guided Attention
      • Beam Search
    • 评估标准
      • 训练VS测试 出现的问题:

Transformer介绍

Transformer就是一个sequence-to-sequenceSeq2seq)的module

  • 第三种:Seq2seq任务:输入 N N N 输出 N ′ N' N(由机器自己决定输出的个数)
  • 例如:语音辨识(一段声音变为文字)、机器翻译任务(文字变为其他语言文字)、语音翻译(一段语音翻译为其他语言文字)

语音辨识:输入声音,输出中文 就是语言辨识。(例如谷歌的pixel4,使用 N N N to N N N 的神经网络,使用RNN transducer
语音合成:输入中文,输出声音就是语音合成。 (音标—>语音 (使用seq2seq model))

  • Seq2seqNLP有很多应用,很多问题可以看成QA
    很多问题也可以使用Seq2seq硬解,例如文法剖析(Grammar as Foreign Language(14年文章)),例如Muti-label Classification(多标签分类,机器自己决定多少个class)、目标检测等。

Seq2seq结构

Seq2seq 结构会分为俩块:EncoderDecoder
input一个sequence由Encoder负责处理,将处理好的结果丢到Decoder决定输出什么样的sequence(起源:14年9月提出用于翻译(Sequence to Sequence Learning with Neural Networks) )

Encoder结构

Encoder:给一排向量输出另外一排向量。(CNN、RNN、Self-attention都可以做到)

:在 TransformerEncoder中用的就是Self-attention

Encoder中会分为很多个Block,每一个Block都是给一排向量输出另外一排向量(每一个Block是好几个 layer 在处理)
Block中是:给一排向量先做Self-attention,再做FC,再输出另外一排向量。
在这里插入图片描述

在原来 TransformerBlock更为复杂:

给一排向量先做Self-attention,再加上input(a+b)(称为residual),再做 Layer normalization(计算输入向量的meanstandard deviation,做normalize),再做FC(也做residual),再做 Layer normalization,再输出。
在这里插入图片描述
在这里插入图片描述
Add&Norm :意思就是加上residual + Layer norm

Bert 中也会再用到,Bert 其实就是Transformer中的Encoder

:原始的transformer架构并不一定是最好的,做Layer normalization再做residual更换顺序。(文章On Layer Normalization in the Transformer ArchitecturePowerNorm:Rethinking Batch Normalization in Transformers)。
下图(a)是原始的transformer架构,(b)是更换顺序的架构
在这里插入图片描述

Decoder结构

Decoder有俩种:Autoregressive DecoderAT)、Non-autoregressive (NAT

Autoregressive Decoder(AT):

使用语音辨识做例子(输入一段声音,输出文字)
Encoder:输入一段声音向量,输入另外一排向量 ——> Decoder 产生语音辨识的结果。

Decoder流程
BEGIN或者BOS(begin of seqence)(special token)(one-hot编码) ——>(softmax)中文每一个字对应一个数值(也包括END)——>例如输出“机”字概率最高输出“机”字 —— >
“机”Decoder新的 inputone-hot 编码)和BEGIN ——>输出“器”——> BEGIN、"机"、"器"input —— > 输出"学"——>…

在这里插入图片描述

Decoder 看到的输入其实是它在前一个时间点自己的输出。Decoder 需自己决定输出sequence的长度。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(其中"机"会被变成 one-hot 的向量"机"1 其他都是 0Decoder输出是一个几率的分布,会让这二者越接近越好,所以会计算Ground truthdistributioncross entropy越好)

:每一次 Decoder 在产生一个中文字的时候,其实就是做了一次分类的问题。Decoder的输入就是sequence正确的答案,也称为Teacher Forcing
在这里插入图片描述

Encoder和Decoder对比和联系

在这里插入图片描述

transformer Decoder中的Block
Masked Muti-Head attention——> Add&Norm ——>
Cross attentionEncoderDecoder 之间的桥梁)两个输入来自 EncoderDecoder 提供一个输入——>Muti-Head attention——>Add&Norm——>Feed Forward——>Add&Norm

:其中Masked Muti-Head attention指:
之前 Self-sattention 产生 b 1 b^1 b1 是考虑了 a 1 a^1 a1 ~ a 4 a^4 a4 ,现在只能考虑左边的,例如 b 1 b^1 b1 能考虑 a 1 a^1 a1 b 2 b^2 b2只能考虑 a 1 a^1 a1, a 2 a^2 a2
在这里插入图片描述

Cross attention:

在这里插入图片描述
在这里插入图片描述
Cross attention中:
q q q来自 Decoder k k k v v v 来自 Encoder

Cross attention一开始来自 Seq2seq 模型(文章 Listen,attend and spell做语音辨识ICASS2016),那时候的 EncoderDecoder 都还是使用LSTM,但是Cross attention已经有了,Cross attention比先Self-attention早诞生。
在原始 Transformer 中: EncoderDecoder 都有很多层, Decoder 无论哪一层都是拿 Encoder 的最后一层的输出。
但是也有很多不同Cross attention的方式:
在这里插入图片描述

Non-autoregressive Decoder(NAT):

Autoregressive Decoder(AT)Non-autoregressive Decoder (NAT)区别:
NAT是一个步骤产生一整个句子。
Non-autoregressive (NAT)把一堆一排的BEGINToken都丢给它,让它产生一排Token就结束了(一个步骤完成句子的生成)。

在这里插入图片描述
NAT如何解决输出的长度
一种解决方法:用另外一个 ClassifierEncoder 的输出来预测一个 Decoder 需输出的长度——>多少个BEGIN
另外一种解决方法:或者输入很多BEIGIN,在输出的时候定一个END,右边的舍弃。

NAT是由 Transformer 以后有 Self-attentionDecoder 以后才有的,以前是LSTM或者RNN就算给一排BEGIN也无法同时产生全部的输出,需一个一个产生。

语音合成现在都可以使用Seq2seq的模型来做,TacotronATDecoderFastSpeechNATDecoder
NATPerformance往往都不如ATDecoderMuti-Modality问题

训练Seq2seq Model的Tips

训练 Sequence To Sequence Model(不局限 Transformer )的Tips:

Copy Mechanism

之前讨论中都要求 Decoder 自己产生输出,对很多任务来说 Decoder 可能没有必要自己创造输出,而是从输出复制一些(例如对话机器人、摘要)

:最早有从输入复制东西能力的模型:Pointer Network 后来有变形的Copy Network(文章Incorporating Copyting Mechanism in Sequence-to-Sequence Learning

Guided Attention

Seq2seq可能会犯低级的错误,例如漏字了(例如语音辨识,语音合成TTS)
要求机器去 Guide 领导这个 attention 的过程,要求在做 attention 的时候有固定的方式
解决方法方法例如:Monotonic AttentionLocation-aware attention
在这里插入图片描述

Beam Search

每次 Decoder 输出那个分数最高的 Token ,找分数最高的字 称为 Greedy Decoding ,但是可能不是最好的。
Beam Search为了找一个 Approximate,找一个估测的 Solution。(可能不是特别精准的 Solution

:有时候对 Decoder 来说,Beam Search不一定就是好的(文章The Curious Case of Neural Text Degeneration),没有找出分数最高的路反而结果可能好(跟任务本身特性有关,答案明确的任务例如 语音辨识 Beam Search比较有帮助,需要创造力例如TTS语音合成比较差)

在这里插入图片描述

评估标准

BLEU scoreDecoder 产生一个完整句子后,再跟正确答案一整句做比较。

训练的时候我们是使用 minmize cross entropy,但是不一定可以 maximize BLEU score
所以在验证集中应该使用BLEU score

能否训练就使用BLEU score
答:在训练过程使用BLEU score乘负号作为 loss 不太能实现,因为BLEU score不能微分,BLEU score本身复杂,每一个中文字计算cross entropy才能做

训练VS测试 出现的问题:

测试的时候 Decoder 看到自己的输出,所以可能会看到错误的输出,例如“机”“气”(一步错,步步错),训练的时候看到是完全正确的,例如“机”“器”。
不一致的现象称为Exposure bias
在这里插入图片描述
解决方法:给 Decoder 的输入加入错误的东西,不要都是正确的(技术:Schedule Sampling(2015年提出,在LSTM就已经有,文章Original Scheduled Sampling、Scheduled Sampling for Transformer、Paraller Scheduled Sampling),但是会伤害 Transformer 平行化的能力)。

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

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

相关文章

基于ssm高校档案管理系统源码

档案管理作为企事业单位管理工作的基础,档案是企事业单位建设信息系统的重要组成部分,档案是提高企事业单位工作质量和工作效率的必要条件,甚至是维护历史真实面貌的一项重要工作。 1、档案信息数字化能够提供档案信息方便快捷的服务方式。 数…

量化风控的贷前实操课—详解的规则调优

风控全流程涉及贷前风控、贷中监控、贷后催收,每个模块都环环相扣,互相关联。而作为其中最关键模块的贷前风控,几乎是整个风控模块中最重要的部分,现金贷等互金产品重贷前、信用卡重贷中。 贷前风控是可以说整个防控中的第一道防线…

简单的CNN实现——MNIST手写数字识别

0.概述 此文章不涉及复杂的理论知识,仅仅只是利用PyTorch组建一个简单的CNN去实现MNIST的手写数字识别,用好的效果去激发学习CNN的好奇心,并且以后以此为基础,去进行一些改造。(前提是把基础代码看明白) 本…

java计算机毕业设计ssm社团管理系统0gl2e(附源码、数据库)

java计算机毕业设计ssm社团管理系统0gl2e(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。…

Android Room的使用详解

Android Room的使用详解 一:Room的基本介绍 Room 是 Android 架构组件的一部分,Room 持久性库在 SQLite上提供了一个抽象层,以便在充分利用 SQLite 的强大功能的同时,能够流畅地访问数据库。具体来说,Room 具有以下优…

【Linux Kernel 6.1 代码剖析】- 进程管理概论

目录 进程与线程的概念(内核线程和用户线程) 进程的3种基本状态 引入挂起后的7种基本状态 Linux 内核6.1 - 进程的8种详细状态 进程控制块 PCB SMP 架构 进程与线程的概念(内核线程和用户线程) 进程是正在运行的程序实体&a…

基于java+ssm+vue+mysql的旅游管理系统

项目介绍 随着现在网络的快速发展,网上管理系统也逐渐快速发展起来,网上管理模式很快融入到了许多企业的之中,随之就产生了“旅游信息管理系统”,这样就让旅游信息管理系统更加方便简单。 对于本旅游信息管理系统的设计来说&…

QDir(目录)

QDir 类提供对目录结构及其内容的访问,QDir 用于操作路径名、访问有关路径和文件的信息以及操作底层文件系统,它也可以用来访问Qt的资源系统。 Qt使用“/”作为通用目录分隔符,就像URL中的“/”用作路径分隔符一样。如果您始终使用“/”作为…

2022年大一学生实训作业【基于HTML+CSS制作中华传统文化传统美德网站 (6页面)】

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

【YOLOv7/YOLOv5系列算法改进NO.47】改进激活函数为GELU

文章目录前言一、解决问题二、基本原理三、​添加方法四、总结前言 作为当前先进的深度学习目标检测算法YOLOv7,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的检测难点,可以不同的改进方法。此后的系列…

SparkSQL - 介绍及使用 Scala、Java、Python 三种语言演示

一、SparkSQL 前面的文章中使用 RDD 进行数据的处理,优点是非常的灵活,但需要了解各个算子的场景,需要有一定的学习成本,而 SQL 语言是一个大家十分熟悉的语言,如果可以通过编写 SQL 而操作RDD,学习的成本…

ARM汇编之程序状态寄存器传输指令

ARM汇编之程序状态寄存器传输指令前言 首先,请问大家几个小小问题,你清楚: CLZ指令的常见使用场景;状态寄存器访问指令有哪些? 今天,我们来一起探索并回答这些问题。为了便于大家理解,以下是…

[附源码]Python计算机毕业设计SSM金牛社区疫情防控系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

[附源码]JAVA毕业设计老年人健康饮食管理系统(系统+LW)

[附源码]JAVA毕业设计老年人健康饮食管理系统(系统LW) 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项…

LeetCode 0542. 01 矩阵

【LetMeFly】542.01 矩阵 力扣题目链接:https://leetcode.cn/problems/01-matrix/ 给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 示…

MySQL数据库之存储引擎

MySQL数据库之存储引擎数据存储引擎介绍MyISAM数据引擎概述MyISAM的特点介绍及数据引擎对应文件MyISAM的存储格式分类MyISAM适用的生产场景举例InnoDB数据引擎概述InnoDB特点介绍及数据引擎对应文件InnoDB适用生产场景分析企业选择存储引擎的依据如何配置存储引擎查看系统支持的…

c<8>指针

目录 2,指针的赋值 2.1C语言允许指针赋值为0(初始化) 2.2指针赋值例 2.3输出指针的值 3,用指针引用数组 3.1利用指针输入数组 3.2优先级问题 4.多维数组 5.字符串 5.1通过指针引用字符串 4.函数中对指针的应用 4.1将指针变…

[附源码]计算机毕业设计车源后台管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Acer W700废物利用- 第一章 - 安装Linux系统Debian 11.5

前言 收拾房子时在犄角旮旯发现了一台N年前的Windows平板,也就是今天的主角:Acer W700 ,机器配置是:CPU:I5-3337U;内存:4G;硬盘:128G固态; 插上充电线&…

YOLOv5图像分割--SegmentationModel类代码详解

目录 ​编辑 SegmentationModel类 DetectionModel类 推理阶段 DetectionModel--forward() BaseModel--forward() Segment类 Detect--forward SegmentationModel类 定义model将会调用models/yolo.py中的类SegmentationModel。该类是继承父类--DetectionModel类。 cl…