transformer(李宏毅老师系列)

news2024/9/21 8:00:22

自学参考:
Transformer:Attention Is All You Need
Transformer论文逐段精读
视频课
课件+资料
笔记

一、引入

  • seq2seq:输入一个序列的向量作为input,output的长度由机器自己决定
  • seq2seq model应用:
    • 语音辨识
      输入是声音讯号的一串vector
      输出是语音辨识结果,即声音讯号对应的文字,输出长度由机器自行决定
      在这里插入图片描述

    • 机器翻译
      输入一种语言的句子,长度为N
      输出另一种语言的句子,长度为N’,N和N’之间的关系由机器自行决定
      在这里插入图片描述

    • 语音翻译
      输入一种语言的语音
      输出另一种语言的文字
      不能用以上两种简单拼接,因为很多语言并没有对应的文字(例如一些方言)
      在这里插入图片描述

    • 语音合成Text-to-Speech (TTS) Synthesis
      输入文字
      输出声音讯号
      在这里插入图片描述

    • 聊天机器人Chatbot
      输入和输出都是文字,利用人的对话进行train
      在这里插入图片描述

    • 问答系统Question Answering (QA)
      输入和输出都是文字序列
      许多nlp任务,都可以解读为QA任务,例如翻译、摘要、情感分析。而QA问题就可以用seq2seq model来解决
      在这里插入图片描述

    • 语法分析Syntactic Parsing
      树状结构也可以视为一个sequence,从这个角度切入语法分析问题也可以视为:
      输入一个语句
      输出一个代表语法分析树的序列
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    • 多标签分类multi-label classification

      • multi-class classification:从多个class里为样本选某一个class
      • multi-label classification:同一个样本,可属于多个class
        在这里插入图片描述
    • 实体检测Object Detection
      在这里插入图片描述

二、 seq2seq’s model =Encoder + Decoder

在这里插入图片描述

encoder

输入一排向量(序列)
输出另一排同样长度的向量(序列)
可使用self-attention、RNN、CNN
在这里插入图片描述

  • 进一步分析,每个block都包含若干层(例如下图中是self-attention&FC)
    每个block输入一排向量,输出一排向量
    在这里插入图片描述
  • 在transformer中:
    在这里插入图片描述
    在送入block前,要先进行positional encoding
    在这里插入图片描述
  • 每个block中的架构为
    • multi self-attention
    • residual connection:把这个vector加上其input作为output(残差网络)
    • layer normalization:对同一个feature,同一个example,不同的dimension,计算mean和standard deviation

    区别:batch normalization:是对不同example,不同feature的同一个dimension,计算mean跟standard deviation

    • FC network也有residual架构
    • 把residual结果再做一次layer normalization得到的输出才是residual network里一个block的输出

decoder

以Autoregressive Decoder为主(AT)

  1. 向decoder输入encoder产生的向量

  2. 在decoder可能产生的文字里多加一个特殊字符BEGIN(BOS,begin of sentence)。在nlp问题中,每个token用一个one-hot的vector来表示,其中一维是1,其他全0,而BEGIN也用one-hot vector表示

  3. decoder输出的一个向量长度和vocabulary size(取决于输出的单位。本例中输出中文,则size是中文方块字的数目)一样。在产生这个向量前,跑一个softmax,分数最高的一个中文字,即为最终的输出
    在这里插入图片描述

  4. 把“机”作为decoder新的input,原来decoder的输入有BEGIN和“机”;
    根据这两个输入,输出一个蓝色的向量;
    根据这个蓝色的向量里给每一个中文的字的分数,来决定第二个输出,再作为输入,继续输出后续的字,以此类推……
    decoder会把自己的输出作为接下来的输入之一,当decoder看到错误的输入,再被decoder自己吃进去,可能会造成error propagation,一步错步步错
    ⇒解决:teacher forcing技术
    在这里插入图片描述

  5. 机器自行决定输出的长度:特别符号END(EOS)
    在这里插入图片描述
    在这里插入图片描述

  • 在transformer中,除了中间部分,encoder和decoder没有太大的差别。最后部分,可能会再做一个softmax,使得它的输出变成一个概率分布
    在这里插入图片描述
  • Masked self-attention:产生输出时,不能再看”右边“的部分
    ⇒因为实际上就是顺次产生的
    在这里插入图片描述
    Non-autoregressive (NAT)
    NAT不是依次产生,而是一次吃的是一整排的 BEGIN 的 Token,把整个句子一次性都产生出来
    问题:如何确定BEGIN的个数?
    • 方法①: 另外训练一个 Classifier,吃 Encoder 的 Input,输出是一个数字,代表 Decoder 应该要输出的长度,
    • 方法②:给它一堆 BEGIN 的 Token,(比如输出的句子的最大长度长度,不超过 300),给它 300 个 BEGIN,然后就会输出 300 个字。什麼地方输出 END表示这个句子结束。

