循环神经网络(Recurrent Neural Network,RNN)是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网络(recursive neural network)

简介

循环神经网络(RNN)是一种递归神经网络,其特点是能够处理序列数据,包括时间序列、语音、自然语言等。RNN的核心结构是循环单元,它可以捕获序列数据的时序信息,并能够利用这些信息进行模式识别和预测。

RNN的结构可以根据具体任务进行调整,常见的变体包括长短期记忆网络(LSTM)、门控循环单元(GRU)等。这些变体在处理序列数据时具有更强的表达能力和性能。

RNN在许多领域得到了广泛应用,包括语音识别、自然语言处理、机器翻译、图像描述等。它可以用于解决各种问题,如语音识别中的关键词识别、自然语言处理中的文本分类和情感分析等。

然而,RNN也存在一些问题,如梯度消失和梯度爆炸等,这些问题会影响模型的训练效果和性能。此外,RNN的训练也需要大量的数据和计算资源。

总之,RNN是一种强大的神经网络结构,可以用于处理序列数据并解决各种问题。未来的研究将不断探索新的方法和结构,以进一步提高RNN的性能和应用范围。

引言

循环神经网络(RNN)是一种递归神经网络,其特点是能够处理序列数据,包括时间序列、语音、自然语言等。RNN通过使用带自反馈的神经元,能够处理任意长度的序列数据。相比于前馈神经网络,RNN更加符合生物神经网络的结构,因此在语音识别、自然语言生成等任务上得到了广泛应用。

下面是一个典型的RNN结构:

                                                  

可以看到,RNN对长度为N的序列展开之后,可视为一个有N个中间层的前馈神经网络,这个前馈神经网络没有循环连接,因此可以直接使用反向传播算法进行优化,这种优化算法称为“沿时间反向传播”(Back-Propagation Through Time,BPTT),是训练RNN的常见方法。

采用BPTT训练时,每次先从 x_{0} 时刻前向计算至最后一个时刻 x_{t} ,然后再从  x_{t} 时刻反向传播误差(也即,需接受完一个序列中所有时刻的数据再计算loss),期间需要保存每一个时刻隐藏层、输出层的输出。

RNN中最核心的就是主体结构A,亦称之为循环体,如何设计循环体的网络结构是RNN解决实际问题的关键。下图展示了一个最简单的循环体结构,只采用了一个类似全连接层的神经网络结构。

                                   

上图将h_{t-1} 对应的权重 Wh 和 x_{t} 对应的权重Wx 分开表示了,但实际上也可以把这个过程看成是先将 h_{t-1} 和 x_{t}拼接成一个大的向量 (h_{t-1},x_{t}) ,然后用一个权重矩阵 W 去计算乘法,二者本质上是一致的。

1. RNN如何解决实际问题

  1. 自然语言处理:RNN可以用于文本分类、情感分析、机器翻译、文本生成等任务。通过分析文本中的词序和语义关系,RNN可以学习到文本中的模式和规律,从而进行分类或翻译等任务。
  2. 语音识别:RNN可以将语音信号转化为文本,从而方便后续的处理和分析。在语音识别任务中,RNN可以学习到语音信号中的特征和规律,并识别出其中的关键词或语句。
  3. 图像描述:RNN可以通过对图像进行编码和解码来实现图像描述任务。在图像编码时,RNN可以学习到图像中的特征和模式;在解码时,RNN可以根据学到的特征和模式生成描述图像的文本。
  4. 时间序列分析:RNN可以用于时间序列预测和异常检测等任务。通过学习时间序列数据中的模式和趋势,RNN可以预测未来的数值或检测异常行为。
  5. 问答系统:RNN可以根据用户的问题生成回答。通过分析问题和上下文信息,RNN可以学习到相关的知识和模式,从而生成合理的回答。

在实际应用中,RNN需要针对具体问题进行定制和优化,包括选择合适的模型结构、调整超参数、进行数据预处理等。同时,也需要充分考虑RNN的优缺点,如梯度消失和梯度爆炸等问题,从而进行合理的训练和推断。

