transformer(李宏毅老师系列)

自学参考:
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。
    问题:会损害平行化的能力。
相关推荐
wuyoula3 分钟前
全新轻量级高性能跨平台 AI聊天+AI网关桌面
服务器·开发语言·c++·人工智能
F_D_Z3 分钟前
扩散模型快速采样:从渐进蒸馏到并行推理
人工智能·算法·加速采样
AIBox3656 分钟前
vscode api 配置怎么做:第三方大模型接入 VS Code 的完整方法
ide·人工智能·vscode·gpt·语言模型·编辑器
zhang133830890756 分钟前
守护水工安全:CG-85D振弦式渗压计在大坝与堤防监测中的核心作用
运维·服务器·网络·人工智能·自动化
鸿乃江边鸟6 分钟前
Nanobot 从 Channel 消息处理看python协程的使用
人工智能·ai·协程
岁月标记9 分钟前
MoE 混合专家模型
人工智能
才兄说12 分钟前
机器人二次开发动作定制?数周内交付
人工智能·机器人
石榴树下的七彩鱼16 分钟前
Python OCR 文字识别 API 接入完整教程
开发语言·人工智能·后端·python·ocr·api·图片识别
芯盾时代17 分钟前
RSAC 2026观察 智能体治理崛起
网络·人工智能·网络安全·智能体
十铭忘18 分钟前
Scaling Latent Reasoning via Looped Language Models:通过循环语言模型扩展潜在推理
人工智能