机器学习周报(8.12-8.18)

文章目录

  • 摘要
  • Abstract
  • 1.Transformer的结构
    • [1.1 序列到序列(Seq2seq)的模型](#1.1 序列到序列(Seq2seq)的模型)
    • [1.2 Transformer 结构](#1.2 Transformer 结构)
      • [1.2.1 Transformer 编码器(Encoder)](#1.2.1 Transformer 编码器(Encoder))
      • [1.2.2 Transformer解码器(Decoder)](#1.2.2 Transformer解码器(Decoder))
      • [1.2.3 编码器-解码器注意力(encoder-decoder attention)](#1.2.3 编码器-解码器注意力(encoder-decoder attention))
    • [1.3 Transformer 的训练过程](#1.3 Transformer 的训练过程)
    • [1.4 sequence到sequence Model的训练技巧](#1.4 sequence到sequence Model的训练技巧)
    • 总结

摘要

本周跟着李宏毅老师学习了Transformer,从序列到序列模型引入学习Transformer,Transformer 是一个基于自注意力的序列到序列模型,与基于循环神经网络的序列到序列模型不同,其可以能够并行计算。学习了Transformer的结构:编码器和解码器,和编码器-解码器注意力;学习了Transformer 的训练过程以及序列到序列模型的训练技巧。

Abstract

This week, I followed Mr. Li Hongyi to learn Transformer, and introduced the sequence-to-sequence model to learn Transformer. Transformer is a serial-to-sequence model based on self-attention, which is different from the serial-to-sequence model based on recurrent neural network, and can be calculated in parallel. Learned the structure of Transformer: encoder and decoder, and encoder-decoder attention; I have learned the training process of Transformer and the training skills of sequence-to-sequence model.

1.Transformer的结构

1.1 序列到序列(Seq2seq)的模型

序列到序列模型输入和输出都是一个序列,输入与输出序列长度之间的关系有两种情况。

  • 输入跟输出的长度一样
  • 机器决定输出的长度.

序列到序列的常见应用:

对于语音翻译为什么不使用语音识别和机器翻译相结合,因为有些语言是没有具体文字的,所以需要对这些语言做语音翻译,直接将其翻译成文字。

  • 多标签分类(multi-label classification)

例如:有些文章属于多个分类,但是每个文章对应的类别的数量根本不一样,因此需要用序列到序列模型来做(让机器来决定输出几个类别)。

多分类问题(multi-class classification)是指分类的类别数大于 2。是可以给定一个阈值,只输出概率最高的几个类别

1.2 Transformer 结构

Transformer 是一个基于自注意力的序列到序列模型,与基于循环神经网络的序列到序列模型不同,其可以能够并行计算。

一般的序列到序列模型会分成编码器和解码器

编码器负责处理输入的序列,再把处理好的结果"丢"给解码器,由解码器决定要输出的序列。

1.2.1 Transformer 编码器(Encoder)

Transformer的编码器使用的是自注意力,输入一排向量,输出另外一个同样长度的向量。

编码器里面会分成很多的块(block),每一个块都是输入一排向量,输出一排向量。输入一排向量到第一个块,第一个块输出另外一排向量,以此类推,最后一个块会输出最终的向量序列

Transformer 的编码器的每个块并不是神经网络的一层,每个块的结构如下图右边所示。(在每个块里面,输入一排向量后做自注意力,考虑整个序列的信息,输出另外一排向量。接下来这排向量会"丢"到全连接网络网络里面,输出另外一排向量,这一排向量就是块的输出)

Transformer 里面加入了残差连接(residual connection)

例如:输入向量b到自注意力层后得到向量a并输出,输出向量 a 加上其输入向量 b 得到新的输出,得到残差的结果以后,再做层归一化(layer normalization)

层归一化是对同一个特征、同一个样本里面不同的维度去计算均值跟标准差,接着做个归一化

对于Transformer的编码器,首先,在输入的地方需要加上位置编码。如果只用自注意力,没有未知的信息,所以需要加上位置信息。多头自注意力就是自注意力的块。经过自注意力后,还要加上残差连接和层归一化。接下来还要经过全连接的前馈神经网络,接着再做一次残差连接和层归一化,这才是一个块的输出,这个块会重复 N 次。

1.2.2 Transformer解码器(Decoder)

  • 自回归(autoregressive)解码器

以语音识别为例:

输入语音"机器学习"通过Encoder输出一排向量,接下来解码器产生语音识别的结果,解码器把编码器的输出先"读"进去。要让解码器产生输出,首先给定一个特殊的标识符表示开始。

解码器会输出一个向量(该长度跟词表vocabulary的大小一样),在产生这个向量之前,跟做分类一样,通常会先进行一个 softmax 操作。这个向量里面的分数是一个分布,该向量里面的值全部加起来总和是 1。这个向量会给每一个中文字一个分,分数最高的中文字就是最终的输出。

如:解码器第一个输出的向量中,"机"的分数最高,所以"机"作为第一个输出

把"机"和标识符BEGIN继续作为输入,解码器继续输出下一个向量,"器"的分数最高,解码器拿"器"作为输出。

self-attention

原来的自注意力输入一排向量,输出另外一排向量,这一排中每个向量

都要看过完整的输入以后才做决定。

Masked Self-attention

Decoder使用掩蔽自注意力(masked self-attention),其通过一个掩码(mask)来阻止每个位置选择其后面的输入信息。

对于Decoder而言,先有 a 1 a^1 a1才有 a 2 a^2 a2,才有 a 3 a^3 a3才有 a 4 a^4 a4;而原来的自注意力机制中 a 1 到 a 4 a^1到a^4 a1到a4是一次整个输入到模型中。

同时,实际应用中输入跟输出长度的关系是非常复杂的,无法从输入序列的长度知道输出序列的长度,因此解码器必须决定输出的序列的长度。给定一个输入序列,机器可以自己学到输出序列的长度

解码器就要加上输出特殊标识符END。产生"习"之后,再把"习"作为解码器的输入,解码器就要输出END,整个解码器产生序列的过程就结束。

  • 非自回归(non-autoregressive)解码器

非自回归不是一次产生一个字,它是一次把整个句子都产生出来。。非自回归的解码器可以输入一整排的特殊标识符BEGIN,一次产生产生一排词元(个数等于输入的标识符BEGIN的个数)。因为输出的长度是未知的,所以当做非自回归解码器输入的 BEGIN 的数量也是未知的,因此有如下两个做法。

  • 用分类器来解决这个问题。用分类器"吃"编码器的输入,输出是一个数字,该数字代表解码器应该要输出的长度。
  • 给编码器一堆输入BEGIN,假设输出有上限,但当输出标识符END时,后面再有输出就当他没输出。

1.2.3 编码器-解码器注意力(encoder-decoder attention)

编码器和解码器通过编码器-解码器注意力(encoder-decoder attention)传递信息,编码器-解码器注意力是连接编码器跟解码器之间的桥梁。

如图:解码器中编码器-解码器注意力的键和值来自编码器的输出,查询来自解码器中前一个层的输出。

编码器输入一排向量,输出一排向量 a 1 , a 2 , a 3 a^1,a^2,a^3 a1,a2,a3,首先解码器输入标识符BEGIN,经过掩蔽自注意力得到一个向量,把这个向量乘上一个矩阵,做一个变换(transform),得到一个查询 q, a 1 , a 2 , a 3 a^1,a^2,a^3 a1,a2,a3也都产生键: k 1 , k 2 , k 3 k^1,k^2,k^3 k1,k2,k3,把q跟 k 1 , k 2 , k 3 k^1,k^2,k^3 k1,k2,k3计算注意力分数得到 α 1 , α 2 , α 3 \alpha_1,\alpha_2,\alpha_3 α1,α2,α3,接下来做 softmax,得到 α 1 ′ , α 2 ′ , α 3 ′ \alpha_1',\alpha_2',\alpha_3' α1′,α2′,α3′,通过
v = α 1 ′ × v 1 + α 2 ′ × v 2 + α 3 ′ × v 3 v=\alpha_1'×v^1+\alpha_2'×v^2+\alpha_3'×v^3 v=α1′×v1+α2′×v2+α3′×v3得加权和 v v v,再作为输入到全连接网络。这个步骤 q 来自于解码器,k 跟 v 来自于编码器

1.3 Transformer 的训练过程

  • Teacher Forcing:把标准答案(Ground Truth)作为输入。

计算标准答案(Ground Truth)跟分布之间的交叉熵(cross entropy),希望该交叉熵的值越小越好。每一次解码器在产生一个中文字的时候做了一次类似分类的问题。

1.4 sequence到sequence Model的训练技巧

  • 复制机制(copy mechanism)

对很多任务而言,解码器没有必要自己创造输出,其可以从输入的东西里面复制一些东西。

  • 引导注意力(Guided Attention)

引导注意力会强迫注意力有一个固定的样貌,注意力的位置都应该由左向右,不如就直接把这个限制放进训练里面,要求机器学到注意力就应该要由左向右。

  • 束搜索(Beam Search)

这种每次找分数最高的词元来当做输出的方法称为贪心搜索(greedy

search),其也被称为贪心解码(greedy decoding)。红色路径就是通过贪心解码得到的路径。

但贪心搜索不一定是最好的方法,第一步可以先稍微舍弃一点东西,比较下红色路径与绿色路径,红色路径第一步好,但全部乘起来是比较差的,绿色路径一开始比较差,但最终结果其实是比较好的。

  • 加入噪声

在训练的时候会加噪声,让机器看过更多不同的可能性,这会让模型比较棒,比较能够对抗它在测试的时候没有看过的状况

  • 使用强化学习训练

训练的时候看cross entropy最低,再实际评估的时候看BLEU score

  • 计划采样(scheduled sampling)

给解码器的输入加一些错误的东西,不要给解码器都是正确的答案,偶尔给它一些错的东西,它反而会学得更好

总结

学习了Transformer的相关结构以及理论,但是只是进行了简单的学习,后面我会继续深入学习。

相关推荐
SpikeKing26 分钟前
LLM - 理解 多模态大语言模型(MLLM) 的 指令微调(Instruction-Tuning) 与相关技术 (四)
人工智能·语言模型·指令微调·数据调整·自指令·数据混合·instruction
开MINI的工科男1 小时前
【笔记】自动驾驶预测与决策规划_Part3_路径与轨迹规划
人工智能·笔记·自动驾驶·预测与决策
D11_2 小时前
Pandas缺失值处理
python·机器学习·数据分析·numpy·pandas
xuanyu224 小时前
Linux常用指令
linux·运维·人工智能
静心问道4 小时前
WGAN算法
深度学习·算法·机器学习
凡人的AI工具箱5 小时前
AI教你学Python 第11天 : 局部变量与全局变量
开发语言·人工智能·后端·python
晓星航5 小时前
Docker本地部署Chatbot Ollama搭建AI聊天机器人并实现远程交互
人工智能·docker·机器人
Kenneth風车5 小时前
【机器学习(五)】分类和回归任务-AdaBoost算法-Sentosa_DSML社区版
人工智能·算法·低代码·机器学习·数据分析
AI小白龙*5 小时前
大模型团队招人(校招):阿里巴巴智能信息,2025届春招来了!
人工智能·langchain·大模型·llm·transformer
鸽芷咕5 小时前
【Python报错已解决】python setup.py bdist_wheel did not run successfully.
开发语言·python·机器学习·bug