不同的模型应对不同的应用场景,有的模型是刚开始应对某些文本处理场景时“创作”出来的,有的模型是根据原本的模型在处理某些特定问题的时候“改善”出来的,下面我会重点说一下关于这些模型的概念理解
深度神经网络(Deep Neural Network, DNN)
DNN在这里面算是一个比较大的统称,因为它包含了其他近乎所有的模型,所以它一般出现在需要但是不深入的场景里面提一下就好,本身也不是很常用(一般都会说一些更具体的模型名称)
DNN是一种由多层神经元组成的人工神经网络。DNN通常包括输入层、多个隐藏层和输出层,每一层都由多个神经元组成,并且各层之间的神经元通常是全连接的。
DNN通过在训练过程中自动学习输入数据的特征表示,可以用于解决分类、回归、聚类等机器学习任务。深度神经网络的深度指的是它具有多个隐藏层,相对于浅层神经网络,深度神经网络能够更好地表达复杂的非线性关系。
在深度学习领域,DNN是指代包括多个隐藏层的神经网络模型,常见的深度学习模型如全连接神经网络、卷积神经网络(CNN)、循环神经网络(RNN)、长短时记忆网络(LSTM)等都属于DNN的范畴。
循环神经网络(Recurrent Neural Network,RNN)
这算是一个小一点的统称,一般是以RNN来代替简单循环神经网络(Simple RNN),而LSTM,BiLSTM和GRU是会另外提出来的。
RNN主要用于处理序列数据,比如自然语言文本。RNN可以将上一个时刻的输出作为下一个时刻的输入,一直传递下去,从而在整个序列中产生上下文依赖性。常见的RNN包括简单循环神经网络(Simple RNN)、长短时记忆网络(Long Short-term Memory,LSTM)和门控循环单元(Gated Recurrent Unit,GRU)、BiLSTM(双向长短时记忆网络)等。
下面介绍一下这三个模型以及它们的对比。
长短时记忆网络(Long Short-term Memory,LSTM)
一,RNN和LSTM那些不得不说的故事
长短时记忆网络(LSTM)是一种特殊类型的循环神经网络(RNN)。相比于传统的RNN,LSTM能够更好地处理长期依赖性,避免梯度消失或梯度爆炸的问题。Why?因为LSTMD引入了三个门,其中遗忘门(功能顾名思义了)的存在增加了它对于更长期,更庞大,更复杂的数据的处理能力。(就跟那个调整dropout来增加鲁棒性是差不多的思路)
LSTM的核心思想是引入了一个称为"细胞状态"(cell state)的概念,以及三个门控单元(这些门控单元通过一系列的数学运算来决定当前时刻的输入、遗忘和输出,从而控制信息在细胞状态中的流动)。
LSTM怎么改成RNN呢?(划重点)
首先就是引入了一个称为"细胞状态"(cell state)的概念,对于这两个不同模型的隐藏状态(hx)来说,RNN没有cell state,但是LSTM有,所以在hx这个地方LSTM是比RNN多一维的,这个要注意。
还有就是双向的问题,这个里面是要设置特定函数的,到时候按照需求来就OK
二,LSTM的关键部分:
细胞状态(Cell State)
细胞状态沿着整个序列进行信息传递,它类似于传统RNN中的隐藏状态,但LSTM中的细胞状态具有更强的记忆能力,并能够避免梯度消失的问题。
三个门
-
输入门(Input Gate):输入门决定了哪些信息将被更新和存储到记忆单元中。它由一个Sigmoid层和一个点乘操作组成。Sigmoid层输出0到1之间的值,表示每个输入的重要程度。点乘操作将输入的值与Sigmoid层输出相乘,用于过滤输入的部分信息。
-
遗忘门(Forget Gate):遗忘门决定了哪些旧的记忆将保留下来,哪些将被遗忘。它也由一个Sigmoid层和一个点乘操作组成。Sigmoid层输出0到1之间的值,表示每个旧记忆的保留程度。点乘操作将旧记忆的值与Sigmoid层输出相乘,用于控制旧记忆的遗忘。
-
输出门(Output Gate):输出门决定了记忆单元中的哪些信息将被输出。它由一个Sigmoid层和一个Tanh层组成。Sigmoid层输出0到1之间的值,表示每个记忆单元的输出程度。Tanh层将记忆单元中的值映射到-1到1之间的范围,用于提供输出。
LSTM网络通过这些门控单元的组合,能够在序列数据中选择性地读取、写入和遗忘信息,从而有效地处理长期依赖关系。
双向长短时记忆网络(Bidirectional Long Short-Term Memory,BiLSTM)
BiLSTM是一种双向循环神经网络(RNN)结构,结合了LSTM和双向性的特点。它在时间上分为正向和反向两个方向,对输入序列进行正向和反向传播,从而能够利用过去和未来的上下文信息。
BiLSTM的结构包括两个独立的LSTM层,一个用于正向传播,另一个用于反向传播。正向LSTM按照时间顺序处理输入序列,而反向LSTM按照时间的逆序处理输入序列。每个LSTM层都有自己的输入门、遗忘门和输出门,以及记忆单元。
在正向传播过程中,正向LSTM从序列的第一个元素开始,逐步更新和存储信息。在反向传播过程中,反向LSTM从序列的最后一个元素开始,逐步更新和存储信息。最终,正向和反向LSTM的输出将被连接起来,形成双向的输出序列。
BiLSTM的优点是能够同时考虑到过去和未来的上下文信息,有效地捕捉输入序列中的长期依赖关系。这使得它在很多任务中表现出色,如语言建模、命名实体识别、情感分析等。通过双向传播,BiLSTM能够更全面地理解和建模输入序列的语义信息。
然而,BiLSTM也存在一些缺点。由于双向LSTM需要沿着时间轴进行正向和反向传播,因此计算复杂度较高,训练和推断速度可能较慢。此外,BiLSTM对于处理实时数据或动态增长的序列可能不太适用,因为它需要将整个序列输入网络才能进行双向处理。
卷积神经网络(Convolutional Neural Network,CNN)
CNN主要用于处理图像数据,但也可以用于句子分类等任务。CNN的核心就是卷积操作,可以提取输入数据的局部特征。对于自然语言文本,CNN可以将词向量序列看做是图像的像素序列,通过卷积操作提取局部特征,再通过池化(Pooling)操作将特征压缩成固定长度的向量,最后使用全连接层进行分类。
递归神经网络(Recursive Neural Network,RecNN)
RecNN主要用于处理树形结构的数据,比如语法树、依存树等。RecNN可以递归计算每个子节点的表示,并将它们合并成父节点的表示,一直递归到根节点。最后根节点的表示可以作为整个树结构的表示,用于分类、情感分析等任务。
注意力机制(Attention Mechanism)
注意力机制可以帮助模型更好地学习输入数据的重要部分。在NLP任务中,注意力机制可以用来计算每个词对于任务的重要性,根据重要性加权计算对应的表示。常见的注意力机制包括基于位置的注意力、自注意力和多头注意力等。
预训练模型(Pre-trained Models)
预训练模型是一种使用未标注数据(如维基百科)进行大规模预训练的模型,然后再在特定任务上进行微调的方法。目前比较流行的预训练模型包括BERT、GPT、XLNet等。预训练模型在NLP任务中取得了很好的效果,且可以减少对标注数据的依赖。