NAT的好处:

  1. 并行化。NAT 的 Decoder 不管句子的长度如何,都是一个步骤就产生出完整的句子,所以在速度上,NAT 的 Decoder 比AT 的 Decoder 要快,
  2. 容易控制输出长度。

常用在语音合成:有一个 Classifier决定 NAT 的 Decoder 应该输出的长度,并以此调整语音的速度。比如,要让你的系统讲快一点,那你就把那个 Classifier 的 Output 除以二,它讲话速度就变两倍快;如果你想要这个讲话放慢速度,就把Classifier 输出的长度乘两倍。
但是,虽然表面上看起来有种种的厉害之处,尤其是平行化是它最大的优势,但是 NAT 的 Decoder ,它的 Performance,往往都不如 AT 的 Decoder。
⇒ Multi-Modality
在这里插入图片描述

Encoder-Decoder之间的信息传递:CrossAttention

有两个输入来自Encoder(Encoder 提供两个箭头), Decoder 提供了一个箭头
在这里插入图片描述

  1. Encoder输入一排向量,输出一排向量 a 1 , a 2 , a 3 a^1,a^2,a^3 a1,a2,a3,经过transform产生 Key1 Key2 Key3( k 1 , k 2 , k 3 k^1,k^2,k^3 k1,k2,k3),以及 v 1 , v 2 , v 3 v^1,v^2,v^3 v1,v2,v3.

  2. Decoder 会先吃 BEGIN,得到一个向量,输入多少长度的向量,输出就是多少向量。乘上一个矩阵做一个 Transform,得到一个 Query 叫做 q q q

  3. 利用q,k计算attention的分数,并做Normalization,得到 α 1 ′ , α 2 ′ , α 3 ′ , \alpha_1',\alpha_2',\alpha_3', α1,α2,α3,
    在这里插入图片描述

  4. α 1 ′ , α 2 ′ , α 3 ′ , \alpha_1',\alpha_2',\alpha_3', α1,α2,α3, v 1 , v 2 , v 3 v^1,v^2,v^3 v1,v2,v3做weighted sum(加权求和),得到 v v v.

  5. v v v丢进Fully-Connected 的Network,做接下来的任务。
    在这里插入图片描述

总之,Decoder 就是产生一个 q q q,去 Encoder 抽取信息出来,当做接下来的 Decoder 的Fully-Connected 的 Network 的 Input
在这里插入图片描述
其中,Decoder可以看Encoder中的许多层而不一定只是最后一层。

training

以语音辨识为例
训练数据:一段音频与对应的文字,文字为one-hot编码的向量
训练过程:Decoder输出的是概率分布。可以通过输出的概率分布与Ground Truth之间的计算交叉熵(Cross Entropy)并求梯度实现优化,交叉熵的值越小越好。
在这里插入图片描述
在训练Decoder时,会输入“正确答案”而不是自己产生的答案
⇒Teacher Forcing

(但测试的时候,显然没有正确答案可以给 Decoder 看)
在这里插入图片描述

三、Tips

(for seq2seq model)

  • Copy Mechanism
    decoder没必要自行创造输出,它要做的事也许是从输入的东东里复制一些出来,而非创造词汇

    • chatbot
      在这里插入图片描述

    • 摘要
      在这里插入图片描述

  • Guided Attention
    有时seq2seq model训练会产生奇怪的结果,比如漏字(没看到)
    ⇒强迫机器一定要把输入的东西全看过(如TTS),强迫attention要用某种方式
    例如,对语音合成或者是语音辨识来说,我们想像中的 Attention,应该就是由左向右
    在这里插入图片描述

  • 束搜索 -beam search
    在这里插入图片描述