2. RNN的缺陷

  1. 训练过程中的梯度消失或梯度爆炸问题。在训练RNN时,需要计算梯度以更新模型参数。然而,由于序列数据的长期依赖关系,可能导致梯度消失或梯度爆炸。这会导致模型无法有效地学习到长期依赖关系,从而影响模型的预测性能。
  2. 训练速度较慢。RNN的训练需要处理序列数据中的时序信息,因此计算复杂度较高,训练时间也较长。这使得RNN在处理大规模序列数据时效率较低。
  3. 参数数量较多。RNN具有大量的参数,特别是对于长序列数据,参数数量会显著增加。这会增加模型的训练时间和计算资源消耗,同时也容易导致过拟合问题。
  4. 对序列长度不敏感。RNN对于序列长度的变化较为敏感,对于不同长度的序列数据,可能需要重新训练模型。这使得RNN在处理变长序列数据时不太灵活。

为了解决这些问题,研究者们提出了各种改进方法,如使用更深的网络结构、使用正则化技术、使用注意力机制等。这些方法在一定程度上缓解了RNN的缺陷,并提高了模型的性能。然而,在实际应用中,仍然需要根据具体任务和数据特点进行合理的设计和选择。

3. 其他

  1. 理论上RNN可以支持任意长度的序列,然而在实际训练过程中,如果序列过长,一方面会导致优化时出现梯度弥散和梯度爆炸的问题,另一方面,展开后的前馈神经网络会占用过大的内存,所以实际中一般会规定一个最大长度,当序列长度超过规定长度之后会对序列进行截断。
  2. RNN不属于前馈神经网络。

4. RNN优化版

RNN存在一些缺陷,如梯度消失和梯度爆炸等问题,这会影响模型的训练效果和性能。为了解决这些问题,研究者们提出了各种优化算法和变体,主要包括以下几种:

  1. 梯度剪切:通过限制梯度的最大值来防止梯度爆炸。在计算梯度时,将梯度的最大值限制在一个预先设定的阈值内,从而避免梯度过大导致模型无法训练的情况。
  2. 批归一化:通过对每一批数据进行归一化处理,加速模型的训练并提高模型的泛化能力。批归一化可以有效地减少内部协变量漂移,从而在一定程度上缓解梯度消失的问题。
  3. 权重矩阵分解:通过对RNN的权重矩阵进行分解,降低模型的参数数量,从而提高模型的泛化能力。这种方法可以有效地减少模型的计算量和内存消耗。
  4. 门控循环单元(GRU):通过引入门机制和记忆单元,增强RNN对序列数据的处理能力。GRU可以有效地解决梯度消失和梯度爆炸的问题,并提高模型的性能。
  5. 长短期记忆网络(LSTM):通过引入记忆单元和遗忘门机制,增强RNN对长期依赖关系的处理能力。LSTM可以有效地解决梯度消失和梯度爆炸的问题,并提高模型的性能。

这些优化算法和变体在实际应用中需要根据具体任务和数据特点进行合理的设计和选择。同时,随着技术的不断发展,新的优化算法和变体也不断被提出,以提高RNN的性能和应用范围。

4.1 LSTM

LSTM(Long Short-Term Memory)是一种时间递归神经网络,适合于处理和预测时间序列中间隔和延迟相对较长的重要事件。

LSTM 在科技领域有广泛的应用,可以学习翻译语言、控制机器人、图像分析、文档摘要、语音识别图像识别、手写识别、控制聊天机器人、预测疾病、点击率和股票、合成音乐等等任务。

标准RNN的结构如下:

标准的LSTM的结构如下:

可以看到,LSTM的循环体中有三个sigmoid层,由于sigmoid函数的输出值域为 (0,1) ,可描述每个部分允许多少量通过,因此我们将这三个sigmoid层称为LSTM的三个门。从左至右,依次为“遗忘门(forget gate)、输入门(input gate)、输出门(output gate)”。LSTM正是依靠这些门结构让信息有选择性地影响网络中每个时刻的状态。

4.2 GRU

GRU(Gated Recurrent Unit,门控循环单元)是一种常用的循环神经网络(RNN)结构,可以有效地处理序列数据,并减轻梯度消失的问题。

GRU的结构与LSTM类似,也包含一个隐藏状态和多个门控单元,但相对于LSTM而言,它的结构更加简洁,参数数量更少。GRU包含两个门控单元:重置门(Reset Gate)和更新门(Update Gate)。重置门控制了当前输入与之前的状态信息的混合程度,以此来控制历史信息的保留;更新门则控制了当前状态与前一时刻状态的比重,以此来控制新信息的整合。

GRU的主要优点在于它具有更少的参数数量,相对于LSTM而言计算速度更快,并且在大多数序列建模问题中,其表现与LSTM相当甚至更好。因此,GRU在自然语言处理、语音识别和视频分析等领域中得到了广泛应用。

较之于LSTM,GRU只有两个门: z_{t} 更新门(update gate)、 r_{t} 重置门(reset gate)。另外,GRU同RNN一样,只传输 h_{t} (hidden state)。

性能上,GRU和LSTM在很多任务中不分伯仲。GRU由于结构简单,收敛速度更快,但是数据集大的情况下,LSTM性能更优。

4.3 ON-LSTM

ON-LSTM(Ordered Neurons LSTM)是一种特殊的LSTM变体,其内部神经元是经过特定排序的,从而能够表达更丰富的信息。这种神经元的排序方式能够将层级结构(树结构)整合到LSTM中,从而允许LSTM自动学习到层级结构信息。

在ON-LSTM中,神经元的排序方式是有序的,每个神经元都存储着一些特定的信息,这些信息可以被用来表达更丰富的语义。例如,在处理自然语言时,ON-LSTM可以将语义信息存储在神经元中,并通过特定的排序方式将语义信息整合起来,从而更好地理解自然语言。

相对于普通的LSTM,ON-LSTM具有更好的性能和更广泛的应用范围。它可以用于各种不同的任务,如语言建模、机器翻译、情感分析等等。同时,由于ON-LSTM可以自动学习到层级结构信息,因此它可以用于各种不同的领域,如计算机视觉、自然语言处理等等。

总之,ON-LSTM是一种非常有前途的神经网络结构,它可以用于各种不同的任务和领域,具有广泛的应用前景。

ON-LSTM的结构如下:

5.RNN的变种

  1. 双向RNN(Bi-directional RNN):传统的RNN在处理序列数据时,只能从前向后传递信息,而双向RNN可以同时向前和向后传递信息,因此可以更好地捕捉序列中的前后依赖关系。
  2. 深度RNN(Deep RNN):深度RNN是指具有多个隐藏层的RNN,它可以学习到更复杂的序列模式。
  3. 堆叠RNN(Stacked RNN):堆叠RNN是指将多个RNN堆叠在一起,形成一个深度网络。这种网络可以学习到更复杂的序列模式。
  4. 卷积RNN(Convolutional RNN):卷积RNN是指将卷积层引入RNN中,使其可以学习到局部和全局的序列特征。
  5. 循环连接神经网络(Recursive Neural Network,RNN):这种网络可以处理树形结构的序列数据,如语法树等。
  6. 长短期记忆网络(LSTM):LSTM是一种特殊的RNN,它具有记忆单元和门控机制,可以更好地处理长期依赖关系。
  7. 门控循环单元(GRU):GRU是一种简化版的LSTM,它只有两个门控单元,因此参数数量更少,计算速度更快。

5.1 双向RNN(Bi-directional RNN)

双向RNN(Bi-directional RNN)是一种神经网络结构,它可以从两个方向上捕捉输入序列中的信息。

