*大家好,我是AI拉呱,一个专注于人工智领域与网络安全方面的博主,现任资深算法研究员一职,热爱机器学习和深度学习算法应用,拥有丰富的AI项目经验,希望和你一起成长交流。关注AI拉呱一起学习更多AI知识。
文章目录
1. 算法整体架构
Attention->Transformer->BERT->NLP应用
1.1 什么是seq2seq模型?
seq2seq是一种常见的NLP模型结构,全称是:sequence to sequence,翻译为“序列到序列”。
顾名思义:从一个文本序列得到一个新的文本序列。典型的任务有:机器翻译任务,文本摘要任务。
对于编码器和解码器是seq2seq的关键,编码器是将文本转化为context向量,解码器将context转化为文本
1.2 基于RNN的seq2seq模型如何处理文本/长文本序列?
假设序列输入是一个句子,这个句子可以由 n n n个词表示: s e n t e n c e = w 1 , w 2 , . . . , w n sentence = {w_1, w_2,...,w_n} sentence=w1,w2,...,wn。
RNN首先将句子中的每一个词映射成为一个向量得到一个向量序列: X = x 1 , x 2 , . . . , x n X = {x_1, x_2,...,x_n} X=x1,x2,...,xn,每个单词映射得到的向量通常又叫做:word embedding。
然后在处理第 t ∈ [ 1 , n ] t \in [1,n] t∈[1,n]个时间步的序列输入 x t x_t xt时,RNN网络的输入和输出可以表示为: h t = R N N ( x t , h t − 1 ) h_{t} = RNN(x_t, h_{t-1}) ht=RNN(xt,ht−1)
输入:RNN在时间步 t t t的输入之一为单词 w t w_t wt经过映射得到的向量 x t x_t xt。
输入:RNN另一个输入为上一个时间步 t − 1 t-1 t−1得到的hidden state向量 h t − 1 h_{t-1} ht−1,同样是一个向量。
输出:RNN在时间步 t t t的输出为 h t h_t ht hidden state向量。
-
- 整体架构
- 整体架构
-
- 编码器和解码器
- 编码器和解码器
-
- 编码器和解码器可能有N层
- 编码器和解码器可能有N层
-
- 编码器和解码器内部结构
- 编码器和解码器内部结构
2. 注意力
计算过程
单头注意力:有一组QKV向量
多头注意力:有多组QKV向量
2.1
3. 词向量编码
- transformer和rnn是不同的,根据不同的位置记录含义不同.
4. MASK
- 上三角mask
5.Encoder
- Encoder和Decoder计算
6.微调"Fine-tune?"
微调教程
-
-
“微调”这个词并不是NLP的专用名词,早在CV起飞的年代,“微调”就已经被广泛使用了,当时将深度学习模型在ImageNet上预训练,然后在自己的任务上“微调”模型的部分参数,便是当年CV模型训练的常规方法。
-
“微调”/fine-tune通常指:一种深度学习模型的训练方式/步骤。
-
常规的“微调”通常也使用更小的learning rate对模型进行训练。
-
任何的模型都可以进行微调,包括不限于:Transformer、CNN、LSTM等.
-
预训练方法包括但不限于:语言模型无监督预训练(BERT),目标类似的其他数据集预训练,目标不类似但相关的其他数据集预训练等。
-
由于训练目标不同,往往Output Layer参数的维度也不同。
6.1 微调的类型有哪些?
- 预训练任务和目标任务相同、不相同。
- 无监督+大规模数据预训练(例如BERT、Roberta、XLNet等);
- 无监督+domian数据预训练(例如我们要对wikipedia的数据做问答,那可以先用wikipedia的数据预训练一下模型);
- 有监督+相似任务预训练(例如我们要对句子做2分类,那么我们可以先用短语2分类、文档2分类的数据进行预训练);
- 有监督+相关数据/任务预训练(例如我们要对数据X做句法分析,由于这个数据X同时还标注实体,那么我们可以用实体标注进行预训练);
- 多任务学习 ,多任务学习进行预训练的常规方法是:将多个相关的有监督/无监督任务放在一起对模型参数进行预训练。关于多任务学习,读者可以参考我前面写的文章。
6.2 模型为啥要微调
- 人脸识别任务,训练好网络后,把每层神经元学习到的特征可视化肉眼看一看每层学到了啥特征,你会看到最底层的神经元学到的是线段等特征,图示的第二个隐层学到的是人脸五官的轮廓,第三层学到的是人脸的轮廓,通过三步形成了特征的层级结构,越是底层的特征越是所有不论什么领域的图像都会具备的比如边
- 角线弧线等底层基础特征,越往上抽取出的特征越与手头任务相关。正因为此,所以预训练好的网络参数,尤其是底层的网络参数抽取出特征跟具体任务越无关,越具备任务的通用性,所以这是为何一般用底层预训练好的参数初始化新任务网络参数的原因。而高层特征跟任务关联较大,实际可以不用使用,或者采用Fine-tuning用新数据集合清洗掉高层无关的特征抽取器。
- 一般我们喜欢用ImageNet来做网络的预训练,主要有两点,一方面ImageNet是图像领域里有超多事先标注好训练数据的数据集合,分量足是个很大的优势,量越大训练出的参数越靠谱;另外一方面因为ImageNet有1000类,类别多,算是通用的图像数据,跟领域没太大关系,所以通用性好,预训练完后哪哪都能用,是个万金油。分量足的万金油当然老少通吃,人人喜爱。
6.3 Word Embedding
- ELMO是“Embedding from Language Models”的简称
7. transformer
Transformer的编码器和解码器都使用self-attention和全连接层堆叠而成
7.1 Encoder部分和Decoder部分
7.1.1 Encoder
编码器由N = 6个完全相同的层组成
7.2 Decoder
解码器也是由N = 6 个完全相同的decoder层组成。
单层decoder与单层encoder相比,decoder还有第三个子层,该层对encoder的输出执行attention:即encoder-decoder-attention层,q向量来自decoder上一层的输出,k和v向量是encoder最后层的输出向量。与encoder类似,我们在每个子层再采用残差连接,然后进行层标准化。
7.3 attention
关注“AI拉呱公众号”一起学习更多AI知识!