所有的分享都来自于我个人笔记,经过我自己的思考总结实践积累下来的东西,希望能帮助到入门的朋友们。
RNN
传统神经网络(DNN)无法对时间序列建模,上一层神经元的输出只能传递给下一层神经元。而在循环神经网络(RNN)中,神经元的输出在下一时刻是可以传递给自身的,同时还输出一个藏隐层状态,给当前层在处理下一个样本时使用,
它可以看作是带自循环反馈的全连接神经网络。
很多任务的时序信息很重要,即一个样本中前后输入的信息是有关联的。样本出现时间顺序信息对语音识别、自然语言处理、视频识别等问题很重要,所以对于这类问题,可以使用 RNN 建模。分为<
单层RNN
>,<
多隐层RNN
>,<
双向循环神经网络
(bidirectional recurrent neural network,
Bi-RNN
)由两层循环神经网络组成,它们的输入相同,只是信息传递的方向不同>。
LSTM
是一种改进之后的RNN循环神经网络,可以解决 RNN 无法处理长距离的依赖的问题。 LSTM等门机制的结构一定程度上缓解了长期依赖的问题,但是对于特别
长期的依赖现象,LSTM依旧无能为力。
Bidirectional RNN或
Bidirectional LSTM:双向RNN或LSTM,可以同时使用前后序列(
考虑整个句子的信息),能更好地理解上下文环境并消除歧义。对于很多NLP的应用,可以获取完整的整个句子,那这个标准的双向RNN算法就很高效。
缺点: 需要完整数据的序列,你才能预测任意位置。比如语音识别系统中,这就要求你必须等待一个人说完整句话,才能做出识别,这样就有一个比较长的等待时间。
Transformer 这个模型主要有Google mind团队提出来的一种模型,可以说这边模型出来之后,NLP领域实现了大一统的趋势,这个模型是2017年发表的
attention all you need 中所提到的seq2seq模型。
BERT(Bidirectional Encoder Representations from Transformers) 就是
transformer衍生出来的预训练语言模型(无监督模型),是transformer的编码encode部分 ,输入一句话模型能输出字的embedding。在过去我们使用word2vec,lstm等技术也逐渐被BERT模型所替代,其成为NLP主流框架,基本很多NLP很多任务都可以用BERT去解决。
BERT训练方法:一、使用MLM(
Masked Language Model)方法。二、
NSP(Next Sentence Prediction)方法。
Transformer的提出解决了上面两个问题:
(1) 首先它使用了
Attention机制,将序列中的任意两个位置之间的距离是缩小为一个常量;
(2) 其次它不是类似RNN的顺序结构,因此具有
更好的并行性,符合现有的GPU框架。
主要区别与优势:
word2vec与transformer
的区别:word2vec需要训练得到词embedding,但是每一个词(或字)在不同的上下文是拥有不同的含义的,不同语境下的词含有不同的意思,因此如果基于固定的词的embedding进行语言模型构建是有很大缺陷的,而transformer可以利用上下文的关系来得到我们每一个词的向量。
LSTM
与transformer
的区别
:而说到LSTM等时序性的网络不能只能做到串行训练,即下一个词的训练需要等到上一个词训练完成才可以进行,同时也影响训练速度,相对而言BERT的预言模型则可以做到并行计算,这往往是因为其
自注意力机制以及
位置嵌入机制发挥的功能,在后面我们也会讲到。
RNN
与transformer
的区别:RNN
会将它已经处理过的前面的所有单词/向量的表示与它正在处理的当前单词/向量结合起来。而自注意力机制会将所有相关单词的理解融入到我们正在处理的单词中。
一阶段:基础入门概念(无基础可懂)
【入门概念】
Encoder-Decoder 和 Seq2Seq
【入门概念】
Attention 机制
【入门概念】
Transformer
【入门概念】
解密 BERT (什么是BERT)
【$基础介绍】
BERT大火却不懂Transformer?读这一篇就够了
【Bert模型评估】
BERT和Transformer到底学到了什么
二阶段:理论和源码/论文和资源/应用
Bert的Transformer低层学了表层特征,中间层学了句法特征,高层学了语义特征
【视频】
李宏毅 Bert教程
【视频】
唐宇迪 Bert教程
【*RNN/LSTM和TF代码】
时间序列分析(4) RNN/LSTM
【英文资料】
The Illustrated Transformer
【发展与衍变】
从Transformer到BERT模型
【$已实践代码】
Pytorch实现: BERT
Pytorch实现: Transformer
【$原理和Torch代码】
聊聊 Transformer
【$原理和Torch代码】
深入理解Transformer及其源码
【$必看】
图解Transformer(完整版)
【$必看】
BERT(一) Transformer原理理解
【$必看】
BERT(二) BERT解读及应用
【$BERT代码】
一文彻底搞懂BERT实现
【$BERT TF代码】
NLP实战篇之bert源码阅读(optimization)
【*BERT github
】
Google BERT源码及模型
【*WWM中文模型 github】
Whole Word Masking (wwm)
【*Huggingface-transformers github】
Huggingface-transformers
-
解码过程是怎样的?encode的输出K,V与 decode的Q(decode的输入得到mask attention)进行context attention计算。
-
反向传播是怎么做的?预测结果和实际结果进行交叉熵损失函数计算,反向传播调整参数。
-
最终训练到底得到了什么? 模型,词向量参数(embedding),multi-heads参数(Multi-Heads Attention),全连接层(FeedForward)参数,layernorm层的参数.....
-
BERT和transformer实现流程的区别是什么?BERT只用到了encode编码层和Pooler全连接层(最终获得词向量或fintune结果)。
-
fintune到底做了什么?固定住前面的参数,增加最后一层logit层,根据任务类型不一致
辅助阅读
【TF】TensorFlow
理解语言的 Transformer 模型
****
【TF】
预训练模型-BERT预训练源码解读笔记
【TF】
BERT代码阅读
![](https://i-blog.csdnimg.cn/blog_migrate/8efd9dd07bd2f0b51790fac15699fea2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/876c027fa434ef3f2a463f512a163a3a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5c28ee4164a307aa5df3d9e50ed61ea2.png)