在标准的RNN中,信息的传递是单向的,即只能从前向后传递。然而,在处理某些问题时,特别是需要理解句子中的上下文关系时,单向的信息流可能不足以捕捉到所有的信息。因此,双向RNN被引入来解决这个问题。

在双向RNN中,信息的传递是双向的,即可以从前往后传递信息,也可以从后往前传递信息。这样,每个时刻的输出不仅取决于当前时刻的输入,还取决于之后的输入,这允许模型更好地理解和预测序列数据中的复杂模式。

双向RNN有两种主要类型:使用两个独立的RNN进行前向和反向传播,以及使用单个RNN进行前向和反向传播。在第一种类型中,两个RNN独立运行,然后将它们的输出合并起来作为最终的输出。在第二种类型中,一个RNN被设计为可以同时进行前向和反向传播。

双向RNN在许多任务中都取得了成功,包括机器翻译、语音识别和自然语言处理等。然而,由于它们需要保存和更新两个方向的隐藏状态,因此它们的计算复杂度比单向的RNN要高。

                      

5.2 深度RNN(Deep RNN)

深度RNN(Deep RNN)是一种具有多个隐藏层的RNN,它可以学习到更复杂的序列模式。

在传统的RNN中,由于只有一个隐藏层,因此其学习能力有限。然而,通过引入更多的隐藏层,深度RNN可以更好地捕捉序列数据中的复杂模式。

深度RNN的结构与深度神经网络类似,只是每一层的输出都作为下一层的输入。因此,深度RNN的每一层都可以学习到不同的特征,从而在序列数据中进行更复杂的建模。

深度RNN可以应用于许多领域,如语音识别、自然语言处理、时间序列预测等。然而,由于其计算复杂度较高,训练时间较长,因此在实际应用中需要针对具体问题进行优化和选择。

                         

5.3 堆叠RNN(Stacked RNN)

堆叠RNN(Stacked RNN)是一种将多个RNN堆叠在一起形成的深度网络结构。这种结构可以使得RNN具有更强的表示能力和更好的性能。

在堆叠RNN中,每个RNN的输出作为下一个RNN的输入。因此,每个RNN都可以学习到不同的特征,从而在序列数据中进行更复杂的建模。

堆叠RNN通常采用分层的方式进行训练,即先训练第一层RNN,然后将它的输出作为第二层RNN的输入进行训练,以此类推。这种训练方式可以使得网络能够逐步学习到更复杂的特征。

堆叠RNN可以应用于许多领域,如自然语言处理、语音识别、时间序列预测等。然而,由于其计算复杂度较高,训练时间较长,因此在实际应用中需要针对具体问题进行优化和选择。

5.4 卷积RNN(Convolutional RNN)

卷积RNN(Convolutional RNN)是一种将卷积运算引入RNN的变种,它能够学习到局部和全局的序列特征。

在卷积RNN中,每个RNN的隐藏层都包含一组卷积核,这些卷积核可以捕捉输入序列中的局部特征。此外,卷积RNN还包含一个全连接层,该层可以捕捉输入序列中的全局特征。

卷积RNN的这种结构使得它能够利用输入序列的二维结构,从而更好地学习到序列中的特征。相对于传统的RNN,卷积RNN具有更强的表示能力和更好的性能。

卷积RNN可以应用于许多领域,如自然语言处理、语音识别、图像处理等。然而,由于其计算复杂度较高,训练时间较长,因此在实际应用中需要针对具体问题进行优化和选择。

5.5 循环连接神经网络(Recursive Neural Network,RNN)

循环连接神经网络(RNN)是一种以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网络。它被广泛应用于处理和预测序列数据,如自然语言处理、语音识别、时间序列预测等。

RNN的结构相对简单,主要由输入层、隐藏层和输出层组成。输入层的输入是序列数据,隐藏层通过递归的方式对序列数据进行建模,输出层则输出模型预测的结果。