四、评测标准Optimizing Evaluation Metrics

BLEU Score 是 Decoder产生一个完整的句子以后再去跟正确的答案一整句做比较。但是,在训练时,是对每一个生成的token进行优化,使用的指标是交叉熵。
换言之,训练的时候,是看 Cross Entropy,但是我们实际上你作业真正评估的时候,看的是 BLEU Score
不能把BLEU作为LOSS⇒无法微分。
解决办法:遇到你在 Optimization 无法解决的问题,用 RL 硬 Train 一发。遇到你无法 Optimize 的 Loss Function,把它当做是 RL 的 Reward,把你的 Decoder 当做是 Agent。
在这里插入图片描述

  • Scheduled Sampling
    由于Teacher Forcing的存在,训练跟测试的情景是不一致。Decoder 在训练的时候,永远只看过正确的东西,那在测试的时候,只要有一个错,那就会一步错 步步错。
    解决:给 Decoder 的输入加一些错误的东西⇒Scheduled Sampling。
    问题:会损害平行化的能力。
    在这里插入图片描述

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

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

相关文章

提高清晰度的全彩LED显示屏的关键要素

全彩LED显示屏作为现代广告宣传和信息传播的主要媒介,其清晰度在很大程度上决定了观众的视觉体验和信息传达的效果。随着人们对高清显示需求的不断提升,全彩LED显示屏也在向更高清、更细腻的显示效果迈进。那么,如何进一步提升全彩LED显示屏的…

6数字基石:掌握计算机语言、多媒体与系统工程

计算机语言 计算机语言是指用于人与计算机之间交流的一种语言,是人与计算机之间传递信息的媒介。计算机语言主要由一套指令组成,而这一种指令一般包括表达式、流程控制和集合三大部分内容。 表达式又包含变量、常量、字面量和运算符。 流程控制有分支…

善用 AI ,优化项目,保姆级简历写作指南第七弹

大家好,我是程序员鱼皮。做知识分享这些年来,我看过太多简历、也帮忙修改过很多的简历,发现很多同学是完全不会写简历的、会犯很多常见的问题,不能把自己的优势充分展示出来,导致错失了很多面试机会,实在是…

如何将TRIZ的“最终理想解”应用到机器人电机控制设计中?

TRIZ理论,作为一套系统的创新方法论,旨在帮助设计师和工程师突破思维惯性,解决复杂的技术难题。其核心思想之一便是“最终理想解”,它如同一盏明灯,指引着我们在技术创新的道路上不断前行。最终理想解追求的是产品或技…

“听到“温度 - 科学家发现人类感知的新层次

雷克曼大学(IDC Herzliya)伊夫切尔大脑、认知与技术研究所(BCT Institute)的研究人员发现了一种在很大程度上被忽视的感知能力,他们利用机器学习揭示了跨模态感知–不同感官模态之间的相互作用–的动态。在最近的一项研…

【HarmonyOS NEXT星河版开发学习】小型测试案例06-小红书卡片

个人主页→VON 收录专栏→鸿蒙开发小型案例总结​​​​​ 基础语法部分会发布于github 和 gitee上面(暂未发布) 前言 在鸿蒙(HarmonyOS)开发中,自适应伸缩是指应用程序能够根据不同设备的屏幕尺寸、分辨率和形态&…

2-63 基于matlab的GMPHD滤波器算法

基于matlab的GMPHD滤波器算法(1)本次仿真采用线性CV模型;(2)观测模型为线性条件下,观测值为X,Y轴坐标;(3)验证GMPHD算法对多目标跟踪的有效性;输出…

对于产品设计方面来说,3D 技术的应用有哪些优势?

3D技术在产品设计方面提供了许多优势,主要体现在以下几个方面: 1、可视化:设计师利用3D技术创建产品三维模型,使得产品在设计阶段就能被可视化,帮助团队更好地理解产品的外观和功能。 2、精确性:3D模型可…

人人都能搞定的大模型原理 - 神经网络

人工智能的发展起步于1950年,期间经历了各种里程碑和变革,与此相关的神经网络技术也从最初的单层感知到复杂的层级和卷积神经网络一路创新和变革,不断推动人工智能领域的发展,直到 2022 年 ChatGPT 的问世,彻底引爆了…

