E. 深度学习 — Transformer
概述
- 应用场景
- Language
- Image
- 语音生成
- 笔迹
- 语音生成
- 图片字幕生成
Seq2Seq(Transformer)
- 概述
- seq2seq属于encoder-decoder结构的一种,这里看看常见的encoder-decoder结构,基本思想就是利用两个RNN,一个RNN作为encoder,另一个RNN作为decoder。
- encoder负责将输入序列压缩成指定长度的向量,这个向量就可以看成是这个序列的语义,这个过程称为编码。
- decoder则负责根据语义向量生成指定的序列,这个过程也称为解码
- seq2seq属于encoder-decoder结构的一种,这里看看常见的encoder-decoder结构,基本思想就是利用两个RNN,一个RNN作为encoder,另一个RNN作为decoder。
- 应用场景
- 语音识别
- 机器翻译
- 语音翻译
- 语音合成
- 聊天机器人
- QA
- 输入:问题、文章
- 输出:答案
- 文法解析:论文 Grammar as a Foreign Language
- 文章摘要:百万篇文章
- Encoder
- 步骤
- 将source文本的词序列先经过embedding层转化成向量
- 然后输入到一个RNN结构(可以是普通RNN,LSTM,GRU等等)中
- 步骤
- Decoder
- 输出
- Autoregressive:不定长输出
- Non AutoRegressive:定长输出,可以并行化
- Fertility
- Fixed targets
- Labels comes from external aligner
- Observing attention weights in auto-regressive models
- Fine-tune
- Updating fertility classifier with REINFORCE
- Fixed targets
- Sequence -level knowledge distillation
- Teacher:Autoregressive model,Student:Non-autoregressive model
- 通过 Teacher 模型构建语料库
- Teacher’s greedy decode output as student’s training target
- Nosiy Parallel Decoding(NPD)
- 优化
- Iterative Refinement
- Insertion-based
- Insert + Delete
- CTC-based
- 优化
- Mask-Predict:借鉴 BERT
- KERMIT:Kontextuell Encoder Representations Made by Insertion Transformations
- 优化
- Multilingual KERMIT
- 优化
- Levenshtein Transformer
- Imputer(CTC + Mask-Predict)
- Fertility
- 训练方法
- teacher forcing:根据标准答案decode
- free running:根据上一步的输出作为下一步输入的decode
- 缺点
- 误差爆炸(exposure bias):没有任何的引导,一开始会完全是瞎预测,正所谓“一步错,步步错”,而且越错越离谱,这样会导致训练时的累积损失太大
- 缺点
- 预测
- Greedy Decoding
- 概述:每一步,都预测出概率最大的那个词,然后输入给下一步
- 缺点:每一步最优,不一定全局最优
- Beam Search
- 概述:每一步,多选几个作为候选,最后综合考虑,选出最优的组合。
- 步骤
- 首先,我们需要设定一个候选集的大小beam size=k;
- 每一步的开始,我们从每个当前输入对应的所有可能输出,计算每一条路的“序列得分”;
- 保留“序列得分”最大的k个作为下一步的输入;
- 不断重复上述过程,直至结束,选择“序列得分”最大的那个序列作为最终结果。
- 对每个序列的得分,除以序列的长度。根据调整后的结果来选择best one。
- 优化
- 数值下溢
- 数值下溢就是数值太小了,导致电脑的浮点表示不能精确地储存,因此在实践中,我们不会最大化这个乘积,而是取值。
- 倾向于短的翻译
- 目标函数进行归一化,得到归一化的对数似然目标函数由于会有多个分支,所以很有可能我们会遇到多个标识,由于分支较多,如果等每一个分支都遇到才停的话,可能耗时太久,因此一般我们会设定一些规则,比如已经走了T步,或者已经积累了N条已完成的句子,就终止beam search过程。
- 超参数竖宽B的调节
- B越大
- 优点是:可考虑的选择越多,能找到的句子越好
- 缺点是:计算代价更大,速度越慢,内存消耗越大
- B越小
- 优点是:计算代价小,速度快,内存占用越小
- 缺点是:可考虑的选择变少,结果没那么好
- B越大
- 数值下溢
- Greedy Decoding
- 输出
- Tips
- Copy Mechanism
- 聊天机器人
- 文章摘要
- Guided Attention
- exposure bias
- scheduled sampling:在训练的时候,加入一些错误的数据,增加模型的容错性
- Tips: 可以先用正确的数据训练,等模型稳定之后,再加入一些错误的数据
- scheduled sampling:在训练的时候,加入一些错误的数据,增加模型的容错性
- Copy Mechanism
- 评估
- 优点
- 缺点
- 实践上:有些rnn轻易可以解决的问题transformer没做到,比如复制string,或者推理时碰到的sequence长度比训练时更长(因为碰到了没见过的position embedding)
- 理论上:transformers非computationally universal(图灵完备),(我认为)因为无法实现“while”循环
Attention机制
- 概述
- 注意力机制,是一种将模型的注意力放在当前翻译单词上的一种机制。例如翻译 “I have a cat”,翻译到 “我” 时,要将注意力放在源句子的 “I” 上,翻译到 “猫” 时要将注意力放在源句子的 “cat” 上。
- 问题
- 对于比较长的句子,很难用一个定长的向量 c 完全表示其意义。
- RNN 存在长序列梯度消失的问题,只使用最后一个神经元得到的向量 c 效果不理想。
- 与人类的注意力方式不同,即人类在阅读文章的时候,会把注意力放在当前的句子上。
- 优化点
- Attention机制通过在每个时间输入不同的c来解决这个问题
- attention计算步骤
- 第一步是将query和每个key进行相似度计算得到权重,常用的相似度函数有点积,拼接,感知机等
- 第二步一般是使用一个softmax函数对这些权重进行归一化
- 最后将权重和相应的键值value进行加权求和得到最后的attention
- Block
- self-attention: q、k、v
- 全链接神经网络
- 评估
- 优点
- 在输出序列与输入序列“顺序”不同的情况下表现较好,如翻译、阅读理解
- 相比RNN可以编码更长的序列信息
- 缺点
- 对序列顺序不敏感
- 通常和RNN结合使用,不能并行化
- 优点
Transformer的变种
- Sandwich Transformer
- 核心区别
- 拆开block,打乱self-attention和全连接神经网络的顺序
- 特点
- self-attention 尽量靠前
- 全连接神经网络尽量靠后
- 例如:ssssfsfsffff
- 核心区别
- Universal Transformer
- 概述
- Universal Transformer对transformer的缺点进行了改进,在问答、语言模型、翻译等任务上都有更好的效果,成为了新的seq2seq state-of-the-art模型。
- 区别
- 主要的改动就是加上了循环,但不是时间上的循环,而是depth的循环。
- Weight sharing:归纳偏置是关于目标函数的假设,CNN和RNN分别假设spatial translation invariace和time translation invariance,体现为CNN卷积核在空间上的权重共享和RNN单元在时间上的权重共享,所以universal transformer也增加了这种假设,使recurrent机制中的权重共享,在增加了模型表达力的同时更加接近rnn的inductive bias。
- Conditional computation:通过加入ACT控制模型的计算次数,比固定depth的universal transformer取得了更好的结果
- 概述
- Residual Shuffle Exchange Network
- Reformer
- 概述
- 解决的问题 — 占用内存过大
- 由于激活需要被存储并用于反向传播,有着 N 层的模型的大小比单层大了 N 倍;
- 由于中间的全连接层的深度 d_ff 通常远大于注意力激活层的深度 d_model,因此需要占用很大的内存;
- 在长度为 L 的序列上的 attention 的计算和时间复杂度是 O(L2),所以即使是一个有 64K 字符的序列就会耗尽 GPU 的内存。
- 解决的思路
- 可逆层(Reversible layer),在整个模型中启用单个副本,所以 N factor 就消失了;
- 在前馈层(feed-forward layer)分开激活和分块处理,消除 d_ff factor,节省前馈层的内存;
- 基于局部敏感哈希(locality-sensitive hashing,LSH)的近似注意力计算,让注意力层的 O(L2) 因子替代 O(L) 因子,实现在长序列上的操作。
- 解决的问题 — 占用内存过大
- 概述
- Longformer
- 解决的问题
- 优化O(n^2)
- 解决的问题
其他
- 预训练seq2seq
- MASS
- BART
- Skip Thougtht
- 目标:跟句子一个Embeddings
- 模型
- 输入:一个sentence
- 输出:next sentence
- Skip Thougtht
- 目标:跟句子一个Embeddings
- 思想
- 如果是两个相邻的句子,Embeddings越相近约好
- T5(Transfer Text-to-Text Transformer)
- C4(Colossal Clean Crawled Corpus)