由于RNN在处理序列数据时具有记忆性、参数共享并且图灵完备,因此它在对序列的非线性特征进行学习时具有一定优势。此外,RNN还具有广泛的应用场景,如自然语言处理、语音识别、图像处理等。

然而,RNN也存在一些问题,如梯度消失和梯度爆炸等,这些问题会导致模型训练的不稳定和效果不佳。为了解决这些问题,研究者们提出了各种优化算法和变体,如梯度剪切、批归一化、权重矩阵分解、门控循环单元(GRU)和长短期记忆网络(LSTM)等。

总之,循环连接神经网络是一种有效的序列数据处理方法,具有广泛的应用前景。然而,由于其存在一些问题,如梯度消失和梯度爆炸等,因此在实际应用中需要根据具体问题进行优化和选择。

5.6 长短期记忆网络(LSTM)

长短期记忆网络(Long Short-Term Memory,简称LSTM)是一种特殊类型的递归神经网络(RNN),专门设计用于处理具有长期依赖性的序列数据。

LSTM通过引入记忆单元和遗忘门机制,解决了传统RNN在处理长序列时遇到的梯度消失和梯度爆炸问题。具体来说,LSTM增加了一个单元状态(cell state),该状态通过遗忘门(forget gate)来控制信息的保存和丢弃,同时通过输入门(input gate)和输出门(output gate)来控制信息的更新和输出。

LSTM的结构包括输入层、遗忘门层、单元状态层、输入门层、输出门层和输出层。其中,遗忘门层负责控制是否保存上一时刻的单元状态;输入门层负责控制是否将当前时刻的输入加入到单元状态中;输出门层负责控制是否将单元状态作为当前时刻的输出。

由于LSTM具有记忆单元和遗忘门机制,因此可以有效地处理长序列数据中的长期依赖性问题。此外,LSTM还可以通过堆叠(stacking)的方式构建深度网络,进一步提高其表示能力和性能。

LSTM被广泛应用于各种不同的领域,如语音识别、自然语言处理、时间序列预测等。它已经成为许多应用中序列数据处理的首选方法之一。

5.7 门控循环单元(GRU)

门控循环单元(Gated Recurrent Unit,简称GRU)是一种简化版的递归神经网络(RNN),专门设计用于处理序列数据。

GRU通过引入重置门(reset gate)和更新门(update gate)来解决传统RNN在处理长序列时遇到的梯度消失和梯度爆炸问题。具体来说,GRU通过重置门来控制当前时刻的信息是否忽略,而更新门则控制是否将新的信息加入到隐藏状态中。

GRU的结构包括输入层、重置门层、更新门层、隐藏状态层和输出层。其中,重置门层和更新门层通过门控机制来控制信息的流动和更新。

由于GRU具有重置门和更新门机制,因此可以有效地处理长序列数据中的长期依赖性问题。此外,GRU相对于LSTM具有更简单的结构和更少的参数数量,因此在一些应用中可能更加高效。

GRU被广泛应用于各种不同的领域,如语音识别、自然语言处理、时间序列预测等。它已经成为许多应用中序列数据处理的一种有效方法。

6. RNN的应用

  1. 语言建模:RNN可以根据前文预测下一个单词或字符,用于自动文本生成、拼写纠错等任务。
  2. 机器翻译:RNN可以将输入语言的序列转换为输出语言的序列,实现自动翻译。
  3. 文本分类:RNN可以对文本进行情感分析、垃圾邮件过滤等分类任务。
  4. 命名实体识别:RNN可以识别文本中的人名、地名、组织名等实体。

6.1 从语言模型到文本生成

语言模型衡量的是句子在语言中出现的概率,文本生成基于语言模型:生成的句子在语言模型中的概率越高,说明其越有可能是一个流畅、自然的句子。因此我们首先来看一下基于RNN的语言模型,其结构如下:

                    

网络在每个时刻的输出维度为 vocab_size ,经过softmax层后转化为基于当前序列对下一个word的概率预测,采用了cross-entropy loss,本质上等同于最小化语言模型的log perplexity。