Leetcode174.地下城游戏

题目 代码&#xff08;首刷看解析 2024年5月6日&#xff09; class Solution { public:// 动态规划int calculateMinimumHP(vector<vector<int>>& dungeon) {// dp[i][j]从(i,j)出发&#xff0c;到达终点所需要的最少血量int m dungeon.size();int n dungeo…

【1.9】动态规划-解单词拆分

一、题目 给定一个非空字符串s和一个包含非空单词的列表wordDict&#xff0c;判定s是否可以被空格拆分为一个或多个在字典中出现的单词。 说明&#xff1a; 1. 拆分时可以重复使用字典中的单词。 2. 你可以假设字典中没有重复的单词。 示例1&#xff1a; 示例2&#xff1a;…

SpringBoot优雅开发REST API最佳实践

目录 RestController注解 接口版本管理 定义版本号注解 编写版本号匹配逻辑处理器 注册处理器 参数校验 Validated注解 使用注解进行参数校验 统一异常捕获 RestControllerAdvice注解 使用RestControllerAdvice注解处理参数异常 统一响应封装 统一状态码 统一返回结…

[Vue3] 8 toRef与toRefs的用法

前言 目标 1 toRef与toRefs的用法 2 toRef与ref的不同 toRef与toRefs的用法 看一下官方给的解释 也是就当定义const name = toRef(person,name) 改变name = 李四的值,person中的name值也会同步变化 toRef 只能处理一个对象中的一个属性 <h2>{{person }}</h2&g…

超详细!!! LVS(Linux virual server)负载均衡知识及其NAT模式、DR模式、火墙标记实验

目录 前言系统性能扩展方式集群Cluster分布式集群与分布式 四层转发与七层转发的区别 LVS&#xff08;Linux virual server&#xff09;一、LVS介绍LVS相关概念 二、LVS集群结构体系1. 负载均衡层&#xff08;Load Balancer&#xff09;2. 服务器群组层&#xff08;Server Pool…

RuoYi-Cloud开启控制台日志

打开对应微服务resources目录下的logback.xml文件&#xff0c;将"系统模块日志级别控制"改为debug。

坐标变换矩阵

在高级驾驶辅助系统&#xff08;ADAS&#xff09;领域&#xff0c;存在多种常用的坐标系&#xff1a;雷达Lidar坐标系、车辆坐标系、相机坐标系、图像坐标系。 旋转变换矩阵&#xff08;Rotation Matrix&#xff09; 在二维平面xoy上&#xff0c;由绿色坐标系逆时针旋转θ到蓝…

U盘出现文件目录损坏的修复之道

在数字化时代&#xff0c;U盘作为便携式存储设备&#xff0c;承载着无数重要的文件与数据&#xff0c;成为我们工作、学习和生活中不可或缺的一部分。然而&#xff0c;当U盘遭遇“文件或目录损坏且无法读取”的困境时&#xff0c;这份便捷瞬间转化为焦虑与困扰。本文将深入探讨…

【安卓】连接真机和使用通知

文章目录 连接到真机使用通知通知的简单使用通知的详细信息 连接到真机 先用USB线将手机与电脑连接。 打开手机的设置&#xff0c;找到关于手机&#xff0c;点开之后&#xff0c;找到开发者选项界面。或者找到软件版本号&#xff0c;连续点击&#xff0c;系统会提示你点击几次能…

go在linux上安装

1.首先要确定Linux架构 uname -m如果你的系统是 armv7l&#xff08;32-bit ARM&#xff09;&#xff0c;你需要下载 armv6l 版的Go语言。 如果你的系统是 aarch64&#xff08;64-bit ARM&#xff09;&#xff0c;你需要下载 arm64 版的Go语言。 如果你的系统是 x86_64&#xf…

母婴生活馆小程序开发制作方案

母婴生活馆小程序系统主要是想满足年轻父母群体对于高品质母婴产品和服务的需求。开发一款集商品展示、在线购买、育儿知识分享、社区互动等功能于一体的母婴生活馆小程序。一、主要用户群体 年龄在25-35岁之间&#xff0c;初为人父母或即将成为父母的年轻夫妇。他们通常具备一…