有了训练好的语言模型,就可以开始文本生成了:给定一段初始文本,采用自回归的方式,不断生成下一个单词,直至结束(指定长度或指定结束符)。大致流程如下:

上图中语言模型的输出是字典中所有词对应的概率分布,通常我们会选择生成其中概率最大的那个词。不过图中出现了一个采样策略(sampling strategy),这意味着我们可能并不想总生成概率最大的那个词。

由于采样策略的使用,在最后从概率分布中选择词的过程中引入了一定的随机性,导致一些本不大可能组合在一起的词可能也会被生成,使得生成的文本有时会变得有趣甚至富有创造性。采样策略的关键是引入一个temperature参数,用于控制随机性。假设 p(x)为模型输出的原始分布,则加入temperature后的新分布为:

                                                p(x_{new})=\frac{e^{log(p(x_{1}))/temperature}}{\sum _{i}e^{log(p(xi))/temperature}}

7. 机器翻译

7.1 机器翻译背景与Seq2Seq

机器翻译是自然语言处理领域的一个重要应用,它旨在将一种自然语言自动翻译成另一种自然语言,以便人们能够理解和交流。

在传统的机器翻译方法中,基于规则的方法和基于统计的方法是最常用的两种方法。其中,基于统计的方法是目前机器翻译的主流方法,它通过建立大规模语料库,利用概率统计模型对语言进行建模和翻译。

Seq2Seq(sequence to sequence)是一种基于深度学习的机器翻译方法,它基于RNN(循环神经网络)进行建模和翻译。Seq2Seq方法将输入序列映射到输出序列,通过编码器(encoder)将输入序列编码成固定长度的向量表示,然后通过解码器(decoder)将该向量表示解码成输出序列。

Seq2Seq方法的优点是可以处理长序列,并且可以生成自然语言句子,具有很高的灵活性和适应性。此外,Seq2Seq方法还可以通过注意力机制(attention mechanism)来提高翻译的精度和流畅度。

然而,Seq2Seq方法也存在一些问题,如难以保证翻译的准确性和流畅性,对于复杂的语言现象处理能力有限等。因此,在机器翻译领域,研究者们不断探索和尝试新的方法和技术,以提高机器翻译的性能和效果。

                     

使用一个RNN来读取输入句子,将整个句子的信息压缩到一个固定维度的编码(context vector)中;再使用另一个RNN读取这个编码,将其“解压”为目标语言的一个句子,这两个RNN分别称为编码器(Encoder)和解码器(Decoder),这个模型也称为Encoder-Decoder模型(事实上Encoder-Decoder的含义还要更广一些,并不特指Seq2Seq)。

解码器部分的结构与语言模型几乎完全相同:输入为单词的词向量,输出为softmax层产生的单词概率,损失函数为cross-entropy。事实上,解码器可以理解为一个以输入编码为前提的语言模型(Conditional Language Model)

编码器部分则更为简单,它与解码器一样拥有词向量层和RNN,但是由于在编码阶段并未输出,因此不需要softmax层。

在训练过程中,编码器顺序读入每个单词的词向量,然后将最终的隐藏状态赋值到解码器作为初始状态。解码器的第一个输入是一个特殊字符<sos>(Start-Of-Sentence),每一步预测的单词是训练数据的目标句子,预测序列的最后一个单词是<eos>(End-Of-Sentence)。

Seq2Seq还可应用于文本摘要、对话机器人、语音识别、图像描述生成等任务。

7.2 Attention

Attention机制的发展历程和应用场景可以追溯到20世纪90年代,当时在视觉图像领域首次提出了Attention机制的概念。然而,直到2014年,在Google Mind团队的一篇论文《Recurrent Models of Visual Attention》中,Attention机制在图像识别任务中得到了成功应用,随后在机器翻译、图像主题生成、摘要生成、语音识别、行为检测、文字识别等领域均得到了广泛应用。

随着深度学习技术的不断发展,Attention机制也不断得到优化和扩展。从最初的点积注意力机制,到后来的加性注意力机制和多层注意力机制,再到Transformer模型中的自注意力机制,Attention机制在自然语言处理领域的应用不断得到提升。

目前,Attention机制已经成为自然语言处理领域中许多任务的核心技术之一,例如:

  1. 机器翻译:Attention机制被广泛应用于Encoder-Decoder架构中,通过捕捉输入序列中的重要信息,提高翻译的准确性和流畅性。
  2. 文本分类:利用Attention机制可以突出文本中的重要特征,从而增强分类器的效果。
  3. 情感分析:通过Attention机制可以捕捉到文本中的情感倾向和情感表达方式,从而对文本进行情感分析。
  4. 问答系统:利用Attention机制可以聚焦于问题中的关键信息,从而从大量文本中获取答案。
  5. 图像描述生成:将Attention机制应用于图像描述生成任务,通过对图像不同区域的关注,生成更加准确和流畅的描述语句。

总之,Attention机制已经成为自然语言处理领域中不可或缺的一部分,为许多任务提供了新的思路和方法。

a).简介

在Seq2Seq中,编码器将输入压缩到一个维度固定的向量中,然后解码器根据这个向量生成输出。当输入较大时,这个中间向量难以存储足够的信息(类比图像压缩后导致失真),就成为这个模型的一个瓶颈。因此,Attention出现了。

Attention往往和Encoder-Decoder一起被提及,但它未必要在Encoder-Decoder框架下使用。

Attention的原理如下所示:

上图可以这么来看待:Source中的构成元素是一系列的<Key, Value>对,给定Target中的某个Query,通过计算Query和各个Key的相关性,得到每个Key对应Value的权重系数,然后对Value进行加权求和,得到最终的Attention数值。用公式表示如下:

至此,我们可以看出Attention的核心逻辑,顾名思义,Attention是从大量信息中有选择地筛出少量重要信息并聚焦到这些重要信息上:聚焦的过程体现在权重系数的计算上,即权重代表了信息的重要性,而Value是其对应的信息。

Attention的具体计算过程,如果对目前大多数方法进行抽象的话,可以概括为如下三个阶段:

b). 优点

  1. 参数少:较之CNN、RNN
  2. 速度快:每步的结果不依赖于上一步,可并行
  3. 效果好:可捕捉长距离信息

c). Attention的种类

  1. 计算区域:根据Attention的计算区域,可以分成全局Attention和局部Attention。全局Attention对所有key求权重概率,每个key都有一个对应的权重,是一种全局的计算方式;局部Attention则只关注输入序列中的一部分key,通常用于处理长序列数据。
  2. 所用信息:根据所用信息,可以分成基于内容的Attention和基于位置的Attention。基于内容的Attention主要关注输入序列的内容信息,而基于位置的Attention则关注输入序列中各个位置的信息。
  3. 结构层次:根据结构层次,可以分成单层Attention和多层Attention。单层Attention只包含一层神经网络结构,而多层Attention则包含多层神经网络结构。
  4. 模型:根据模型,可以分成基于RNN的Attention和基于Transformer的Attention。基于RNN的Attention主要应用于Encoder-Decoder架构中,而基于Transformer的Attention则采用自注意力机制进行信息交互。

除此之外,还有一些其他的Attention种类,如多头Attention、自适应Attention等。这些种类都是为了解决不同的问题而提出的,可以根据实际需求进行选择和应用。

1. 权值计算方式

         

8、其它

1. 由于RNN的输入和输出可以是不定长且不等长的,因此在实际应用中可视情况选择不同结构的输入输出

2. CNN同一层次单元没有依赖关系,可以采用矩阵并行计算;RNN上一时刻的输出将作为下一时刻的输入,因此存在依赖关系,只能串行计算;这也是CNN训练速度快的原因

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